1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
#!/usr/bin/env python
import sys
from os.path import basename
from os import listdir
from plot import decode, Plot
from gnuplot import curve
SCHEDULERS = ['MC', 'MC-MERGE', 'MC-MERGE-REDIR']
COLS = {'plugin': 0,
'overhead': 1,
'n_tasks': 2,
'samples': 3,
'filtered': 4,
'max': 5,
'avg': 6,
'min': 7,
'med': 8,
'std': 9,
'var': 10,
'iqr_max': 11,
'iqr_min': 12}
def usage(msg):
print >>sys.stderr, msg
sys.exit(1)
def get_csv_files(directory):
a = []
for f in listdir(directory):
bn = basename(f)
if f.startswith('scheduler') and f.endswith('.csv'):
a.append(f)
return a
def gnuplot_col(col_name):
# gnuplot is 1-indexed
return 1 + COLS[col_name]
def get_sched_title(sched):
SCHEDULERS = {'MC': 'MC',
'MC-MERGE': 'MC + MT',
'MC-MERGE-REDIR': 'MC + MT + REDIR'}
return SCHEDULERS[sched]
def get_overhead_title(ov):
OV = {'SCHED': '',
'LVLA-SCHED': ' level-A',
'RELEASE': '',
'LVLA-RELEASE': ' level-A'}
return OV[ov]
def set_plot_opts(p):
p.rounded_caps = True
p.font = 'Helvetica'
p.font_size = '5pt'
p.size = ('8.5cm', '5.25cm')
p.default_style = 'linespoints lw 2.5'
p.default_style += ' smooth bezier'
p.key = 'below'
p.monochrome = False
p.dashed_lines = False
p.xrange = (18, 122)
for i, c in enumerate(p.curves):
c.style = "linespoints ls %d" % (i + 1)
p.line_styles = [
(1, "lw 1.5 ps 0.3"),
(2, "lw 1.5 ps 0.3"),
(3, "lw 1.5 ps 0.3"),
(4, "lw 1.5 ps 0.3"),
(5, 'pt 6 lw 1.5 ps 0.3 lc rgbcolor "#ff910d"'),
(6, "pt 7 lw 1.5 ps 0.3"),
(7, 'lw 1.5 ps 0.3 lc rgbcolor "#000000"'),
(8, "lw 1.5 ps 0.3"),
]
def plot_release(data_dir):
p = Plot()
p.output = '{0}/overhead=RELEASE.pdf'.format(data_dir)
p.format = 'pdf'
for rel_type in ['RELEASE', 'LVLA-RELEASE']:
for sched in SCHEDULERS:
fname = '{0}/scheduler={1}_overhead={2}.csv'.format(data_dir, sched, rel_type)
ti = '{0}{1}'.format(get_sched_title(sched), get_overhead_title(rel_type))
p.curves += [curve(fname=fname, xcol=gnuplot_col('n_tasks'),
ycol=gnuplot_col('avg'), title=ti)]
p.xlabel = 'number of tasks'
p.ylabel = 'overhead (microseconds)'
p.title = 'release overheads'
set_plot_opts(p)
p.gnuplot_exec()
def plot_sched(data_dir):
p = Plot()
p.output = '{0}/overhead=SCHED.pdf'.format(data_dir)
p.format = 'pdf'
p.key = 'top left'
for sched_type in ['SCHED', 'LVLA-SCHED']:
for sched in SCHEDULERS:
fname = '{0}/scheduler={1}_overhead=SCHED.csv'.format(data_dir, sched)
ti = '{0}{1}'.format(get_sched_title(sched), get_overhead_title(sched_type))
p.curves += [curve(fname=fname, xcol=gnuplot_col('n_tasks'),
ycol=gnuplot_col('avg'), title=ti)]
p.xlabel = 'number of tasks'
p.ylabel = 'overhead (microseconds)'
p.title = 'scheduling overheads'
set_plot_opts(p)
p.gnuplot_exec()
def main():
if len(sys.argv) < 2:
usage('missing args')
data_dir = sys.argv[1]
plot_sched(data_dir)
plot_release(data_dir)
if __name__ == '__main__':
main()
|