我怎么能告诉PyCUDA使用哪个GPU?

时间:2013-07-30 14:01:04

标签: cuda pycuda

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

2 个答案:

答案 0 :(得分:2)

nvcc根据您安装的特定GPU不会抱怨。它将针对您告诉它编译的任何GPU类型进行编译。问题是,当指定sm_30选项时,您指定的--gpu-architecture不是--gpu-code的有效选项。

您应该compute_30 --gpu-architecturesm_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....