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?

4

2 回答 2

2

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

你应该通过compute_30for--gpu-architecturesm_30for--gpu-code

还要确保您使用的是正确nvcc的,并且不会无意中使用某些旧版本的 CUDA 工具包。

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

这里

CUDA_DEVICE=2 python my-script.py

顺便说一句,别人有你的问题。你确定你没有旧版本的 CUDA 工具包围绕 PyCUDA 使用?

于 2013-07-30T14:09:36.467 回答
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....
于 2013-07-30T14:06:22.443 回答