You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							45 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
	
	
							45 lines
						
					
					
						
							1.4 KiB
						
					
					
				| import time
 | |
| 
 | |
| class Profiler():
 | |
|   def __init__(self, enabled=False):
 | |
|     self.enabled = enabled
 | |
|     self.cp = {}
 | |
|     self.cp_ignored = []
 | |
|     self.iter = 0
 | |
|     self.start_time = time.time()
 | |
|     self.last_time = self.start_time
 | |
|     self.tot = 0.
 | |
| 
 | |
|   def reset(self, enabled=False):
 | |
|     self.enabled = enabled
 | |
|     self.cp = {}
 | |
|     self.cp_ignored = []
 | |
|     self.iter = 0
 | |
|     self.start_time = time.time()
 | |
|     self.last_time = self.start_time
 | |
| 
 | |
|   def checkpoint(self, name, ignore=False):
 | |
|     # ignore flag needed when benchmarking threads with ratekeeper
 | |
|     if not self.enabled:
 | |
|       return
 | |
|     tt = time.time()
 | |
|     if name not in self.cp:
 | |
|       self.cp[name] = 0.
 | |
|       if ignore:
 | |
|         self.cp_ignored.append(name)
 | |
|     self.cp[name] += tt - self.last_time
 | |
|     if not ignore:
 | |
|       self.tot += tt - self.last_time
 | |
|     self.last_time = tt
 | |
| 
 | |
|   def display(self):
 | |
|     if not self.enabled:
 | |
|       return
 | |
|     self.iter += 1
 | |
|     print("******* Profiling %d *******" % self.iter)
 | |
|     for n, ms in sorted(self.cp.items(), key=lambda x: -x[1]):
 | |
|       if n in self.cp_ignored:
 | |
|         print("%30s: %9.2f  avg: %7.2f  percent: %3.0f   IGNORED" % (n, ms*1000.0, ms*1000.0/self.iter, ms/self.tot*100))
 | |
|       else:
 | |
|         print("%30s: %9.2f  avg: %7.2f  percent: %3.0f" % (n, ms*1000.0, ms*1000.0/self.iter, ms/self.tot*100))
 | |
|     print(f"Iter clock: {self.tot / self.iter:2.6f}   TOTAL: {self.tot:2.2f}")
 | |
| 
 |