erreur : identificateur “atomicAdd” n'est pas définie sous visual studio 2010 & cuda 4.2 avec GPU Fermi
J'ai essayé de compiler quelques CUDA codes sous visual studio 2010 avec CUDA 4.2 (j'ai créé cette CUDA projet à l'aide de Parallel Nsight 2.2), mais j'ai rencontré un atomique problème "erreur : identificateur "atomicAdd" n'est pas définie", encore que je ne peux pas résoudre après avoir vérifié plusieurs forums.
J'ai donc essayé d'obtenir des informations à partir de CUDA SDK Échantillons. Tout d'abord, j'ai couru le simpleAtomicIntrinsics échantillon dans CUDA SDK, qui a passé son test. Ensuite, j'ai copié tous les fichiers dans cet exemple à un nouveau CUDA 4.2 projet dans visual studio 2010 et les a rassemblées, Voici le résultat.
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.
Par le chemin, je peux exécuter d'autres échantillons telles que l'horloge, matrixMul, etc. en vertu de la présente vs2010 CUDA Projet. (Cela signifie que le chemin est correctement réglé)
Je l'ai googlé et trouvé le lien suivant Certains d'émission Atomique à ajouter dans CUDA noyau de l'opération. J'ai modifié les propriétés du projet et le .cu fichier, selon elle, mais ne peut toujours pas résoudre le problème.
Toute suggestion?
OriginalL'auteur G_fans | 2012-07-18
Vous devez vous connecter pour publier un commentaire.
Atomics sont pas disponibles en vertu de calculer l'architecture 1.0, mais vous êtes toujours en train de compiler pour en fonction de vos journaux de construction. Essayez de supprimer les références à
compute_10
etsm_10
de votre CUDA propriétés du projet et de la compilation juste pour calculer l'architecture 2.0 (GeForce série 400 et plus récent).OriginalL'auteur ChrisV
Essayer de compiler avec le drapeau
-arch sm_20
Je suis nouveau sur VS2010 - précisément comment pouvez-vous définir ce drapeau?
Je n'utilise pas de VS, donc je ne suis pas sûr de savoir comment compiler, mais je suppose que ça doit être illustré dans CUDA docs.
Pas de soucis résolu: stackoverflow.com/questions/14411435/...
OriginalL'auteur chaohuang
"Atomics sont pas disponibles en vertu de calculer l'architecture 1.0, mais vous êtes toujours en train de compiler pour en fonction de vos journaux de construction. Essayez de supprimer les références à compute_10 et sm_10 de votre CUDA propriétés du projet et de la compilation juste pour calculer l'architecture 2.0 (GeForce série 400 et plus récent)."
Il est tout à fait raison,d'ailleurs,si vous les gars sont en train de recueillir rodrigob_doppia code source(boosted_learning),vous pouvez simplement ajouter la ligne dans la configuration de votre ordinateur:
set(CUDA_NVCC_FLAGS "-arch=sm_20" CACHE "CHAÎNE de nvcc drapeaux" de la FORCE)
En fait,il est réglé pour passer l'arche de pavillon pour sm_20,tout de même, comme le dit ci-dessus.
OriginalL'auteur user1756343