4

Visual Studio2010でCUDA4.2を使用していくつかのCUDAコードをコンパイルしようとしましたが(Parallel Nsight 2.2を使用してこのCUDAプロジェクトを作成しました)、「エラー:識別子「atomicAdd」が未定義です」というアトミックな問題が発生しました。いくつかのフォーラムをチェックした後に解決します。

そこで、CUDASDKサンプルからいくつかの情報を取得しようとしました。まず、CUDA SDKでsimpleAtomicIntrinsicsサンプルを実行し、テストに合格しました。次に、このサンプルのすべてのファイルをVisual Studio2010の新しいCUDA4.2プロジェクトにコピーしてコンパイルしました。結果は、次のとおりです。

1>  E:\CUDA exercise Codes\CUDA_EXERCISES\CUDA_EXERCISES\CUDA_EXERCISES>"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\bin\nvcc.exe" -gencode=arch=compute_20,code=\"sm_20,compute_20\" -gencode=arch=compute_20,code=\"sm_20,compute_20\" -gencode=arch=compute_10,code=\"sm_10,compute_10\" --use-local-env --cl-version 2010 -ccbin "c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin"  -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\include"  -G  --keep-dir "Debug" -maxrregcount=0  --machine 32 --compile  -g    -Xcompiler "/EHsc /nologo /Od /Zi  /MDd  " -o "Debug\simpleAtomicIntrinsics.cu.obj" "E:\CUDA exercise Codes\CUDA_EXERCISES\CUDA_EXERCISES\CUDA_EXERCISES\simpleAtomicIntrinsics.cu" 
1>  simpleAtomicIntrinsics.cu
1>  tmpxft_00007220_00000000-3_simpleAtomicIntrinsics.compute_20.cudafe1.gpu
1>  tmpxft_00007220_00000000-7_simpleAtomicIntrinsics.compute_20.cudafe2.gpu
1>  simpleAtomicIntrinsics.cu
1>e:\cuda exercise codes\cuda_exercises\cuda_exercises\cuda_exercises\simpleAtomicIntrinsics_kernel.cu(33): error : identifier "atomicAdd" is undefined
1>  
1>e:\cuda exercise codes\cuda_exercises\cuda_exercises\cuda_exercises\simpleAtomicIntrinsics_kernel.cu(36): error : identifier "atomicSub" is undefined
1>  
1>e:\cuda exercise codes\cuda_exercises\cuda_exercises\cuda_exercises\simpleAtomicIntrinsics_kernel.cu(39): error : identifier "atomicExch" is undefined
1>  
1>e:\cuda exercise codes\cuda_exercises\cuda_exercises\cuda_exercises\simpleAtomicIntrinsics_kernel.cu(42): error : identifier "atomicMax" is undefined
1>  
1>e:\cuda exercise codes\cuda_exercises\cuda_exercises\cuda_exercises\simpleAtomicIntrinsics_kernel.cu(45): error : identifier "atomicMin" is undefined
1>  
1>e:\cuda exercise codes\cuda_exercises\cuda_exercises\cuda_exercises\simpleAtomicIntrinsics_kernel.cu(48): error : identifier "atomicInc" is undefined
1>  
1>e:\cuda exercise codes\cuda_exercises\cuda_exercises\cuda_exercises\simpleAtomicIntrinsics_kernel.cu(51): error : identifier "atomicDec" is undefined
1>  
1>e:\cuda exercise codes\cuda_exercises\cuda_exercises\cuda_exercises\simpleAtomicIntrinsics_kernel.cu(54): error : identifier "atomicCAS" is undefined
1>  
1>e:\cuda exercise codes\cuda_exercises\cuda_exercises\cuda_exercises\simpleAtomicIntrinsics_kernel.cu(59): error : identifier "atomicAnd" is undefined
1>  
1>e:\cuda exercise codes\cuda_exercises\cuda_exercises\cuda_exercises\simpleAtomicIntrinsics_kernel.cu(62): error : identifier "atomicOr" is undefined
1>  
1>e:\cuda exercise codes\cuda_exercises\cuda_exercises\cuda_exercises\simpleAtomicIntrinsics_kernel.cu(65): error : identifier "atomicXor" is undefined
1>  
1>  11 errors detected in the compilation of "C:/Users/NIEXIA~1/AppData/Local/Temp/tmpxft_00007220_00000000-9_simpleAtomicIntrinsics.compute_10.cpp1.ii".
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA 4.2.targets(361,9): error MSB3721: The command ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\bin\nvcc.exe" -gencode=arch=compute_20,code=\"sm_20,compute_20\" -gencode=arch=compute_20,code=\"sm_20,compute_20\" -gencode=arch=compute_10,code=\"sm_10,compute_10\" --use-local-env --cl-version 2010 -ccbin "c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin"  -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\include"  -G  --keep-dir "Debug" -maxrregcount=0  --machine 32 --compile  -g    -Xcompiler "/EHsc /nologo /Od /Zi  /MDd  " -o "Debug\simpleAtomicIntrinsics.cu.obj" "E:\CUDA exercise Codes\CUDA_EXERCISES\CUDA_EXERCISES\CUDA_EXERCISES\simpleAtomicIntrinsics.cu"" exited with code 2.
1>
1>Build FAILED.

ちなみに、このvs2010 CUDAプロジェクトでは、clock、matrixMulなどの他のサンプルを実行できます。(これは、インクルードパスが正しく設定されていることを意味します)

私はそれをグーグルで検索し、次のリンクを見つけました。CUDAカーネル操作でのAtomicaddに関するいくつかの問題。プロジェクトと.cuファイルの両方のプロパティをそれに応じて変更しましたが、それでも問題を解決できません。

なにか提案を?

4

3 に答える 3

8

フラグを付けてコンパイルしてみてください-arch sm_20

于 2012-07-18T00:56:37.047 に答える
4

コンピューティングアーキテクチャ1.0ではアトミックは使用できませんが、ビルドログに従ってアトミックをコンパイルしようとしています。CUDAプロジェクトのプロパティへの参照を削除し、コンピューティングアーキテクチャ2.0(GeForce 400シリーズ以降)用にコンパイルしてみてcompute_10くださいsm_10

于 2012-07-18T00:48:42.893 に答える
0

「アトミックはコンピューティングアーキテクチャ1.0では使用できませんが、ビルドログに従ってコンパイルしようとしています。CUDAプロジェクトのプロパティからcompute_10とsm_10への参照を削除し、コンピューティングアーキテクチャ2.0(GeForce 400シリーズ以降)用にコンパイルしてみてください。 )。」それは絶対に正しいです、ところで、あなたたちがrodrigob_doppiaのソースコード(boosted_learning)をコンパイルしているなら、あなたはあなたのマシン構成に行を追加することができます:set(CUDA_NVCC_FLAGS "-arch = sm_20" CACHE STRING "nvcc flags" FORCE)実際には上記と同じように、アーチフラグをsm_20に切り替えるように設定します。

于 2015-01-15T01:20:44.570 に答える