CUDA 多个编译器警告

CUDA Multiple Compiler Warnings

我在 Visual Studio 2012 年一直在使用 CUDA v6.5 进行开发,并且 运行 遇到了一个问题:编译 .cu 文件时,编译器将针对单行源代码输出多个警告代码。通常这不是什么大问题,但它已经开始花费很长时间来构建,我怀疑这可能就是原因。例如:

int unused = 0;

生成以下错误四次:

1>.../GeometryManager.cu(188): warning : variable "unused" was declared but never referenced

这些是传递给 nvcc 的命令行参数:

-gencode=arch=compute_35,code=\"sm_35,compute_35\" --use-local-env --cl-version 2012
-ccbin "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin"
-I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\include"
-I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\include"
-I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\include"
-G   --keep-dir Debug -maxrregcount=0  --machine 32 --compile
-cudart static -arch sm_20  -g   -DNDEBUG -DWIN32 -D_DEBUG -D_CONSOLE
-D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MTd  "
-o Debug\GeometryManager.cu.obj "C:\...\GeometryManager.cu" 

编译.cpp文件时,似乎正常发出警告。到目前为止,我尝试将属性中代码生成的值更改为 compute_35、sm_35(之前列出了其中的几个),但没有帮助.

如果有 CUDA 或 nvcc 经验的人可以阐明这种情况,我将不胜感激。关于如何使用 CUDA 减少构建时间的任何其他建议也会有所帮助。谢谢

它多次生成警告的原因是因为它由于多个目标的规范而多次编译您的代码:

-gencode=arch=compute_35,code=\"sm_35,compute_35\"

-arch sm_20

如果您不需要两组目标,您可以减少生成的警告消息并通过删除其中一个来缩短编译时间(即从您的 visual studio 项目配置中删除它)。 (在这种情况下,我认为您最终会收到 2 组警告而不是 4 组。)