|
1 | 1 | import re
|
2 | 2 | import subprocess
|
3 | 3 | import time
|
| 4 | +from warnings import warn |
4 | 5 |
|
5 | 6 | import numpy as np
|
6 | 7 |
|
@@ -156,43 +157,35 @@ def set_clocks(self, mem_clock, gr_clock):
|
156 | 157 | raise ValueError("Illegal value for memory clock")
|
157 | 158 | if gr_clock not in self.supported_gr_clocks[mem_clock]:
|
158 | 159 | raise ValueError(f"Graphics clock incompatible with memory clock ({mem_clock}), compatible graphics clocks: {self.supported_gr_clocks[mem_clock]}")
|
159 |
| - self.modified_clocks = True |
| 160 | + |
| 161 | + # Check whether persistence mode is set. Without persistence mode, setting the clocks is not meaningful |
| 162 | + # I deliberately removed the try..except clause here, if setting persistence mode fails, setting the clocks should fail |
| 163 | + if self.persistence_mode != 1: |
| 164 | + self.persistence_mode = 1 |
| 165 | + |
160 | 166 | if self.use_locked_clocks:
|
161 |
| - if self.persistence_mode != 1: |
162 |
| - self.persistence_mode = 1 |
163 | 167 | try:
|
164 | 168 | pynvml.nvmlDeviceSetGpuLockedClocks(self.dev, gr_clock, gr_clock)
|
165 | 169 | pynvml.nvmlDeviceSetMemoryLockedClocks(self.dev, mem_clock, mem_clock)
|
166 | 170 | except pynvml.NVMLError_NoPermission:
|
167 | 171 | if self.nvidia_smi:
|
168 |
| - args = [ |
169 |
| - "sudo", |
170 |
| - self.nvidia_smi, |
171 |
| - "-i", |
172 |
| - str(self.id), |
173 |
| - ] |
| 172 | + args = ["sudo", self.nvidia_smi, "-i", str(self.id)] |
174 | 173 | command_set_mem_clocks = f"--lock-memory-clocks={str(mem_clock)},{str(mem_clock)}"
|
175 | 174 | command_set_gpu_clocks = f"--lock-gpu-clocks={str(gr_clock)},{str(gr_clock)}"
|
176 | 175 | subprocess.run(args + [command_set_gpu_clocks], check=True)
|
177 | 176 | subprocess.run(args + [command_set_mem_clocks], check=True)
|
178 | 177 | else:
|
179 |
| - try: |
180 |
| - if self.persistence_mode != 1: |
181 |
| - self.persistence_mode = 1 |
182 |
| - except Exception: |
183 |
| - pass |
184 | 178 | try:
|
185 | 179 | pynvml.nvmlDeviceSetApplicationsClocks(self.dev, mem_clock, gr_clock)
|
186 | 180 | except pynvml.NVMLError_NoPermission:
|
187 | 181 | if self.nvidia_smi:
|
188 |
| - args = [ |
189 |
| - "sudo", |
190 |
| - self.nvidia_smi, |
191 |
| - "-i", |
192 |
| - str(self.id), |
193 |
| - "--applications-clocks=" + str(mem_clock) + "," + str(gr_clock), |
194 |
| - ] |
195 |
| - subprocess.run(args, check=True) |
| 182 | + args = ["sudo", self.nvidia_smi, "-i", str(self.id)] |
| 183 | + command_set_clocks = f"--applications-clocks={str(mem_clock)},{str(gr_clock)}" |
| 184 | + subprocess.run(args + command_set_clocks, check=True) |
| 185 | + |
| 186 | + # Store the fact that we have modified the clocks |
| 187 | + self.modified_clocks = True |
| 188 | + |
196 | 189 |
|
197 | 190 | def reset_clocks(self):
|
198 | 191 | """Reset the clocks to the default clock if the device uses a non default clock."""
|
|
0 commit comments