I am trying to associate the OpenCL GPU devices with NVAPI devices which I get using NvAPI_EnumPhysicalGPUs
in the Multi-GPU system.
The thing is, I can use clGetDeviceInfo
with CL_DEVICE_VENDOR_ID
which is always unique and it is the best way, and I can retrieve the vendor from the NvAPI_SYS_GetChipSetInfo
. But it is not associated with the NvPhysicalGpuHandle
which I get from NvAPI_EnumPhysicalGPUs
. Is there any way to associate this?
Of course, I can just use name, but this is not good.
There is a way to do it. In OpenCL there is a poor documented feature for some reason. You need to call clGetDeviceInfo
with constant 0x4008
and it will give you the bus id for the following device handle.
cl_uint busID;
clGetDeviceInfo(device,0x4008,sizeof(cl_uint), &busID,NULL);
printf("%d",busID);
On NvApi side use NvAPI_GPU_GetBusId
. Then you can associate the handles by comapring the buses.