Changeset 0bd6a14
- Timestamp:
- Apr 27, 2022, 7:37:20 PM (3 years ago)
- Branches:
- ADT, ast-experimental, master, pthread-emulation, qualifiedEnum
- Children:
- d24be37a
- Parents:
- 4b2ea0d (diff), e9c5db2 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- benchmark
- Files:
-
- 1 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
benchmark/plot.py
r4b2ea0d r0bd6a14 22 22 23 23 class Field: 24 def __init__(self, unit, _min ):24 def __init__(self, unit, _min, _log): 25 25 self.unit = unit 26 26 self.min = _min 27 self.log = _log 27 28 28 29 field_names = { 29 "ns per ops" : Field('ns' , 0), 30 "Number of processors" : Field('' , 1), 31 "Ops per procs" : Field('Ops' , 0), 32 "Ops per threads" : Field('Ops' , 0), 33 "ns per ops/procs" : Field('ns' , 0), 34 "Number of threads" : Field('thrd' , 1), 35 "Total Operations(ops)": Field('Ops' , 0), 36 "Ops/sec/procs" : Field('Ops' , 0), 37 "Total blocks" : Field('Blocks', 0), 38 "Ops per second" : Field('Ops' , 0), 39 "Cycle size (# thrds)" : Field('thrd' , 1), 40 "Duration (ms)" : Field('ms' , 0), 30 "ns per ops" : Field('ns' , 0, False), 31 "Number of processors" : Field('' , 1, False), 32 "Ops per procs" : Field('Ops' , 0, False), 33 "Ops per threads" : Field('Ops' , 0, False), 34 "ns per ops/procs" : Field('ns' , 0, False), 35 "Number of threads" : Field('thrd' , 1, False), 36 "Total Operations(ops)" : Field('Ops' , 0, False), 37 "Ops/sec/procs" : Field('Ops' , 0, False), 38 "Total blocks" : Field('Blocks', 0, False), 39 "Ops per second" : Field('Ops' , 0, False), 40 "Cycle size (# thrds)" : Field('thrd' , 1, False), 41 "Duration (ms)" : Field('ms' , 0, False), 42 "Target QPS" : Field('QPS' , 0, False), 43 "Actual QPS" : Field('QPS' , 0, False), 44 "Median Read Latency" : Field('us' , 0, True), 45 "Tail Read Latency" : Field('us' , 0, True), 46 "Median Update Latency" : Field('us' , 0, True), 47 "Tail Update Latency" : Field('us' , 0, True), 41 48 } 42 49 … … 46 53 series = {} # scatter data for each individual data point 47 54 groups = {} # data points for x value 55 56 print("Preparing Data") 57 48 58 for entry in in_data: 49 59 name = entry[0] … … 65 75 groups[name][xval].append(yval) 66 76 77 print("Preparing Lines") 78 67 79 lines = {} # lines from groups with min, max, median, etc. 68 80 for name, data in groups.items(): … … 78 90 lines[name]['avg'].append(statistics.mean(ys)) 79 91 92 print("Making Plots") 93 80 94 for name, data in series.items(): 81 95 _col = next(colors) … … 85 99 plt.plot(lines[name]['x'], lines[name]['med'], '-', color=_col) 86 100 101 print("Calculating Extremums") 102 87 103 mx = max([max(s['x']) for s in series.values()]) 88 104 my = max([max(s['y']) for s in series.values()]) 89 105 106 print("Finishing Plots") 107 90 108 plt.ylabel(y) 91 plt.xlim(field_names[x].min, mx + 0.25) 92 plt.xticks(range(1, math.ceil(mx) + 1)) 109 # plt.xticks(range(1, math.ceil(mx) + 1)) 93 110 plt.xlabel(x) 94 plt.ylim(field_names[y].min, my*1.2)95 111 plt.grid(b = True) 96 112 ax.xaxis.set_major_formatter( EngFormatter(unit=field_names[x].unit) ) 113 if field_names[x].log: 114 ax.set_xscale('log') 115 else: 116 plt.xlim(field_names[x].min, mx + 0.25) 117 97 118 ax.yaxis.set_major_formatter( EngFormatter(unit=field_names[y].unit) ) 119 if field_names[y].log: 120 ax.set_yscale('log') 121 else: 122 plt.ylim(field_names[y].min, my*1.2) 123 98 124 plt.legend(loc='upper left') 125 126 print("Results Ready") 99 127 if out: 100 128 plt.savefig(out) … … 106 134 # ================================================================================ 107 135 # parse command line arguments 108 parser = parser = argparse.ArgumentParser(description='Python Script to draw R.M.I.T. results') 109 parser.add_argument('-f', '--file', nargs='?', type=argparse.FileType('r'), default=sys.stdin) 110 parser.add_argument('-o', '--out', nargs='?', type=str, default=None) 111 parser.add_argument('-y', nargs='?', type=str, default="") 136 parser = argparse.ArgumentParser(description='Python Script to draw R.M.I.T. results') 137 parser.add_argument('-f', '--file', nargs='?', type=argparse.FileType('r'), default=sys.stdin, help="Input file") 138 parser.add_argument('-o', '--out', nargs='?', type=str, default=None, help="Output file") 139 parser.add_argument('-y', nargs='?', type=str, default="", help="Which field to use as the Y axis") 140 parser.add_argument('-x', nargs='?', type=str, default="", help="Which field to use as the X axis") 112 141 113 try: 114 options = parser.parse_args() 115 except: 116 print('ERROR: invalid arguments', file=sys.stderr) 117 parser.print_help(sys.stderr) 118 sys.exit(1) 142 options = parser.parse_args() 119 143 120 144 # ================================================================================ … … 140 164 if not options.out : 141 165 print(series) 142 print("fields") 143 for f in fields: 144 print("{}".format(f)) 166 print("fields: ", ' '.join(fields)) 145 167 146 if options.y and options.y in field_names.keys(): 147 plot(data, "Number of processors", options.y, options.out) 148 else: 149 if options.y: 150 print("Could not find key '{}', defaulting to 'ns per ops'".format(options.y)) 151 plot(data, "Number of processors", "ns per ops", options.out) 168 wantx = "Number of processors" 169 wanty = "ns per ops" 170 171 if options.x: 172 if options.x in field_names.keys(): 173 wantx = options.x 174 else: 175 print("Could not find X key '{}', defaulting to '{}'".format(options.x, wantx)) 176 177 if options.y: 178 if options.y in field_names.keys(): 179 wanty = options.y 180 else: 181 print("Could not find Y key '{}', defaulting to '{}'".format(options.y, wanty)) 182 183 184 plot(data, wantx, wanty, options.out) -
benchmark/rmit.py
r4b2ea0d r0bd6a14 281 281 282 282 if options.file != sys.stdout: 283 print("Done ")283 print("Done"); ")
Note: See TracChangeset
for help on using the changeset viewer.