File indexing completed on 2025-05-07 01:49:59
0001
0002 import json
0003
0004 from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter
0005 parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter)
0006 parser.add_argument("-f", "--format", dest="fmt", default="txt", help="output format")
0007 parser.add_argument("-H", "--header", dest="header", action="store_true", default=False, help="print headers")
0008 parser.add_argument("--base", dest="base", default="{}.json,{}_timing_report.json", help="comma-separated base name for size and timing files")
0009 parser.add_argument("--ref", dest="ref", default="ref/", help="path to the reference files")
0010 parser.add_argument("job", type=str, nargs='+')
0011 options = parser.parse_args()
0012
0013 headers = [ 'workflow' , 'id' , 'kb/ev' , 'ref kb/ev' , 'diff kb/ev' , 'ev/s/thd' , 'ref ev/s/thd' , 'diff rate' , 'mem/thd' , 'ref mem/thd' ]
0014 start, sep, end = "", "\t", ""
0015 if options.fmt == "md":
0016 start, sep, end = "| ", " | ", " |"
0017
0018 def prow(x):
0019 print(start + sep.join(x) + end)
0020
0021 first = True
0022
0023 size_pattern,timing_pattern = options.base.split(',')
0024 for job in options.job:
0025
0026 try:
0027 wf_id = job.split("_")[0]
0028 wf_name = "_".join(job.split("_")[1:])
0029
0030 except IndexError:
0031 wf_id = ""
0032 wf_name = job
0033
0034 size_json=size_pattern.format(job)
0035 size_ref_json=options.ref+'/'+size_json
0036 timing_json=timing_pattern.format(job)
0037 timing_ref_json=options.ref+'/'+timing_json
0038
0039 try:
0040
0041 jnew = json.load(open(size_json,'r'))
0042 jref = json.load(open(size_ref_json,'r'))
0043 size_new = jnew["trees"]["Events"]['allsize']/jnew["trees"]["Events"]['entries']
0044 size_ref = jref["trees"]["Events"]['allsize']/jref["trees"]["Events"]['entries']
0045
0046 jnew_t = json.load(open(timing_json,'r'))
0047 jref_t = json.load(open(timing_ref_json,'r'))
0048 rate_new = jnew_t["Timing/EventThroughput"]/jnew_t["Timing/NumberOfThreads"]
0049 rate_ref = jref_t["Timing/EventThroughput"]/jref_t["Timing/NumberOfThreads"]
0050 try:
0051 rmem_new = jnew_t["ApplicationMemory/PeakValueRss"]/jnew_t["Timing/NumberOfThreads"]
0052 rmem_ref = jref_t["ApplicationMemory/PeakValueRss"]/jref_t["Timing/NumberOfThreads"]
0053 except KeyError:
0054 rmem_new = 0
0055 rmem_ref = 0
0056
0057 if first and options.header:
0058 prow(headers)
0059 if options.fmt == "md": prow("---" for x in headers)
0060 first = False
0061
0062 prow([ wf_name, wf_id, '%.3f' % size_new, '%.3f' % size_ref, '%.3f ( %+.1f%% )' % (size_new - size_ref, (size_new-size_ref)/size_ref * 100 ),
0063 '%.2f'%rate_new, '%.2f'%rate_ref, '%+.1f%%'%((rate_new-rate_ref)/rate_ref*100), '%.3f'%(rmem_new/1000), '%.3f'%(rmem_ref/1000) ])
0064
0065 except IOError:
0066
0067 pass