From 2502d29ece576826ecaf50262eb42c4e4db622b8 Mon Sep 17 00:00:00 2001 From: Oleksandr Pavlyk <21087696+oleksandr-pavlyk@users.noreply.github.com> Date: Tue, 2 Jun 2026 15:55:02 -0500 Subject: [PATCH] Lazy-load nvbench-compare bulk timing data Store JSON-bin sample time and frequency metadata in GpuTimingData instead of reading the binary files during summary extraction. Add Float32BinarySource and lazy cached accessors for samples and frequencies. Use np.fromfile by default, but allow tests and alternate callers to inject a float32 reader returning any buffer-compatible object convertable to " object: + return np.fromfile(filename, dtype=" np.ndarray | None: + return read_float32_binary( + self.count, self.filename, self.json_dir, self.description, self.reader + ) + + @dataclass(frozen=True) class GpuTimingData: minimum: float | None @@ -55,8 +81,20 @@ class GpuTimingData: median: float | None interquartile_range: float | None interquartile_range_relative: float | None - samples: np.ndarray | None = None - frequencies: np.ndarray | None = None + sample_source: Float32BinarySource | None = None + frequency_source: Float32BinarySource | None = None + + @cached_property + def samples(self) -> np.ndarray | None: + if self.sample_source is None: + return None + return self.sample_source.values + + @cached_property + def frequencies(self) -> np.ndarray | None: + if self.frequency_source is None: + return None + return self.frequency_source.values @dataclass(frozen=True) @@ -342,45 +380,76 @@ def resolve_binary_filename(json_dir, binary_filename): return json_relative_filename -def read_float32_binary(count, filename, json_dir): - if count is None or filename is None or json_dir is None: - return None +def warn_unavailable_bulk_data(description, message): + warnings.warn( + f"Could not use NVBench {description} data: {message}; treating it as unavailable", + RuntimeWarning, + stacklevel=3, + ) + +def read_float32_binary(count, filename, json_dir, description, reader): filename = resolve_binary_filename(json_dir, filename) try: - values = np.fromfile(filename, dtype="