perf_max.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. """Computes the maximal value for a given selection of quantities, optimization levels
  2. and test names."""
  3. import sys
  4. import argparse
  5. from collections import defaultdict
  6. import utils
  7. def main():
  8. arg_parser = argparse.ArgumentParser()
  9. arg_parser.add_argument('input', help='The performance data file.')
  10. arg_parser.add_argument(
  11. '-q',
  12. '--quantity',
  13. type=str,
  14. help="The quantity to filter on. Defaults to '%s'" %
  15. utils.TOTAL_TIME_QUANTITY,
  16. default=utils.TOTAL_TIME_QUANTITY)
  17. arg_parser.add_argument(
  18. '-O',
  19. '--opt',
  20. type=str,
  21. nargs='*',
  22. help="Filters on optimization levels.")
  23. arg_parser.add_argument(
  24. '-t', '--test', type=str, nargs='*', help="Filters on tests.")
  25. args = arg_parser.parse_args()
  26. perf_data = utils.parse_perf_data(args.input)[args.quantity]
  27. if args.opt:
  28. optimization_set = set(args.opt)
  29. perf_data = [(optimization_level, measurements)
  30. for optimization_level, measurements in perf_data
  31. if optimization_level in optimization_set]
  32. if args.test:
  33. test_set = set(args.test)
  34. new_perf_data = []
  35. for optimization_level, measurements in perf_data:
  36. new_measurements = []
  37. for test_name, data_point in measurements:
  38. if test_name in test_set:
  39. new_measurements.append((test_name, data_point))
  40. if len(new_measurements) > 0:
  41. new_perf_data.append((optimization_level, new_measurements))
  42. perf_data = new_perf_data
  43. print(max(max(data_point for _, data_point in measurements) for _, measurements in perf_data))
  44. if __name__ == '__main__':
  45. main()