@@ -135,6 +135,8 @@ def persistence_mode(self, new_mode):
135135 raise ValueError (
136136 "Illegal value for persistence mode, should be either 0 or 1"
137137 )
138+ if self .persistence_mode == new_mode :
139+ return
138140 try :
139141 pynvml .nvmlDeviceSetPersistenceMode (self .dev , new_mode )
140142 self ._persistence_mode = pynvml .nvmlDeviceGetPersistenceMode (self .dev )
@@ -168,21 +170,15 @@ def set_clocks(self, mem_clock, gr_clock):
168170 self .nvidia_smi ,
169171 "-i" ,
170172 str (self .id ),
171- "--lock-gpu-clocks=" + str (gr_clock ) + "," + str (gr_clock ),
172173 ]
173- subprocess .run (args , check = True )
174- args = [
175- "sudo" ,
176- self .nvidia_smi ,
177- "-i" ,
178- str (self .id ),
179- "--lock-memory-clocks=" + str (mem_clock ) + "," + str (mem_clock ),
180- ]
181- subprocess .run (args , check = True )
174+ command_set_mem_clocks = f"--lock-memory-clocks={ str (mem_clock )} ,{ str (mem_clock )} "
175+ command_set_gpu_clocks = f"--lock-gpu-clocks={ str (gr_clock )} ,{ str (gr_clock )} "
176+ subprocess .run (args + [command_set_gpu_clocks ], check = True )
177+ subprocess .run (args + [command_set_mem_clocks ], check = True )
182178 else :
183179 try :
184- if self .persistence_mode != 0 :
185- self .persistence_mode = 0
180+ if self .persistence_mode != 1 :
181+ self .persistence_mode = 1
186182 except Exception :
187183 pass
188184 try :
@@ -233,24 +229,20 @@ def reset_clocks(self):
233229 if (
234230 gr_app_clock != self .gr_clock_default
235231 or mem_app_clock != self .mem_clock_default
236- ):
232+ ):
237233 self .set_clocks (self .mem_clock_default , self .gr_clock_default )
238234
239235 @property
240236 def gr_clock (self ):
241237 """Control the graphics clock (may require permission), only values compatible with the memory clock can be set directly."""
242- return pynvml .nvmlDeviceGetClockInfo (self .dev , pynvml .NVML_CLOCK_GRAPHICS )
238+ if self .use_locked_clocks :
239+ return pynvml .nvmlDeviceGetClockInfo (self .dev , pynvml .NVML_CLOCK_GRAPHICS )
240+ else :
241+ return pynvml .nvmlDeviceGetApplicationsClock (self .dev , pynvml .NVML_CLOCK_GRAPHICS )
243242
244243 @gr_clock .setter
245244 def gr_clock (self , new_clock ):
246- cur_clock = (
247- pynvml .nvmlDeviceGetClockInfo (self .dev , pynvml .NVML_CLOCK_GRAPHICS )
248- if self .use_locked_clocks
249- else pynvml .nvmlDeviceGetApplicationsClock (
250- self .dev , pynvml .NVML_CLOCK_GRAPHICS
251- )
252- )
253- if new_clock != cur_clock :
245+ if new_clock != self .gr_clock :
254246 self .set_clocks (self .mem_clock , new_clock )
255247
256248 @property
@@ -268,12 +260,8 @@ def mem_clock(self):
268260
269261 @mem_clock .setter
270262 def mem_clock (self , new_clock ):
271- cur_clock = (
272- pynvml .nvmlDeviceGetClockInfo (self .dev , pynvml .NVML_CLOCK_MEM )
273- if self .use_locked_clocks
274- else pynvml .nvmlDeviceGetApplicationsClock (self .dev , pynvml .NVML_CLOCK_MEM )
275- )
276- if new_clock != cur_clock :
263+ if new_clock != self .mem_clock :
264+ print (f"mem_clock setter calls set_clocks because { new_clock = } != { cur_clock = } " )
277265 self .set_clocks (new_clock , self .gr_clock )
278266
279267 @property
0 commit comments