(CUDA)nvcc无法在我的项目中正确解析工具包路径,而在示例项目中它可以

时间:2011-03-06 22:11:27

标签: c++ visual-studio-2008 cuda compilation

我一直在尝试将.cu文件添加到我自己的(dll)win32项目中并使用Windows7上的VS2008进行编译。 我能够在cppIntegration示例项目中编译.cu,但在我的项目中我遇到了问题。

起初,我收到错误“不知道该怎么做”工具包......“。似乎nvcc遇到的问题是工具包在其路径中有空格。重命名NVIDIA工具包时文件夹没有空格,我得到了同样的错误,但现在它说“文件”,这是“程序文件”文件夹的一部分,也有一个空格。

请注意,在cppIntegration中它正常工作,尽管它具有完全相同的路径。 所以我将SymbLink工具包路径,现在我在项目中编译.cu文件时遇到了不同的错误(但不是在cppIntegration中)。 “无法找到指定的路径”。 我认为这指的是我只是SymbLinked的相同路径。

我相信我需要更改项目属性中的某些内容。也许我正在构建一个DLL的事实导致了这个问题。也许它必须用64位版本的CUDA做一些事情,而我用32位win32(也许?)。

谢谢。

更新

这是我在VS2008中编译时的输出。

Compiling with CUDA Build Rule...
1>"\MyCUDA\CUDA\v3.2\\bin\nvcc.exe"   
     

-gencode =拱= compute_10,代码= \ “sm_10,compute_10 \”   -gencode =拱= compute_20,代码= \ “sm_20,compute_20 \”    - 机器32 -ccbin“C:\ Program Files(x86)\ Microsoft Visual Studio   9.0 \ VC \ bin“-Xcompiler”/ EHsc / W3 / nologo / O2 / Zi / MT“   -I“\ MyCUDA \ CUDA \ v3.2 \ include”-maxrregcount = 32 --compile -o“。\ Intermediate \ Release / Decoder.cu.obj”   Decoder.cu

     

1>系统无法找到路径   指定。

     

1>项目:错误PRJ0019:工具   从“编译”返回错误代码   使用CUDA构建规则......“

这是cppIntegration的编译:

  

“\ MyCUDA \ CUDA \ V3.2 \ BIN \ nvcc.exe”
  -gencode =拱= compute_10,代码= \ “sm_10,compute_10 \”   -gencode =拱= compute_20,代码= \ “sm_20,compute_20 \”    - 机器32 -ccbin“C:\ Program Files(x86)\ Microsoft Visual Studio   9.0 \ VC \ bin“-Xcompiler”/ EHsc / W3 / nologo / O2 / Zi / MT“   -I“\ MyCUDA \ CUDA \ v3.2 \ include”-maxrregcount = 32 --compile -o“Release / cppIntegration.cu.obj”   cppIntegration.cu

3 个答案:

答案 0 :(得分:2)

我解决了我的问题。 问题是,我的环境变量CUDA_PATH中有\ MyCUDA。这适用于cppIntegration,因为它在C:上,但不适用于我的项目,因为它在E:上。 所以我不得不添加C:\ MyCUDA。 它仍然无法解释为什么nvcc不喜欢路径中的空格。

希望有人会觉得这很有用。

答案 1 :(得分:1)

当我指定以“\”结尾的包含路径时,我遇到了VS2008的这个问题。

例如,我将配置属性CUDA RuntimeAPI / General / Additional Include Directories设置为c:\ projects \ cuda_by_example。该工具生成了一个包含此命令的nvcc命令行:

... -I“c:\ projects \ cuda_by_example \” - I“C:\ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v4.0 \ include”...

我认为第一个参数的最后反斜杠用于转义双引号,而nvcc将下一个参数的开头视为包含路径的一部分。解析下一个参数然后生成“不知道用Toolkit做什么...”消息。

通过删除目录规范的最终反斜杠,问题得以解决。

答案 2 :(得分:0)

如何用引号指定所有有问题的路径?在大多数情况下,它解决了这个问题。

否则,我认为你必须向我们提供你正在做的事情(确切的命令行等)。通常一般的想法是好的,问题在于细节。