github.com/DARA-Project/GoDist-Scheduler@v0.0.0-20201030134746-668de4acea0d/u-benchmarks/go_vs_dgo/csv_to_graph.py (about) 1 import matplotlib.pyplot as plt 2 import numpy as np 3 import sys 4 import csv 5 6 def get_data(filename): 7 data = [] 8 with open(filename) as inf: 9 reader = csv.DictReader(inf) 10 for row in reader: 11 data += [row] 12 return data 13 14 def plot_vertical_bars(dataset_name, orderings, labels, legend): 15 N = len(orderings[0]) 16 indices = np.arange(N) 17 # width = 1 / len(orderings) 18 # This is the fitting width. Right now, lets just hardcode it 19 width = 0.15 20 21 fig = plt.figure(figsize=(8,4)) 22 ax = fig.add_subplot(111) 23 24 i = 0 25 rects = () 26 for o in orderings: 27 rect = ax.bar(indices + width * i, o, width) 28 rects = rects + (rect[0],) 29 i += 1 30 31 ax.set_ylabel('Runtime (in ns)') 32 ax.set_xticks(indices + width * (len(orderings)-1)/2) 33 ax.set_xticklabels(labels, rotation=45) 34 ax.legend(rects, legend, loc='lower left', bbox_to_anchor=(0.0,1.01), frameon=False, ncol=int(len(orderings)/2)) 35 plt.savefig(dataset_name + ".png", bbox_inches="tight") 36 37 38 def parse_data(dgo_data, go1_10_data): 39 print("Name,Relative_Slow_Down,Percentage_Slow_Down") 40 graphable_data_dgo = [] 41 graphable_data_go1_10 = [] 42 names = [] 43 for dgo, go1_10 in zip(dgo_data, go1_10_data): 44 if dgo['name'] != go1_10['name']: 45 print("The benchmarks should be in order") 46 sys.exit(1) 47 rel_sd = float(dgo['latency_ns'])/float(go1_10['latency_ns']) 48 per_sd = (float(dgo['latency_ns']) - float(go1_10['latency_ns']))/float(go1_10['latency_ns']) 49 print(dgo['name'], ",", rel_sd, ",", per_sd * 100) 50 names += [dgo['name']] 51 graphable_data_dgo += [float(dgo['latency_ns'])] 52 graphable_data_go1_10 += [float(go1_10['latency_ns'])] 53 return names, graphable_data_dgo, graphable_data_go1_10 54 55 def main(): 56 if len(sys.argv) < 3: 57 print("Usage: python csv_to_graph.py <dgo_file> <go1_10_file>") 58 sys.exit(1) 59 dgo_data = get_data(sys.argv[1]) 60 go1_10_data = get_data(sys.argv[2]) 61 names, graphable_data_dgo, graphable_data_go1_10 = parse_data(dgo_data, go1_10_data) 62 length = 5 63 legend = ['dgo', 'go 1.10'] 64 for i in range(int(len(names)/length)): 65 startIndex = i * length 66 endIndex = startIndex + length 67 if i == int(len(names)/length) - 1: 68 endIndex = len(names) 69 data1 = graphable_data_dgo[startIndex:endIndex] 70 data2 = graphable_data_go1_10[startIndex:endIndex] 71 data = [data1, data2] 72 plot_vertical_bars(str(i), data, names[startIndex:endIndex], legend) 73 74 if __name__ == '__main__': 75 main()