The Gaudi Framework  master (1304469f)
Loading...
Searching...
No Matches
brunelWrapper.py
Go to the documentation of this file.
1#! /usr/bin/env python3
2
12"""
13This script acts as a wrapper in order to generate Gaudi configs for running
14with different parameters in order to perform performance measurements.
15It takes command line arguments.
16"""
17
18import optparse
19
20"""
21NumberOfEvents = 10
22NumberOfEventsInFlight = 5
23NumberOfAlgosInFlight = 5
24NumberOfThreads = 10
25CloneAlgos = False
26DumpQueues = False
27"""
28
29
31 usage = "%prog [options]"
32 parser = optparse.OptionParser(usage)
33 parser.add_option("-n", help="Number of events", dest="nevts", default=15)
34 parser.add_option("--eif", help="Events in flight", dest="eif", default=5)
35 parser.add_option("--aif", help="Algos in flight", dest="aif", default=10)
36 parser.add_option(
37 "--nthreads", help="Number of threads", dest="nthreads", default=10
38 )
39 parser.add_option(
40 "--clone", help="Clone Algos", dest="clone", action="store_true", default=False
41 )
42 parser.add_option(
43 "--dumpQueues",
44 help="Dump Queues",
45 dest="dumpqueues",
46 action="store_true",
47 default=False,
48 )
49 parser.add_option("-v", help="Verbosity level", dest="verbosity", default=5)
50 parser.add_option(
51 "--exec",
52 help="ExecuteWorkflow",
53 dest="execbrunel",
54 action="store_true",
55 default=False,
56 )
57 parser.add_option(
58 "--bg",
59 help="Launch in background",
60 dest="bg",
61 action="store_true",
62 default=False,
63 )
64 parser.add_option("--scale", help="Scale Algorithms time", dest="scale", default=1)
65 options, args = parser.parse_args()
66 return options
67
68
69def replaceValues(cfg_name, n, eif, aif, nthreads, scale, clone, dumpQueues, verbosity):
70 newcfglines = open(cfg_name, "r").readlines()
71 cfg_name = cfg_name.replace(".py", "")
72 verb = ""
73 if verbosity != 6:
74 verb = "_v%s" % verbosity
75 scale_s = ""
76 if scale != 1:
77 scale_s = "_s%s" % scale
78 newcfgname = "measurement_%s_n%s_eif%s_aif%s_nthreads%s_c%s_dq%s%s%s.py" % (
79 cfg_name,
80 n,
81 eif,
82 aif,
83 nthreads,
84 clone,
85 dumpQueues,
86 scale_s,
87 verb,
88 )
89 newcfg = open(newcfgname, "w")
90 for line in newcfglines:
91 if (
92 "NumberOfEvents" in line
93 and "NUMBEROFEVENTS" in line
94 and "FLIGHT" not in line
95 ):
96 line = line.replace("NUMBEROFEVENTS", str(n))
97 if "NumberOfEventsInFlight" in line and "NUMBEROFEVENTSINFLIGHT" in line:
98 line = line.replace("NUMBEROFEVENTSINFLIGHT", str(eif))
99 if "NumberOfAlgosInFlight" in line and "NUMBEROFALGOSINFLIGHT" in line:
100 line = line.replace("NUMBEROFALGOSINFLIGHT", str(aif))
101 if "NumberOfThreads" in line and "NUMBEROFTHREADS" in line:
102 line = line.replace("NUMBEROFTHREADS", str(nthreads))
103 if "DumpQueues" in line and "DUMPQUEUES" in line:
104 line = line.replace("DUMPQUEUES", str(dumpQueues))
105 if "CloneAlgos" in line and "CLONEALGOS" in line:
106 line = line.replace("CLONEALGOS", str(clone))
107 if "Verbosity" in line and "VERBOSITY" in line:
108 line = line.replace("VERBOSITY", str(verbosity))
109 if "Scale" in line and "SCALE" in line:
110 line = line.replace("SCALE", str(scale))
111 newcfg.write(line)
112 newcfg.close()
113 return newcfgname
114
115
116if __name__ == "__main__":
117 options = createParser()
119 "BrunelScenario.py",
120 options.nevts,
121 options.eif,
122 options.aif,
123 options.nthreads,
124 float(options.scale),
125 options.clone,
126 options.dumpqueues,
127 options.verbosity,
128 )
129
130 logfile = newcfg.replace(".py", ".log")
131 gaudirun = "`alias gaudirun`"
132 gaudirun = (
133 "/afs/cern.ch/user/d/dpiparo/Gaudi/build.x86_64-slc5-gcc46-opt/run gaudirun.py"
134 )
135 command = "/usr/bin/time -f %%S -o timing_%s %s %s >& %s " % (
136 logfile,
137 gaudirun,
138 newcfg,
139 logfile,
140 )
141 if options.bg:
142 command += " &"
143
144 print(command)
145 if options.execbrunel:
146 import os
147
148 os.system(command)
replaceValues(cfg_name, n, eif, aif, nthreads, scale, clone, dumpQueues, verbosity)