我的机器上有两张NVidia卡,两者都支持CUDA。当我运行示例脚本开始使用PyCUDA时:http://documen.tician.de/pycuda/我收到错误
nvcc fatal : Value 'sm_30' is not defined for option 'gpu-architecture'
我的计算GPU是计算能力3.0,因此sm_30应该是nvcc编译器的正确选项。我的图形GPU只有CC 1.2,所以我想也许这就是问题所在。我已经安装了Linux的CUDA 5.0版本,没有错误,以及所有编译器组件和python组件。
有没有办法明确告诉PyCUDA使用哪个GPU?
答案 0 :(得分:2)
nvcc
根据您安装的特定GPU不会抱怨。它将针对您告诉它编译的任何GPU类型进行编译。问题是,当指定sm_30
选项时,您指定的--gpu-architecture
不是--gpu-code
的有效选项。
您应该compute_30
--gpu-architecture
和sm_30
--gpu-code
传递nvcc
另外请确保您使用了正确的CUDA_DEVICE
,并且不会无意中使用旧版本的CUDA工具包。
一旦你解决了编译问题,就会有一个环境变量CUDA_DEVICE=2 python my-script.py
,pycuda会观察它来选择一个特定的安装GPU。
来自here:
{{1}}
顺便说一句,someone else有你的问题。 你确定你没有使用PyCUDA正在使用的旧版CUDA工具包吗?
答案 1 :(得分:0)
我不知道Python包装器(或者一般的Python),但在C ++中你有WGL_NV_gpu_affinity NVidia扩展,它允许你定位特定的GPU。可能你可以用Python编写一个包装器。
修改强>
现在我发现你实际上在运行Linux,解决方案更简单(C ++)。你只需要在上下文初始化之前枚举XDisplay。
所以基本上默认GPU通常以显示字符串“0.0”
为目标要使用第二个GPU打开显示,您可以执行以下操作:
const char* gpuNum = "0:1";
if (!(_display = XOpenDisplay(gpuNum ))) {
printf("error: %s\n", "failed to open display");
} else {
printf("message: %s\n", "display created");
}
////here comes the rest of context setup....