Add "nv/cold/sm_clock_rate/mean" to GPU time summary data

Its intent is to be cheaply retrievable metric of average
SM clock frequence over entire sample
This commit is contained in:
Oleksandr Pavlyk
2026-06-02 16:21:39 -05:00
parent 9b1eb0156e
commit 9539ba2a78
2 changed files with 17 additions and 0 deletions

View File

@@ -40,6 +40,7 @@ GPU_TIME_STDEV_RELATIVE_TAG = "nv/cold/time/gpu/stdev/relative"
GPU_TIME_MEDIAN_TAG = "nv/cold/time/gpu/median"
GPU_TIME_IR_TAG = "nv/cold/time/gpu/ir/absolute"
GPU_TIME_IR_RELATIVE_TAG = "nv/cold/time/gpu/ir/relative"
GPU_SM_CLOCK_RATE_MEAN_TAG = "nv/cold/sm_clock_rate/mean"
SAMPLE_TIMES_TAG = "nv/json/bin:nv/cold/sample_times"
SAMPLE_FREQUENCIES_TAG = "nv/json/freqs-bin:nv/cold/sample_freqs"
@@ -81,6 +82,7 @@ class GpuTimingData:
median: float | None
interquartile_range: float | None
interquartile_range_relative: float | None
sm_clock_rate_mean: float | None = None
sample_source: Float32BinarySource | None = None
frequency_source: Float32BinarySource | None = None
@@ -466,6 +468,7 @@ def extract_gpu_timing_data(summaries, json_dir=None, float32_reader=read_float3
interquartile_range_relative=extract_summary_float(
summaries, GPU_TIME_IR_RELATIVE_TAG, null_value=math.inf
),
sm_clock_rate_mean=extract_summary_float(summaries, GPU_SM_CLOCK_RATE_MEAN_TAG),
sample_source=sample_source,
frequency_source=frequency_source,
)

View File

@@ -119,6 +119,7 @@ def make_gpu_timing_data(
median=None,
interquartile_range=None,
interquartile_range_relative=None,
sm_clock_rate_mean=None,
):
return nvbench_compare.GpuTimingData(
minimum=None,
@@ -129,6 +130,7 @@ def make_gpu_timing_data(
median=median,
interquartile_range=interquartile_range,
interquartile_range_relative=interquartile_range_relative,
sm_clock_rate_mean=sm_clock_rate_mean,
)
@@ -385,6 +387,18 @@ def test_gpu_timing_data_loads_samples_and_frequencies_lazily(
assert reader_calls == [str(samples_file), str(freqs_file)]
def test_gpu_timing_data_parses_sm_clock_rate_mean(nvbench_compare):
timing = nvbench_compare.extract_gpu_timing_data(
[
make_summary(nvbench_compare, "GPU_TIME_MEAN_TAG", "2.0"),
make_summary(nvbench_compare, "GPU_SM_CLOCK_RATE_MEAN_TAG", "1.5e9"),
],
)
assert timing.sm_clock_rate_mean == pytest.approx(1.5e9)
assert timing.frequencies is None
def test_gpu_timing_data_treats_mismatched_sample_and_frequency_counts_as_unavailable(
tmp_path, nvbench_compare
):