lctrace.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. """
  2. lctrace.py
  3. Write a trace of LightCache miss rates (in misses per 1000 instructions) for all cores.
  4. First argument is either a filename, or none to write to standard output.
  5. Second argument is an interval in nanoseconds (default = 10000)
  6. """
  7. import sys, os, sim
  8. class LCTrace:
  9. def setup(self, args):
  10. args = dict(enumerate((args or '').split(':')))
  11. filename = args.get(0, None)
  12. interval_ns = long(args.get(1, 10000))
  13. if filename:
  14. self.fd = file(os.path.join(sim.config.output_dir, filename), 'w')
  15. self.isTerminal = False
  16. else:
  17. self.fd = sys.stdout
  18. self.isTerminal = True
  19. self.sd = sim.util.StatsDelta()
  20. self.stats = {
  21. 'time': [ self.sd.getter('performance_model', core, 'elapsed_time') for core in range(sim.config.ncores) ],
  22. 'instrs': [ self.sd.getter('core', core, 'instructions') for core in range(sim.config.ncores) ],
  23. 'misses': [ self.sd.getter('light_cache', core, 'misses') for core in range(sim.config.ncores) ],
  24. }
  25. sim.util.Every(interval_ns * sim.util.Time.NS, self.periodic, statsdelta = self.sd, roi_only = True)
  26. def periodic(self, time, time_delta):
  27. if self.isTerminal:
  28. self.fd.write('[LC] ')
  29. self.fd.write('%u' % (time / 1e6)) # Time in ns
  30. for core in range(sim.config.ncores):
  31. instrs = self.stats['instrs'][core].delta
  32. misses = self.stats['misses'][core].delta
  33. rate = 1000 * misses / (instrs or 1)
  34. self.fd.write(' %.1f' % rate)
  35. self.fd.write('\n')
  36. sim.util.register(LCTrace())