source: benchmark/plot.py@ ab1a9ea

ADT ast-experimental enum forall-pointer-decay pthread-emulation qualifiedEnum
Last change on this file since ab1a9ea was 44706d1, checked in by Thierry Delisle <tdelisle@…>, 5 years ago

Improved colors and units of plotter

  • Property mode set to 100755
File size: 3.0 KB
Line 
1#!/usr/bin/python3
2"""
3Python Script to plot values obtained by the rmit.py script
4Runs a R.I.P.L.
5
6./plot.py
7-t trials
8-o option:values
9"""
10
11import argparse
12import itertools
13import json
14import math
15import numpy
16import re
17import sys
18
19import matplotlib.pyplot as plt
20from matplotlib.ticker import EngFormatter
21
22class Field:
23 def __init__(self, unit, _min):
24 self.unit = unit
25 self.min = _min
26
27field_names = {
28 "ns per ops" : Field('ns' , 0),
29 "Number of processors" : Field('' , 1),
30 "Ops per procs" : Field('Ops' , 0),
31 "Ops per threads" : Field('Ops' , 0),
32 "ns per ops/procs" : Field('ns' , 0),
33 "Number of threads" : Field('thrd' , 1),
34 "Total Operations(ops)": Field('Ops' , 0),
35 "Ops/sec/procs" : Field('Ops' , 0),
36 "Total blocks" : Field('Blocks', 0),
37 "Ops per second" : Field('Ops' , 0),
38 "Cycle size (# thrds)" : Field('thrd' , 1),
39 "Duration (ms)" : Field('ms' , 0),
40}
41
42def plot(data, x, y):
43 fig, ax = plt.subplots()
44 colors = itertools.cycle(['#0095e3','#006cb4','#69df00','#0aa000','#fb0300','#e30002','#fd8f00','#ff7f00','#8f00d6','#4b009a','#ffff00','#b13f00'])
45 series = {}
46 for entry in data:
47 if not entry[0] in series:
48 series[entry[0]] = {'x':[], 'y':[]}
49
50 if x in entry[2] and y in entry[2]:
51 series[entry[0]]['x'].append(entry[2][x])
52 series[entry[0]]['y'].append(entry[2][y])
53
54 for name, data in series.items():
55 plt.scatter(data['x'], data['y'], color=next(colors), label=name, marker='x')
56
57 mx = max([max(s['x']) for s in series.values()])
58 my = max([max(s['y']) for s in series.values()])
59
60 plt.ylabel(y)
61 plt.xlim(field_names[x].min, mx + 0.25)
62 plt.xticks(range(1, math.ceil(mx) + 1))
63 plt.xlabel(x)
64 plt.ylim(field_names[y].min, my*1.2)
65 plt.grid(b = True)
66 ax.xaxis.set_major_formatter( EngFormatter(unit=field_names[x].unit) )
67 ax.yaxis.set_major_formatter( EngFormatter(unit=field_names[y].unit) )
68 plt.legend(loc='upper left')
69 plt.show()
70
71
72if __name__ == "__main__":
73 # ================================================================================
74 # parse command line arguments
75 parser = parser = argparse.ArgumentParser(description='Python Script to draw R.M.I.T. results')
76 parser.add_argument('-f', '--file', nargs='?', type=argparse.FileType('r'), default=sys.stdin)
77
78 try:
79 options = parser.parse_args()
80 except:
81 print('ERROR: invalid arguments', file=sys.stderr)
82 parser.print_help(sys.stderr)
83 sys.exit(1)
84
85 # ================================================================================
86 # load data
87 try :
88 data = json.load(options.file)
89 except :
90 print('ERROR: could not read input', file=sys.stderr)
91 parser.print_help(sys.stderr)
92 sys.exit(1)
93
94 # ================================================================================
95 # identify the keys
96
97 series = set()
98 fields = set()
99
100 for entry in data:
101 series.add(entry[0])
102 for label in entry[2].keys():
103 fields.add(label)
104
105 print(series)
106 print("fields")
107 for f in fields:
108 print("{}".format(f))
109
110 plot(data, "Number of processors", "ns per ops")
Note: See TracBrowser for help on using the repository browser.