The Gaudi Framework  master (902e3694)
plotSpeedup.py
Go to the documentation of this file.
1 #! /usr/bin/env python3
2 
12 """
13 Script that fetches all the logfiles from disk and reads the timings.
14 Parameters can be changed according to the working points considered.
15 Some parameters of the plots are hardcoded.
16 """
17 
18 import ROOT
19 
20 n_algos_in_flight_l = [1, 2, 5, 7, 10, 16, 20, 22]
21 n_evts_in_flight_l = [1, 2, 4, 6, 7, 8, 9, 11, 13, 14, 15]
22 colour_l = [
23  ROOT.kRed,
24  ROOT.kBlue,
25  ROOT.kOrange,
26  ROOT.kGreen,
27  ROOT.kMagenta,
28  ROOT.kCyan,
29 ] * 2
30 line_style_l = [1] * 6 + [2] * 6
31 cloneFlag_l = [True, False]
32 """
33 To be filled with files on disk of the form
34 timing_measurement_BrunelScenario_n150_eif2_aif20_nthreads24_cFalse_dqFalse.log
35 """
36 filename_scheleton = (
37  "timing_measurement_BrunelScenario_n150_eif%s_aif%s_nthreads24_c%s_dqFalse.log"
38 )
39 
40 
41 def getRuntime(n_algos_in_flight, n_evts_in_flight, cloneFlag):
42  filename = filename_scheleton % (n_evts_in_flight, n_algos_in_flight, cloneFlag)
43  print(filename)
44  rt = 0.0
45  for line in open(filename, "r").readlines():
46  rt = float(line[:-1])
47  # print filename
48  # print rt
49  return rt
50 
51 
52 """
53 Dictionary with
54 o Key = [n_algos_in_flight, n_evts_in_flight, cloneFlag]
55 o Val = Runtime
56 """
57 
58 
60  runtimes = {}
61  for n_algos_in_flight in n_algos_in_flight_l:
62  for n_evts_in_flight in n_evts_in_flight_l:
63  for cloneFlag in cloneFlag_l:
64  rt = getRuntime(n_algos_in_flight, n_evts_in_flight, cloneFlag)
65  runtimes[n_algos_in_flight, n_evts_in_flight, cloneFlag] = rt
66  return runtimes
67 
68 
69 def getGraphPoints(n_evts_in_flight, cloneFlag, runtimes):
70  points = []
71  for key, rt in runtimes.items():
72  this_n_algos_in_flight, this_n_evts_in_flight, this_cloneFlag = key
73  if this_n_evts_in_flight == n_evts_in_flight and this_cloneFlag == cloneFlag:
74  points.append((this_n_algos_in_flight, rt))
75  return sorted(points)
76 
77 
78 def getSingleGraph(n_evts_in_flight, cloneFlag, runtimes, colour, style):
79  points = getGraphPoints(n_evts_in_flight, cloneFlag, runtimes)
80  graph = ROOT.TGraph(len(points))
81  graph.GetXaxis().SetTitle("Maximum # in flight algos")
82  graph.GetXaxis().SetRangeUser(0, 23)
83  graph.GetYaxis().SetTitle("Runtime [s]")
84  graph.GetYaxis().SetTitleOffset(1.45)
85  graph.GetYaxis().SetRangeUser(0.1, 275)
86  graph.GetYaxis().SetNdivisions(12, 5, 1)
87  graph.SetLineWidth(3)
88  graph.SetLineColor(colour)
89  graph.SetMarkerColor(colour)
90  graph.SetLineStyle(style)
91  graph.SetFillColor(ROOT.kWhite)
92  point_n = 0
93  # print points
94  for x, y in points:
95  graph.SetPoint(point_n, x, y)
96  point_n += 1
97  return graph
98 
99 
100 def make_plot(runtimes, cloneFlag):
101  title = "Brunel 150 events"
102  clone_string = ""
103  if cloneFlag:
104  clone_string = "_clone"
105  title += " (Cloning)"
106  plotname = "runtime%s.pdf" % clone_string
107 
108  canvas = ROOT.TCanvas(plotname, "plot", 500, 400)
109  canvas.SetGrid()
110  canvas.cd()
111 
112  graphs = []
113  first = True
114  for colour, n_evts_in_flight, line_style in zip(
115  colour_l, n_evts_in_flight_l, line_style_l
116  ):
117  print(n_evts_in_flight)
118  graph = getSingleGraph(
119  n_evts_in_flight, cloneFlag, runtimes, colour, line_style
120  )
121  opts = "LSame"
122  if first:
123  opts = "AL"
124  first = False
125  graph.SetTitle(title)
126  graph.Draw(opts)
127  graphs.append(graph)
128 
129  # Make Legend
130  legend = ROOT.TLegend(0.499, 0.45, 0.9, 0.9, "# Parallel Events")
131  legend.SetTextSize(0.04)
132  legend.SetFillColor(ROOT.kWhite)
133  # evil
134  for graph, n in zip(graphs, n_evts_in_flight_l):
135  legend.AddEntry(graph, "%s" % n)
136  legend.Draw()
137 
138  # Add some text
139  l = ROOT.TLatex(0.13, 0.16, "#font[12]{#scale[.8]{24 Threads}}")
140  l.SetNDC()
141  l.Draw()
142 
143  input("Press enter to save...")
144  canvas.Print(plotname)
145 
146 
147 # -------------------------------------------------------------------------------
148 runtimes = getRuntimes()
149 
150 make_plot(runtimes, True)
151 
152 make_plot(runtimes, False)
plotSpeedup.getRuntime
def getRuntime(n_algos_in_flight, n_evts_in_flight, cloneFlag)
Definition: plotSpeedup.py:41
plotSpeedup.getSingleGraph
def getSingleGraph(n_evts_in_flight, cloneFlag, runtimes, colour, style)
Definition: plotSpeedup.py:78
plotSpeedup.make_plot
def make_plot(runtimes, cloneFlag)
Definition: plotSpeedup.py:100
plotSpeedup.getRuntimes
def getRuntimes()
Definition: plotSpeedup.py:59
plotSpeedup.getGraphPoints
def getGraphPoints(n_evts_in_flight, cloneFlag, runtimes)
Definition: plotSpeedup.py:69