首页 文章

CUDA GPU按位置选择,但如何将默认设置为设备0以外的其他东西?

提问于
浏览
0

我最近在家里的机器上安装了第二个GPU(Tesla K40),我的搜索建议第一个PCI插槽成为CUDA作业选择的默认GPU . 一个很棒的链接正在解释它可以在这里找到:

Default GPU Assignment

我的原始GPU是TITAN X,也支持CUDA,但它最适合单精度计算,特斯拉更适合双精度 . 我对该小组的问题是,是否有办法将我的默认CUDA编程设备设置为第二个?显然我每次都可以在代码中指定使用哪个设备,但我希望我可以配置我的设置,以便它始终默认使用特斯拉卡 .

或者是打开盒子和物理交换设备位置的唯一方法?不知怎的,这对我来说似乎不对......

任何建议或相关的后续链接将不胜感激 .

干杯,

老爹

1 回答

  • 4

    正如您已经指出的那样,cuda运行时有its own heuristic用于订购GPU并为它们分配设备索引 .

    CUDA_VISIBLE_DEVICES environment variable将允许您修改此排序 .

    例如,假设在正常使用中,我的显示设备被枚举为设备0,我的首选CUDA GPU被枚举为设备1.例如,在没有使用 cudaSetDevice 的情况下编写的应用程序将默认使用枚举为0的设备 . 如果我想改变它,在linux下我可以使用类似的东西:

    CUDA_VISIBLE_DEVICES="1" ./my_app
    

    使cuda运行时枚举通常为设备1的设备作为此应用程序运行的设备0(并且在这种情况下普通设备0将从CUDA“隐藏”) . 您可以通过导出该变量(例如,bash)使会话成为“永久”:

    export CUDA_VISIBLE_DEVICES="1"
    ./my_app
    

    如果我只是想要反转默认的CUDA运行时顺序,但仍然使这两个GPU可用于应用程序,我可以执行以下操作:

    CUDA_VISIBLE_DEVICES="1,0" ./deviceQuery
    

    还有其他规范选项,例如使用 nvidia-smi 提供的GPU UUID标识符(而不是设备索引) .

    请参阅the documentationthis writeup .

相关问题