CUDA多个编译器警告

时间:2015-02-12 10:40:35

标签: c++ visual-studio-2012 cuda nvcc

我一直在使用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减少构建时间的任何其他建议也会有所帮助。感谢。

1 个答案:

答案 0 :(得分:1)

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

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

-arch sm_20

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