148 lines
5.4 KiB
Python
148 lines
5.4 KiB
Python
|
#!/usr/bin/env python
|
||
|
import sys, argparse
|
||
|
import csv
|
||
|
|
||
|
import matplotlib.pyplot as plt
|
||
|
import numpy as np
|
||
|
|
||
|
def parse_args():
|
||
|
parser = argparse.ArgumentParser()
|
||
|
parser.add_argument("csv_files", nargs=2, 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
|
||
|
|
||
|
|
||
|
#Calculate derived series
|
||
|
derived_series = {}
|
||
|
|
||
|
traversals = ['Fwd', 'Bck']
|
||
|
|
||
|
N_AVG = 100
|
||
|
for traversal in ['Fwd', 'Bck']:
|
||
|
#Per-level speed-up
|
||
|
first_array = data[args.csv_files[0]]["%s_Time" % traversal]
|
||
|
second_array = data[args.csv_files[1]]["%s_Time" % traversal]
|
||
|
|
||
|
derived_series["Level Speed-up %s" % traversal] = []
|
||
|
for i in xrange(len(first_array)):
|
||
|
if(second_array[i] == 0.0):
|
||
|
derived_series["Level Speed-up %s" % traversal].append(None)
|
||
|
else:
|
||
|
derived_series["Level Speed-up %s" % traversal].append(first_array[i] / second_array[i])
|
||
|
|
||
|
#Averaged level speed-up
|
||
|
derived_series["Avg Level Speed-up %s" % traversal] = []
|
||
|
for i in xrange(len(first_array)):
|
||
|
first_avg = sum(first_array[max(0,i-N_AVG):i]) / N_AVG
|
||
|
second_avg = sum(second_array[max(0,i-N_AVG):i]) / N_AVG
|
||
|
if(second_avg == 0.0):
|
||
|
derived_series["Avg Level Speed-up %s" % traversal].append(None)
|
||
|
else:
|
||
|
derived_series["Avg Level Speed-up %s" % traversal].append(first_avg / second_avg)
|
||
|
|
||
|
|
||
|
#Cummulative time
|
||
|
for filename in args.csv_files:
|
||
|
derived_series["Cumm Time %s %s" % (filename.split('_')[0], traversal)] = []
|
||
|
val_sum = 0.
|
||
|
for value in data[filename]["%s_Time" % traversal]:
|
||
|
val_sum += value
|
||
|
derived_series["Cumm Time %s %s" % (filename.split('_')[0], traversal)].append(val_sum)
|
||
|
|
||
|
#Cummulative Speed-up
|
||
|
derived_series["Cumm Speed-Up %s" % traversal] = []
|
||
|
first_cumm_array = derived_series["Cumm Time %s %s" % (args.csv_files[0].split('_')[0], traversal)]
|
||
|
second_cumm_array = derived_series["Cumm Time %s %s" % (args.csv_files[1].split('_')[0], traversal)]
|
||
|
for i in xrange(len(first_cumm_array)):
|
||
|
if(second_array[i] == 0.0):
|
||
|
derived_series["Cumm Speed-Up %s" % traversal].append(None)
|
||
|
else:
|
||
|
derived_series["Cumm Speed-Up %s" % traversal].append(first_cumm_array[i] / second_cumm_array[i])
|
||
|
|
||
|
|
||
|
|
||
|
#Plot results
|
||
|
fig, ax = plt.subplots(4, sharex=True)
|
||
|
|
||
|
|
||
|
#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')
|
||
|
|
||
|
#ax[0].set_xscale('log')
|
||
|
#ax[1].set_xscale('log')
|
||
|
#ax[2].set_xscale('log')
|
||
|
#ax[3].set_xscale('log')
|
||
|
plt.tight_layout()
|
||
|
if args.f:
|
||
|
plt.savefig(args.f, dpi=300)
|
||
|
else:
|
||
|
plt.show()
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|