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

时间:2015-01-06 09:24:39

标签: python-2.7 visual-studio-2013 cuda nvcc

我刚刚安装了CUDA 6.5,VS2013 Community Edition和pyCUDA。我已经安装了python 2.7.8。我是CUDA和VS2013开发的新手,但不是python。我通过构建一些32位和64位的CUDA VS2013示例解决方案来验证我的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。它完成得很好,并生成了一个有效的kernel.cpp1.ii。

有没有办法控制nvcc构建的cl.exe命令? nvcc手册中没有任何内容突然出现在我身上,但有了所有这些选项,我当然可能已经错过了它。

同时发布了in this Nvidia developers forum

1 个答案:

答案 0 :(得分:0)

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

<强>更新 问题没有在CUDA 7.0中体现出来。