aboutsummaryrefslogtreecommitdiffstats
path: root/plot_rtas12.py
blob: 5942a880cab05c7985b9f62e640d898cdbc45c90 (plain) (blame)
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()