在具有多个 GPU 的 SUSE 机器中,是否可以通过编程方式快速判断哪些 GPU(或哪些 GPU)正在渲染显示?
目标是自动检测符合/可用于调试的卡。
(不能在渲染显示的卡上使用 cuda-gdb,并且猜测是......不雅。)
以非编程方式,您可以使用 NVIDIA 控制面板(如果您为 GPU 加载了适当的 nvidia linux 驱动程序,您应该只能 nvidia-settings
在终端上启动控制面板)来确定连接了哪个 GPU 和/或渲染到哪个显示器。
以编程方式,它有点复杂,因为您必须通过“显示”(以编程方式)定义您的意思。但作为示例,如果您只有一个显示器(因此不会混淆您想到的是哪一个),您可以使用构建 nvidia-settings的 NVIDIA API (NVCtrl),以编程方式获取信息。
使用 CUDA 5.5,您可以在渲染显示的 GPU 上使用 cuda-gdb,但它需要 cc 3.5 或更好的 GPU 和一些额外的设置。
我想另一种方法(可能最简单,以编程方式)是使用NVML函数nvmlDeviceGetDisplayMode
NVML 是nvidia-smi
构建实用程序的 api。因此您也可以通过这种方式手动查询设备的显示模式。
由于您已进行编辑以指示编程方法,因此我认为我推荐的第一种方法是 NVML 方法。如果您没有其他选择标准,只需循环使用 GPU,直到找到禁用显示模式的 GPU。如果您想确保某个特定 GPU 的显示模式被禁用,请确保将其从您的特定发行版的 X 配置中排除(例如,确保xorg.conf
在许多 Linux 发行版中没有引用它)