cdictionaryopenclnvapi

Associate OpenCL device with NVAPI device


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.


Solution

  • 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.