@@ -446,17 +446,41 @@ void gpuinfo_nvidia_populate_static_info(gpuinfo_nvidia_device_handle device,
446446void gpuinfo_nvidia_refresh_dynamic_info (gpuinfo_nvidia_device_handle device ,
447447 gpuinfo_dynamic_info * dynamic_info ) {
448448
449+ bool graphics_clock_valid = false;
450+ unsigned graphics_clock ;
451+ bool sm_clock_valid = false;
452+ unsigned sm_clock ;
453+ nvmlClockType_t getMaxClockFrom = NVML_CLOCK_GRAPHICS ;
454+
449455 // GPU current speed
450- last_nvml_return_status = nvmlDeviceGetClockInfo (
451- device , NVML_CLOCK_GRAPHICS , & dynamic_info -> gpu_clock_speed );
452- if (last_nvml_return_status == NVML_SUCCESS )
456+ // Maximum between SM and Graphical
457+ last_nvml_return_status =
458+ nvmlDeviceGetClockInfo (device , NVML_CLOCK_GRAPHICS , & graphics_clock );
459+ graphics_clock_valid = last_nvml_return_status == NVML_SUCCESS ;
460+
461+ last_nvml_return_status =
462+ nvmlDeviceGetClockInfo (device , NVML_CLOCK_SM , & sm_clock );
463+ sm_clock_valid = last_nvml_return_status == NVML_SUCCESS ;
464+
465+ if (graphics_clock_valid && sm_clock_valid && graphics_clock < sm_clock ) {
466+ getMaxClockFrom = NVML_CLOCK_SM ;
467+ } else if (!graphics_clock_valid && sm_clock_valid ) {
468+ getMaxClockFrom = NVML_CLOCK_SM ;
469+ }
470+
471+ RESET_VALID (gpuinfo_curr_gpu_clock_speed_valid , dynamic_info -> valid );
472+ if (getMaxClockFrom == NVML_CLOCK_GRAPHICS && graphics_clock_valid ) {
473+ dynamic_info -> gpu_clock_speed = graphics_clock ;
453474 SET_VALID (gpuinfo_curr_gpu_clock_speed_valid , dynamic_info -> valid );
454- else
455- RESET_VALID (gpuinfo_curr_gpu_clock_speed_valid , dynamic_info -> valid );
475+ }
476+ if (getMaxClockFrom == NVML_CLOCK_SM && sm_clock_valid ) {
477+ dynamic_info -> gpu_clock_speed = sm_clock ;
478+ SET_VALID (gpuinfo_curr_gpu_clock_speed_valid , dynamic_info -> valid );
479+ }
456480
457481 // GPU max speed
458482 last_nvml_return_status = nvmlDeviceGetMaxClockInfo (
459- device , NVML_CLOCK_GRAPHICS , & dynamic_info -> gpu_clock_speed_max );
483+ device , getMaxClockFrom , & dynamic_info -> gpu_clock_speed_max );
460484 if (last_nvml_return_status == NVML_SUCCESS )
461485 SET_VALID (gpuinfo_max_gpu_clock_speed_valid , dynamic_info -> valid );
462486 else
0 commit comments