我需要确定给定的 CUDA 设备是否连接了显示器。我知道没有 CUDA 功能可以做到这一点。
在 Windows 上,我可以使用 NVAPI 来获取连接的显示器数量和每个设备的 PCI 总线/插槽 ID。使用后者,我可以找到匹配的 CUDA 设备(通过调用 cudaGetDeviceProperties)。
如何在 NVAPI 不可用的 Linux 上做同样的事情?
从技术上讲,我需要的是以下代码的 Linux 替代方案:
NvAPI_Initialize();
NvPhysicalGpuHandle gpuHandles[64];
NvU32 numOfGPUs;
NvAPI_EnumPhysicalGPUs(gpuHandles, &numOfGPUs);
for (int i = 0; i < numOfGPUs; i++)
{
NvU32 connected_displays = 0;
NvU32 busId = 0;
NvU32 busSlotId = 0;
NvAPI_GPU_GetConnectedDisplayIds(gpuHandles[i], NULL, &connected_displays, NULL);
NvAPI_GPU_GetBusId(gpuHandles[i], &busId);
NvAPI_GPU_GetBusSlotId(gpuHandles[i], &busSlotId);
printf("Current device: %d\n", i);
printf("Number of connected displays: %u\n", connected_displays);
printf("Bus id: %u\tBus slot id: %u\n", busId, busSlotId);
}
NvAPI_Unload();