如何控制nvcc构建的cl.exe命令

How to control the cl.exe command that nvcc builds

我刚刚安装了 CUDA 6.5、VS2013 社区版和 pyCUDA。我已经安装了 python 2.7.8。我是 CUDA 和 VS2013 开发的新手,但不是 python。我通过将一些 CUDA VS2013 示例解决方案构建为 32 位和 64 位来验证我的 CUDA 安装,所以事情到此为止。

现在我正在尝试通过运行这个测试程序来验证我的 pyCUDA 安装。

### from: http://documen.tician.de/pycuda/tutorial.html
import pycuda.gpuarray as gpuarray
import pycuda.driver as cuda
import pycuda.autoinit
import numpy as np

# copy to gpu
a_gpu = gpuarray.to_gpu(np.random.randn(4,4).astype(np.float32))

# double it
a_doubled = (2 * a_gpu).get()
print('a_doubled', a_doubled)

运行时,会产生以下错误:

[snip]
  File "B:\Anaconda2\lib\site-packages\pycuda-2014.1-py2.7-win-amd64.egg\pycuda\compiler.py", line 250, in do_compile
    return compile_plain(source, options, keep, nvcc, cache_dir)
  File "B:\Anaconda2\lib\site-packages\pycuda-2014.1-py2.7-win-amd64.egg\pycuda\compiler.py", line 132, in compile_plain
    stderr=stderr.decode("utf-8", "replace"))
CompileError: nvcc compilation of e:\temp\cb4\tmpadhjeh\kernel.cu failed
[command: nvcc -cubin -keep -cudart shared -arch sm_52 -m64 -Ib:\anaconda2\lib\site-packages\pycuda-2014.1-py2.7-win-amd64.egg\pycuda\cuda -keep kernel.cu]
[stdout:kernel.cu]
[stderr:
'B:\VisualStudioCom2013\VC\bin\amd64"\cl.exe @kernel.cpp1.ii.res > "kernel.cpp1.ii' is not recognized as an internal or external command,
operable program or batch file.]

请注意导致错误的 cl.exe 命令中多余的双引号。没有它们我可以手动运行 B:\VisualStudioCom2013\VC\bin\amd64\cl.exe @kernel.cpp1.ii.res > kernel.cpp1.ii。它完成得很好,并生成了一个有效的内核。cpp1.ii。

有什么方法可以控制 nvcc 构建的 cl.exe 命令吗? nvcc 手册中的任何内容都没有引起我的注意,但是对于所有这些选项,我肯定会错过它。

也发布了 in this Nvidia developers forum

这是 CUDA 6.5 的 nvcc 中的错误。在按照@talonmies 的建议浏览 nvcc.profile 之后,我开始尝试组合配置文件设置和命令行选项。我将其缩小为:当 --keep 在命令行上并且 compiler-bindir 在 nvcc.profile 中时,会生成包含双引号的格式错误的 cl.exe 编译命令。保留中间文件的解决方案是将 cl.exe 放在路径中,并从 nvcc.profile 中删除 compiler-bindir。作为错误记录到 NVIDIA。

更新: 该问题在 CUDA 7.0 中不存在。