diff --git a/include/nvtop/extract_gpuinfo_common.h b/include/nvtop/extract_gpuinfo_common.h index 1643ee0f..e2ebd5e7 100644 --- a/include/nvtop/extract_gpuinfo_common.h +++ b/include/nvtop/extract_gpuinfo_common.h @@ -74,6 +74,7 @@ struct gpuinfo_static_info { unsigned n_shared_cores; unsigned l2cache_size; unsigned n_exec_engines; + unsigned engine_count; bool integrated_graphics; bool encode_decode_shared; unsigned char valid[(gpuinfo_static_info_count + CHAR_BIT - 1) / CHAR_BIT]; diff --git a/src/extract_gpuinfo.c b/src/extract_gpuinfo.c index 73a41c2a..998a90ee 100644 --- a/src/extract_gpuinfo.c +++ b/src/extract_gpuinfo.c @@ -337,6 +337,7 @@ void gpuinfo_refresh_utilisation_rate(struct gpu_info *gpu_info) { uint64_t gfx_total_process_cycles = 0; uint64_t total_delta = 0; + unsigned int ec = gpu_info->static_info.engine_count ? : 1; unsigned int utilisation_rate; uint64_t max_freq_hz; double avg_delta_secs; @@ -353,7 +354,7 @@ void gpuinfo_refresh_utilisation_rate(struct gpu_info *gpu_info) { avg_delta_secs = ((double)total_delta / gpu_info->processes_count) / 1000000000.0; max_freq_hz = gpu_info->dynamic_info.gpu_clock_speed_max * 1000000; - utilisation_rate = (unsigned int)((((double)gfx_total_process_cycles) / (((double)max_freq_hz) * avg_delta_secs * 2)) * 100); + utilisation_rate = (unsigned int)((((double)gfx_total_process_cycles) / (((double)max_freq_hz) * avg_delta_secs * ec)) * 100); utilisation_rate = utilisation_rate > 100 ? 100 : utilisation_rate; SET_GPUINFO_DYNAMIC(&gpu_info->dynamic_info, gpu_util_rate, utilisation_rate); diff --git a/src/extract_gpuinfo_mali_common.c b/src/extract_gpuinfo_mali_common.c index eab63f9e..21b63ef7 100644 --- a/src/extract_gpuinfo_mali_common.c +++ b/src/extract_gpuinfo_mali_common.c @@ -529,8 +529,10 @@ bool mali_common_parse_drm_fdinfo(struct gpu_info *info, FILE *fdinfo_file, } } - if (fid->engine_count) - SET_GPUINFO_PROCESS(process_info, gfx_engine_used, total_time); + if (fid->engine_count) { + SET_GPUINFO_PROCESS(process_info, gfx_engine_used, total_time); + info->static_info.engine_count = fid->engine_count; + } if (!client_id_set) return false;