如何告诉PyCUDA使用哪个GPU?

4

我机器上有两张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?

3个回答

2

nvcc不会根据你安装的特定GPU发出警告。它将为您指定要编译的任何GPU类型进行编译。问题在于,您正在指定sm_30,这是--gpu-architecture的无效选项,当指定--gpu-code选项时。

您应该传递compute_30--gpu-architecture,并且sm_30--gpu-code

还要确保您使用了正确的nvcc,并且没有无意中使用CUDA工具包的某个旧版本。

一旦您解决了编译问题,就有一个环境变量CUDA_DEVICE,pycuda将观察以选择特定的已安装GPU。

来源:这里

CUDA_DEVICE=2 python my-script.py

顺便提一下,其他人也遇到了你的问题。 你确定你没有使用旧版本的CUDA工具包吗?请注意PyCUDA使用的工具包版本。

这听起来像是正确的方向。PyCUDA正在设置所有的编译选项,所以他们将“sm-30”值发送到错误的选项很奇怪。我会看看能否在PyCUDA中找到这些选项的文档。文档非常简洁。 - JasonRDalton
我编辑了我的回答。我肯定会检查一下是否有旧版本的CUDA工具包留在PyCUDA中使用。 - Robert Crovella

0

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....

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