Skip to content

Commit ff0302a

Browse files
committed
Use the maximum of graphical and sm as GPU speed
1 parent 8fa9696 commit ff0302a

File tree

1 file changed

+30
-6
lines changed

1 file changed

+30
-6
lines changed

src/extract_gpuinfo_nvidia.c

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -446,17 +446,41 @@ void gpuinfo_nvidia_populate_static_info(gpuinfo_nvidia_device_handle device,
446446
void 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

Comments
 (0)