| #!/usr/bin/env python |
| import sys, argparse |
| import csv |
| |
| import matplotlib.pyplot as plt |
| import numpy as np |
| from collections import OrderedDict |
| |
| def parse_args(): |
| parser = argparse.ArgumentParser() |
| parser.add_argument("csv_files", nargs=1, default=None, help="CSV files with level runtimes") |
| parser.add_argument("-f", default=None, help="Output filename") |
| parser.add_argument("--min_fwd_width", type=int, default=None, help="Minimum forward width for parllel") |
| parser.add_argument("--min_bck_width", type=int, default=None, help="Minimum backward width for parllel") |
| |
| args = parser.parse_args() |
| |
| return args |
| |
| def main(): |
| args = parse_args() |
| |
| data = {} |
| for filename in args.csv_files: |
| with open(filename) as f: |
| data[filename] = {} |
| csv_reader = csv.DictReader(f) |
| |
| for field in csv_reader.fieldnames: |
| data[filename][field] = [] |
| |
| for row in csv_reader: |
| for field in csv_reader.fieldnames: |
| data[filename][field].append(float(row[field])) |
| |
| for filename, series in data.iteritems(): |
| print "File: ", filename |
| #for series_name, data_values in series.iteritems(): |
| #print "\tSeries: ", series_name |
| #print "\tValuse: ", data_values |
| |
| |
| series = OrderedDict() |
| |
| analyzer_colors = OrderedDict() |
| analyzer_colors['Serial']= 'r' |
| analyzer_colors['Dynamic']= 'b' |
| analyzer_colors['Levelized']= 'g' |
| analyzer_colors['No Dep']= 'y' |
| |
| for analyzer, color in analyzer_colors.iteritems(): |
| series['%s' % analyzer] = {'label': '%s' % analyzer, 'linestyle': "-", 'color': color} |
| series['%s SIMD_AUTO' % analyzer] = {'label': '%s SIMD_AUTO' % analyzer, 'linestyle': "--", 'color': color} |
| series['%s SIMD_INTRINSICS' % analyzer] = {'label': '%s SIMD_INTR' % analyzer, 'linestyle': "-.", 'color': color} |
| |
| |
| #Plot results |
| fig, ax = plt.subplots(1) |
| |
| for series_name, series_info in series.iteritems(): |
| ax.plot(data[args.csv_files[0]]["Time Vector Width"], data[args.csv_files[0]][series_name], linestyle=series_info['linestyle'], color=series_info['color'], label=series_info['label'], linewidth=2) |
| ax.legend(loc='best', prop={'size': 13}) |
| ax.set_ylabel("Time (sec)") |
| ax.set_xlabel("Time Vector Width") |
| ax.set_title("Run-time Scaling With Time Vector Width") |
| ax.set_xlim(left=1, right=max(data[args.csv_files[0]]["Time Vector Width"])) |
| |
| ##Cummulative Times |
| #for series_name in derived_series.keys(): |
| #if series_name.startswith("Cumm Time"): |
| #ax[0].plot(data[args.csv_files[0]]["Level"], derived_series[series_name], label=series_name[len("Cumm Time"):]) |
| #ax[0].legend(loc='best') |
| #ax[0].set_ylabel("Cummulative\nTime (sec)") |
| #ax[0].set_title("Per Level Performance Characteristics") |
| #ax[0].set_ylim(bottom=0) |
| |
| ##Per-level Speed-up |
| #for traversal in traversals: |
| #series_name = "Avg Level Speed-up %s" % traversal |
| |
| #ax[1].plot(data[args.csv_files[0]]["Level"], derived_series[series_name], label=traversal) |
| #ax[1].legend(loc='best') |
| ##ax[1].set_yscale('log') |
| #ax[1].set_ylabel("Level Speed-Up\n(N_AVG %d)" % N_AVG) |
| #ax[1].set_ylim(bottom=0) |
| |
| #for traversal in traversals: |
| #series_name = "Cumm Speed-Up %s" % traversal |
| |
| #ax[2].plot(data[args.csv_files[0]]["Level"], derived_series[series_name], label=traversal) |
| #ax[2].legend(loc='best') |
| #ax[2].set_ylabel("Cummulative\nSpeed-Up") |
| #ax[2].set_ylim(bottom=0) |
| |
| #ax[3].plot(data[args.csv_files[0]]["Level"], data[args.csv_files[0]]["Width"], label="width") |
| |
| #if args.min_fwd_width: |
| #ax[3].plot(data[args.csv_files[0]]["Level"], [args.min_fwd_width for x in xrange(len(data[args.csv_files[0]]["Level"]))], label="Min // Fwd") |
| #if args.min_fwd_width: |
| #ax[3].plot(data[args.csv_files[0]]["Level"], [args.min_bck_width for x in xrange(len(data[args.csv_files[0]]["Level"]))], label="Min // Bck") |
| |
| #ax[3].set_yscale('log') |
| #ax[3].set_xlabel("Level") |
| #ax[3].set_ylabel("Level Width") |
| ##ax[3].set_xlim(right=len(data[args.csv_files[0]]["Level"])) |
| #ax[3].legend(loc='best') |
| |
| plt.tight_layout() |
| if args.f: |
| plt.savefig(args.f, dpi=300) |
| else: |
| plt.show() |
| |
| |
| if __name__ == "__main__": |
| main() |