perf_max.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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(
  10. 'input', help='The performance data file.', nargs='?', default=None)
  11. arg_parser.add_argument(
  12. '-q',
  13. '--quantity',
  14. type=str,
  15. help="The quantity to filter on. Defaults to '%s'" %
  16. utils.TOTAL_TIME_QUANTITY,
  17. default=utils.TOTAL_TIME_QUANTITY)
  18. arg_parser.add_argument(
  19. '-O',
  20. '--opt',
  21. type=str,
  22. nargs='*',
  23. help="Filters on optimization levels.")
  24. arg_parser.add_argument(
  25. '-t', '--test', type=str, nargs='*', help="Filters on tests.")
  26. args = arg_parser.parse_args()
  27. perf_data = utils.parse_perf_data(args.input)[args.quantity]
  28. if args.opt:
  29. optimization_set = set(args.opt)
  30. perf_data = [(optimization_level, measurements)
  31. for optimization_level, measurements in perf_data
  32. if optimization_level in optimization_set]
  33. if args.test:
  34. test_set = set(args.test)
  35. new_perf_data = []
  36. for optimization_level, measurements in perf_data:
  37. new_measurements = []
  38. for test_name, data_point in measurements:
  39. if test_name in test_set:
  40. new_measurements.append((test_name, data_point))
  41. if len(new_measurements) > 0:
  42. new_perf_data.append((optimization_level, new_measurements))
  43. perf_data = new_perf_data
  44. print(max(
  45. max(data_point for _, data_point in measurements)
  46. for _, measurements in perf_data))
  47. if __name__ == '__main__':
  48. main()