在多GPU计算机中,如何指定CUDA作业应在哪个GPU上运行?
例如,在安装CUDA时,我选择安装,NVIDIA_CUDA-<#.#>_Samples
然后运行了几个nbody
模拟实例,但是它们都在一个GPU 0上运行;GPU 1完全处于空闲状态(使用监控watch -n 1 nvidia-dmi
)。检查CUDA_VISIBLE_DEVICES
使用
echo $CUDA_VISIBLE_DEVICES
我发现没有设置。我尝试使用设置
CUDA_VISIBLE_DEVICES=1
然后nbody
再次运行,但它也进入了GPU 0。
我看着相关的问题,如何选择指定的GPU运行CUDA程序?,但deviceQuery
命令不在CUDA 8.0 bin目录中。除之外$CUDA_VISIBLE_DEVICES$
,我还看到其他文章引用了环境变量,$CUDA_DEVICES
但是这些文章没有设置,也没有找到有关如何使用它的信息。
虽然与我的问题没有直接关系,nbody -device=1
但是使用可以使应用程序在GPU 1上运行,但是使用nbody -numdevices=2
不能在GPU 0和GPU 1上运行。
我正在使用bash shell,CentOS 6.8,CUDA 8.0、2个GTX 1080 GPU和NVIDIA驱动程序367.44在运行bash shell的系统上对此进行测试。
我知道在使用CUDA进行编写时,您可以管理和控制要使用的CUDA资源,但是在运行已编译的CUDA可执行文件时如何从命令行管理此资源?
nbody
应用程序具有一个命令行选项来选择要在其上运行的GPU-您可能需要研究该代码。对于更一般的情况,CUDA_VISIBLE_DEVICES
应该起作用。如果不正确,则可能是您未正确使用它,您可能应该给出一个完整示例说明您尝试了什么。您还应该指出您正在使用的操作系统以及Linux,以及什么shell(例如bash,csh等)。deviceQuery
不需要任何这些,它只是一个示例应用程序来演示的行为CUDA_VISIBLE_DEVICES
。正确的环境变量名称中没有$
。