progresstrace.py 1.1 KB

1234567891011121314151617181920212223242526272829303132
  1. import sim, time
  2. class ProgressTrace:
  3. def setup(self, args):
  4. self.last_ins = 0
  5. self.last_time = time.time()
  6. sim.util.EveryIns(1000000, self.periodic, roi_only = False)
  7. self.sd = sim.util.StatsDelta()
  8. self.stats = {
  9. 'time': self.sd.getter('barrier', 0, 'global_time'),
  10. 'instrs': [ self.sd.getter('core', core, 'instructions') for core in range(sim.config.ncores) ],
  11. }
  12. def periodic(self, ins, ins_delta):
  13. time_now = time.time()
  14. time_delta = time_now - self.last_time
  15. if time_delta >= 1:
  16. ins_delta = ins - self.last_ins
  17. ips = ins_delta / time_delta
  18. self.sd.update()
  19. if self.stats['time'].delta:
  20. cycles = self.stats['time'].delta * sim.dvfs.get_frequency(0) / 1e9 # convert fs to cycles
  21. instrs = sum([ self.stats['instrs'][core].delta for core in range(sim.config.ncores) ])
  22. ipc = instrs / (cycles or 1)
  23. else:
  24. ipc = None
  25. print ('[PROGRESS] %.0fM instructions, %.0f KIPS' % (ins / 1e6, ips / 1e3)) + (', %.2f IPC' % ipc if ipc else '')
  26. self.last_ins = ins
  27. self.last_time = time_now
  28. sim.util.register(ProgressTrace())