source: doc/theses/colby_parsons_MMAth/benchmarks/actors/plotData.py @ 75d874a

ADTast-experimental
Last change on this file since 75d874a was dbae916, checked in by caparsons <caparson@…>, 18 months ago

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

  • Property mode set to 100644
File size: 5.5 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    Mem = 9
56
57nameSet = False
58currBench = Bench.Unset # default val
59count = 0
60procCount = 0
61currVariant = 0
62name = ""
63var_name = ""
64sendData = [0.0 for j in range(numVariants)]
65data = [[0.0 for i in range(len(procs))] for j in range(numVariants)]
66bars = [[[0.0 for i in range(len(procs))],[0.0 for k in range(len(procs))]] for j in range(numVariants)]
67tempData = [0.0 for i in range(numTimes)]
68for idx, line in enumerate(lines):
69    # print(line)
70   
71    if currBench == Bench.Unset:
72        if line == "executor":
73            name = "Executor"
74            currBench = Bench.Executor
75        elif line == "matrix":
76            name = "Matrix"
77            currBench = Bench.Matrix
78        elif line == "repeat":
79            name = "Repeat"
80            currBench = Bench.Repeat
81        elif line == "balance_one":
82            name = "Balance-One"
83            currBench = Bench.Balance_One
84        elif line == "balance_multi":
85            name = "Balance-Multi"
86            currBench = Bench.Balance_Multi
87        elif line == "static":
88            name = "Static"
89            currBench = Bench.Static
90        elif line == "dynamic":
91            name = "Dynamic"
92            currBench = Bench.Dynamic
93        elif line == "mem":
94            name = "ExecutorMemory"
95            currBench = Bench.Mem
96        else:
97            print("Expected benchmark name")
98            sys.exit()
99        continue
100
101    if line[0:4] == "proc":
102        continue
103
104    if currBench == Bench.Static or currBench == Bench.Dynamic or currBench == Bench.Mem:
105        if not nameSet:
106            nameSet = True
107            continue
108        lineArr = line.split()
109        tempData[count] = float(lineArr[-1])
110        count += 1
111        if count == numTimes:
112            currMedian = median( tempData )
113            sendData[currVariant] = currMedian
114            count = 0
115            nameSet = False
116            currVariant += 1
117
118            if currVariant == numVariants:
119                fileName = "data/" + machineName
120                if currBench == Bench.Static:
121                    fileName += "SendStatic"
122                elif currBench == Bench.Dynamic:
123                    fileName += "SendDynamic"
124                else:
125                    fileName += "ExecutorMem"
126                f = open(fileName, 'w')
127                if currBench == Bench.Mem:
128                    f.write(" & ".join(map(lambda a: str(int(a/1000)) + 'MB', sendData)))
129                else:
130                    f.write(" & ".join(map(lambda a: str(int(a)) + 'ns', sendData)))
131
132                # reset
133                currBench = Bench.Unset
134                currVariant = 0
135               
136    else:
137        if not nameSet:
138            nameSet = True
139            continue
140       
141        lineArr = line.split()
142        tempData[count] = float(lineArr[-1])
143        count += 1
144        if count == numTimes:
145            currMedian = median( tempData )
146            data[currVariant][procCount] = currMedian
147            lower, upper = st.t.interval(0.95, numTimes - 1, loc=np.mean(tempData), scale=st.sem(tempData))
148            bars[currVariant][0][procCount] = currMedian - lower
149            bars[currVariant][1][procCount] = upper - currMedian
150            count = 0
151            procCount += 1
152
153            if procCount == len(procs):
154                procCount = 0
155                nameSet = False
156                currVariant += 1
157
158                if currVariant == numVariants:
159                    fig, ax = plt.subplots()
160                    plt.title(name + " Benchmark")
161                    plt.ylabel("Runtime (seconds)")
162                    plt.xlabel("Cores")
163                    for idx, arr in enumerate(data):
164                        plt.errorbar( procs, arr, [bars[idx][0], bars[idx][1]], capsize=2, marker='o' )
165                    if currBench == Bench.Executor or currBench == Bench.Matrix or currBench == Bench.Balance_One or currBench == Bench.Repeat:
166                        plt.yscale("log")
167                        plt.ylim(1, None)
168                        ax.get_yaxis().set_major_formatter(ticks.ScalarFormatter())
169                    else:
170                        plt.ylim(0, None)
171                    plt.xticks(procs)
172                    ax.legend(names)
173                    # fig.savefig("plots/" + machineName + name + ".png")
174                    plt.savefig("plots/" + machineName + name + ".pgf")
175                    fig.clf()
176
177                    # reset
178                    currBench = Bench.Unset
179                    currVariant = 0
Note: See TracBrowser for help on using the repository browser.