#!/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'] OVERHEADS = ['SCHED', 'RELEASE', 'LVLA-RELEASE'] 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 plot_release(data_dir): p = Plot() p.output = '{0}/overhead=RELEASE.pdf'.format(data_dir) p.format = 'pdf' p.key = 'top left' for rel_type in ['RELEASE', 'LVLA-RELEASE']: for sched in SCHEDULERS: fname = '{0}/scheduler={1}_overhead={2}.csv'.format(data_dir, sched, rel_type) p.curves += [curve(fname=fname, xcol=gnuplot_col('n_tasks'), ycol=gnuplot_col('avg'), title='{0} {1}'.format(sched, rel_type))] p.xlabel = 'number of tasks' p.ylabel = 'overhead (microseconds)' p.title = 'release overheads' 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 in SCHEDULERS: fname = '{0}/scheduler={1}_overhead=SCHED.csv'.format(data_dir, sched) p.curves += [curve(fname=fname, xcol=gnuplot_col('n_tasks'), ycol=gnuplot_col('avg'), title='{0}'.format(sched))] p.xlabel = 'number of tasks' p.ylabel = 'overhead (microseconds)' p.title = 'scheduling overheads' 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()