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()