The following call to NvAPI_GPU_GetThermalSettings fails with a NVAPI_NVIDIA_DEVICE_NOT_FOUND error:
// load the NVAPI DLL
NvAPI_Status rval = NvAPI_Initialize();
if( rval != NVAPI_OK ){
NvAPI_ShortString string;
NvAPI_GetErrorMessage(rval, string);
printf("NVAPI NvAPI_Initialize: %s\n", string);
}
NvAPI_ShortString ver;
NvAPI_GetInterfaceVersionString( ver );
if( rval != NVAPI_OK ){
NvAPI_ShortString string;
NvAPI_GetErrorMessage(rval, string);
printf("NVAPI NvAPI_GetInterfaceVersionString: %s\n", string);
}
printf( "Version: %s\n", ver );
NvPhysicalGpuHandle phys[NVAPI_MAX_PHYSICAL_GPUS];
NvU32 cnt;
rval = NvAPI_EnumTCCPhysicalGPUs(phys, &cnt);
if (rval != NVAPI_OK){
NvAPI_ShortString string;
NvAPI_GetErrorMessage(rval, string);
printf("NVAPI NvAPI_EnumTCCPhysicalGPUs: %s\n", string);
}
printf( "Found %d GPU handle(s)", cnt );
for( NvU32 n=0; n<cnt; ++n ) printf( " 0x%016llx", phys[n] );
printf( "\n");
NvAPI_ShortString name;
rval = NvAPI_GPU_GetFullName(*phys, name);
if (rval != NVAPI_OK){
NvAPI_ShortString string;
NvAPI_GetErrorMessage(rval, string);
printf("NVAPI NvAPI_GPU_GetFullName: %s\n", string);
}
printf("Name: %s\n", name);
// this works
NvU32 rpm = 0;
rval = NvAPI_GPU_GetTachReading( *phys, &rpm );
if( rval != NVAPI_OK ){
NvAPI_ShortString string;
NvAPI_GetErrorMessage(rval, string);
printf("NVAPI NvAPI_GPU_GetTachReading: %s\n", string);
}
printf( "RPM: %u\n", rpm );
// this fails
NV_GPU_THERMAL_SETTINGS thermal = { 0 };
thermal.version = NV_GPU_THERMAL_SETTINGS_VER;
rval = NvAPI_GPU_GetThermalSettings(*phys,0, &thermal);
if (rval != NVAPI_OK){
NvAPI_ShortString string;
NvAPI_GetErrorMessage(rval, string);
printf("NVAPI NvAPI_GPU_GetThermalSettings: %s\n", string);
}
printf( "Temperature: %d\n", thermal.sensor[0].currentTemp );
// unload the NVAPI dll
rval = NvAPI_Unload();
if( rval != NVAPI_OK ){
NvAPI_ShortString string;
NvAPI_GetErrorMessage(rval, string);
printf("NVAPI NvAPI_Unload: %s\n", string);
}
Output from the above:
Version: NVidia Complete Version 1.10
Found 3 GPU handle(s) 0x0000000000000d00 0x0000000000001100 0x0000000000000c00
Name: Tesla K20c
RPM: 1191
NVAPI NvAPI_GPU_GetThermalSettings: NVAPI_NVIDIA_DEVICE_NOT_FOUND
Temperature: 0
Details:
- three NVidia K20c devices
- Windows Server 2008 R2
- Visual Studio 2013
- CUDA 7.5
- Graphics driver 353.90
- NvAPI R352 (downloaded October 8, 2015)
- same results with 32-bit and 64-bit builds
A workaround or fix would be great!