source: doc/theses/colby_parsons_MMath/benchmarks/actors/plotData.py

Last change on this file was f945fa7, checked in by Peter A. Buhr <pabuhr@…>, 12 hours ago

fix spelling mistake in directory name

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