特定の CUDA デバイスにディスプレイが接続されているかどうかを判断する必要があります。これを行うCUDA関数は知りません。
Windows では、NVAPI を使用して、接続されているディスプレイの数と各デバイスの PCI バス/スロット ID を取得できます。後者を使用すると、(cudaGetDeviceProperties を呼び出して) 一致する CUDA デバイスを見つけることができます。
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();