From 2c9aadff524e4d251f7bbf50e29567dde9d985fa Mon Sep 17 00:00:00 2001 From: brnelson Date: Tue, 30 Jul 2024 20:33:14 +0000 Subject: [PATCH] add frequency. --- gpustat/core.py | 15 +++++++++++++++ gpustat/rocml.py | 3 +++ 2 files changed, 18 insertions(+) diff --git a/gpustat/core.py b/gpustat/core.py index e251ed9..eeedb2e 100644 --- a/gpustat/core.py +++ b/gpustat/core.py @@ -206,6 +206,13 @@ def processes(self) -> Optional[List[ProcessInfo]]: """Get the list of running processes on the GPU.""" return self.entry['processes'] + @property + def clk_freq(self) -> Optional[int]: + """ + """ + v = self.entry['clk_freq'] + return int(v) if v is not None else None + def print_to(self, fp, *, with_colors=True, # deprecated arg show_cmd=False, @@ -335,6 +342,10 @@ def __getattr__(self, name): # type: ignore if show_power is True or 'limit' in show_power: _write(" / ") _write(rjustify(safe_self.power_limit, 3), ' W', color='CPowL') + + _write(", ") + _write(rjustify(safe_self.clk_freq, 3), color='CPowU') + _write(" MHz") # Memory _write(" | ") @@ -551,6 +562,10 @@ def _wrapped(*args, **kwargs): power_limit = safenvml(N.nvmlDeviceGetEnforcedPowerLimit)(handle) gpu_info['enforced.power.limit'] = power_limit // 1000 if power_limit is not None else None + # Frequency + freq = safenvml(N.nvmlDeviceGetClkFreq)(handle) + gpu_info['clk_freq'] = freq if freq is not None else None + # Processes nv_comp_processes = safenvml(N.nvmlDeviceGetComputeRunningProcesses)(handle) nv_graphics_processes = safenvml(N.nvmlDeviceGetGraphicsRunningProcesses)(handle) diff --git a/gpustat/rocml.py b/gpustat/rocml.py index 3f81a41..fadc8f8 100644 --- a/gpustat/rocml.py +++ b/gpustat/rocml.py @@ -110,6 +110,9 @@ def nvmlDeviceGetComputeRunningProcesses(dev): def nvmlDeviceGetGraphicsRunningProcesses(dev): return None +def nvmlDeviceGetClkFreq(dev): + return rocml.smi_get_device_freq(dev) + # Upon importing this module, let rocml be initialized and remain active # throughout the lifespan of the python process (until gpustat exists). _initialized: bool