CUDA 9.0和pycuda,错误:CompileError:nvcc编译... kernel.cu失败

3
import pycuda.driver as cuda
import pycuda.autoinit
from pycuda.compiler import SourceModule
import numpy
a = numpy.random.randn(4,4)
a = a.astype(numpy.float32)
a_gpu = cuda.mem_alloc(a.nbytes)
cuda.memcpy_htod(a_gpu, a)
mod = SourceModule("""
__global__ void doublify(float *a)
{
int idx = threadIdx.x + threadIdx.y*4;
a[idx] *= 2;
}
""")

我刚刚安装了CUDA 9.0和pycuda,并且正在按照教程运行第一个CUDA程序。但是一直出现错误:

CompileError:c:\users\rl74173\appdata\local\temp\tmp6nww2c\kernel.cu的nvcc编译失败

我之前做了一些研究,并找到了一些解决方法。所以在运行之前我添加了以下内容:

import os
os.system("vcvarsamd64.bat")

但是仍然存在错误。
我还看到有人通过在nvcc.profile下添加以下行来解决问题。
COMPILER-BINDIR = C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64

我安装了Visual Studio Community 2017,所以在我的情况下,我尝试了:
COMPILER-BINDIR = C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\lib\amd64

但这并没有帮助。

你修复过这个问题吗?nvcc.profiles在哪里?另外,这不应该是"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\Hostx64\amd64"或者更近期的"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.12.25827\bin\Hostx64\x64"吗? - JHBonarius
我在不同的计算机上尝试了许多不同的方法,但还没有成功。我无法弄清楚为什么,CUDA就是不与我合作。 - billinair
我已经成功地将CUDA v9.1.xxx与Visual Studio 2017配合使用,通过安装较旧的版本(V15.4)。现在我可以创建一个DLL,然后可能可以从Python中调用。但是,我更喜欢使用PyCuda。尽管如此,我仍然遇到了这个错误。 - JHBonarius
好的,我在PyCuda的compiler.py中添加了print(cmdline)。我在Windows cmd窗口中(使用vcvars64运行)运行了确切的命令:nvcc --cubin -arch sm_50 -m64 -Ic:\programdata\anaconda3\lib\site-packages\pycuda\cuda kernel.cu...它可以工作!为什么PyCuda就不能工作呢... - JHBonarius
更好的想法:在调用后添加了 print(stdout)。输出为:"nvcc fatal : Cannot find compiler 'cl.exe' in PATH"。因此,似乎对 vcvars[...].bat 的调用未正确更改 PATH。 - JHBonarius
1个回答

1

好的,我已经为自己解决了这个问题。问题在于运行vcvars64.bat会在一个shell中设置路径环境变量...然后关闭它,所以设置的路径又消失了。

你需要做的是自己更改路径:将路径添加到cl.exe编译器文件中。为此,我参考了这篇文章。在我的情况下,我不得不在我的.py文件开头添加以下内容:

import os
if (os.system("cl.exe")):
    os.environ['PATH'] += ';'+r"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64"
if (os.system("cl.exe")):
    raise RuntimeError("cl.exe still not found, path probably incorrect")

我希望这对你有用。
编辑:您需要运行与CUDA兼容的MSVS版本。即CUDA v9.0不支持MSVS2017,而CUDA v9.1仅支持15.4版本,不支持更高版本。通过从Visual Studio的本机工具命令提示符中运行nvcc.exe来尝试是否有效。

谢谢!我想试一试。 - billinair
@billinair查了一下。Vs2017仅支持Cuda 9.1版本。即使如此,您也应该安装vs v15.4而不是最新版本。 - JHBonarius
@billinair,另外,您使用的PyCuda软件包中的cuda9185是指Cuda v9.1.85。因此,如果您安装了CUDA v9.0,则无法与该PyCuda软件包兼容。 - JHBonarius
我无法找到正确的compiler.py,因为在文件夹C:\Users******\AppData\Local\Continuum\anaconda3\pkgs中没有pycuda。 - billinair
这是因为它可能在 C:\Users******\AppData\Local\Continuum\anaconda3\Lib\site-packages\pycuda 中。在文件中大约120行左右,您可以看到以下代码行: result,stdout,stderr = call_capture_output(cmdline,cwd=file_dir,error_on_nonzero=False)。在此之下,您可以添加语句 print(result);print(stdout);print(stderr) 等等。 - JHBonarius
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接