source: doc/theses/colby_parsons_MMAth/benchmarks/actors/plotData.py@ 625f3e2

ADT ast-experimental
Last change on this file since 625f3e2 was 625f3e2, checked in by caparson <caparson@…>, 3 years ago

added latex compatible output format

  • Property mode set to 100644
File size: 5.1 KB
Line 
1import os
2import sys
3import time
4import matplotlib.pyplot as plt
5import matplotlib.ticker as ticks
6import math
7from scipy import stats as st
8import numpy as np
9from enum import Enum
10from statistics import median
11
12import matplotlib
13matplotlib.use("pgf")
14matplotlib.rcParams.update({
15 "pgf.texsystem": "pdflatex",
16 'font.family': 'serif',
17 'text.usetex': True,
18 'pgf.rcfonts': False,
19})
20
21readfile = open(sys.argv[1], "r")
22
23machineName = ""
24
25if len(sys.argv) > 2:
26 machineName = sys.argv[2]
27
28# first line has num times per experiment
29line = readfile.readline()
30numTimes = int(line)
31
32# second line has processor args
33line = readfile.readline()
34procs = []
35for val in line.split():
36 procs.append(int(val))
37
38# 3rd line has number of variants
39line = readfile.readline()
40names = line.split()
41numVariants = len(names)
42
43lines = (line.rstrip() for line in readfile) # All lines including the blank ones
44lines = (line for line in lines if line) # Non-blank lines
45
46class Bench(Enum):
47 Unset = 0
48 Executor = 1
49 Matrix = 2
50 Repeat = 3
51 Balance_One = 4
52 Balance_Multi = 5
53 Static = 7
54 Dynamic = 8
55
56nameSet = False
57currBench = Bench.Unset # default val
58count = 0
59procCount = 0
60currVariant = 0
61name = ""
62var_name = ""
63sendData = [0.0 for j in range(numVariants)]
64data = [[0.0 for i in range(len(procs))] for j in range(numVariants)]
65bars = [[[0.0 for i in range(len(procs))],[0.0 for k in range(len(procs))]] for j in range(numVariants)]
66tempData = [0.0 for i in range(numTimes)]
67for idx, line in enumerate(lines):
68 # print(line)
69
70 if currBench == Bench.Unset:
71 if line == "executor":
72 name = "Executor"
73 currBench = Bench.Executor
74 elif line == "matrix":
75 name = "Matrix"
76 currBench = Bench.Matrix
77 elif line == "repeat":
78 name = "Repeat"
79 currBench = Bench.Repeat
80 elif line == "balance_one":
81 name = "Balance-One"
82 currBench = Bench.Balance_One
83 elif line == "balance_multi":
84 name = "Balance-Multi"
85 currBench = Bench.Balance_Multi
86 elif line == "static":
87 name = "Static"
88 currBench = Bench.Static
89 elif line == "dynamic":
90 name = "Dynamic"
91 currBench = Bench.Dynamic
92 else:
93 print("Expected benchmark name")
94 sys.exit()
95 continue
96
97 if line[0:4] == "proc":
98 continue
99
100 if currBench == Bench.Static or currBench == Bench.Dynamic:
101 if not nameSet:
102 nameSet = True
103 continue
104 lineArr = line.split()
105 tempData[count] = float(lineArr[-1])
106 count += 1
107 if count == numTimes:
108 currMedian = median( tempData )
109 sendData[currVariant] = currMedian
110 count = 0
111 nameSet = False
112 currVariant += 1
113
114 if currVariant == numVariants:
115 fileName = "data/" + machineName
116 if currBench == Bench.Static:
117 fileName += "SendStatic"
118 else:
119 fileName += "SendDynamic"
120 f = open(fileName, 'w')
121 f.write(" & ".join(map(lambda a: str(int(a)) + 'ns', sendData)))
122
123 # reset
124 currBench = Bench.Unset
125 currVariant = 0
126
127 else:
128 if not nameSet:
129 nameSet = True
130 continue
131
132 lineArr = line.split()
133 tempData[count] = float(lineArr[-1])
134 count += 1
135 if count == numTimes:
136 currMedian = median( tempData )
137 data[currVariant][procCount] = currMedian
138 lower, upper = st.t.interval(0.95, numTimes - 1, loc=np.mean(tempData), scale=st.sem(tempData))
139 bars[currVariant][0][procCount] = currMedian - lower
140 bars[currVariant][1][procCount] = upper - currMedian
141 count = 0
142 procCount += 1
143
144 if procCount == len(procs):
145 procCount = 0
146 nameSet = False
147 currVariant += 1
148
149 if currVariant == numVariants:
150 fig, ax = plt.subplots()
151 plt.title(name + " Benchmark")
152 plt.ylabel("Runtime (seconds)")
153 plt.xlabel("Cores")
154 for idx, arr in enumerate(data):
155 plt.errorbar( procs, arr, [bars[idx][0], bars[idx][1]], capsize=2, marker='o' )
156 if currBench == Bench.Executor or currBench == Bench.Matrix or currBench == Bench.Balance_One or currBench == Bench.Repeat:
157 plt.yscale("log")
158 plt.ylim(1, None)
159 ax.get_yaxis().set_major_formatter(ticks.ScalarFormatter())
160 else:
161 plt.ylim(0, None)
162 ax.legend(names)
163 # fig.savefig("plots/" + name + ".png")
164 plt.savefig("plots/" + machineName + name + ".pgf")
165 fig.clf()
166
167 # reset
168 currBench = Bench.Unset
169 currVariant = 0
Note: See TracBrowser for help on using the repository browser.