【问题标题】:error : identifier "atomicAdd" is undefined under visual studio 2010 & cuda 4.2 with Fermi GPU错误:在带有 Fermi GPU 的 Visual Studio 2010 和 cuda 4.2 下未定义标识符“atomicAdd”
【发布时间】:2012-07-18 00:28:01
【问题描述】:

我试图在 Visual Studio 2010 下使用 CUDA 4.2 编译一些 CUDA 代码(我使用 Parallel Nsight 2.2 创建了这个 CUDA 项目),但我遇到了一个原子问题“错误:标识符“atomicAdd”未定义”,我仍然查了几个论坛都解决不了。

所以我尝试从 CUDA SDK 示例中获取一些信息。首先,我在 CUDA SDK 中运行了 simpleAtomicIntrinsics 示例,它通过了测试。然后,我将这个示例中的所有文件复制到 Visual Studio 2010 中的一个新的 CUDA 4.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 项目下运行其他示例,例如时钟、matrixMul 等。 (这意味着包含路径设置正确)

我用谷歌搜索并找到了以下链接Some issue with Atomic add in CUDA kernel operation。我根据它更改了项目和.cu文件的属性,但仍然无法解决问题。

有什么建议吗?

【问题讨论】:

    标签: visual-studio-2010 cuda atomic gpu-atomics


    【解决方案1】:

    尝试使用标志-arch sm_20进行编译

    【讨论】:

    • 我是 VS2010 的新手——你是如何设置这个标志的?
    • @MiloChen 我不使用VS,所以我不确定如何在那里编译,但我想它应该在CUDA docs中说明。
    • 不用担心 - 已解决:stackoverflow.com/questions/14411435/…
    【解决方案2】:

    Atomics 在计算架构 1.0 下不可用,但您仍在尝试根据构建日志对其进行编译。尝试从您的 CUDA 项目属性中删除对 compute_10sm_10 的引用,并仅针对计算架构 2.0(GeForce 400 系列和更新版本)进行编译。

    【讨论】:

    • 感谢您的解释。原来我将代码生成更改为 compute_20、sm_20,但它仍然继承了项目默认值的 compute_10、sm_10 值。我应该更仔细地检查构建日志。:)
    【解决方案3】:

    “Atomics 在计算架构 1.0 下不可用,但您仍在尝试根据构建日志对其进行编译。尝试从您的 CUDA 项目属性中删除对 compute_10 和 sm_10 的引用,并仅针对计算架构 2.0(GeForce 400系列和更新版本)。” 完全正确,顺便说一句,如果你们正在编译rodrigob_doppia的源代码(boosted_learning),你可以在你的机器配置中添加这行: 设置(CUDA_NVCC_FLAGS“-arch=sm_20”缓存字符串“nvcc 标志”强制) 其实就是把arch标志设置为sm_20,和上面说的一样。

    【讨论】:

      猜你喜欢
      • 2016-02-15
      • 1970-01-01
      • 2020-10-21
      • 2012-08-21
      • 2016-09-30
      • 2011-10-09
      • 2016-12-04
      • 1970-01-01
      • 2018-11-13
      相关资源
      最近更新 更多