|
def | __init__ (self, timeValue, BlockingBoolValue, sleepFraction, cfgPath, dfgPath, topSequencer, showStat=False, timeline=False, outputLevel=INFO, cardinality=1) |
|
def | get (self) |
|
Constructs the sequence tree of CPUCrunchers with provided control flow and data flow precedence rules.
Definition at line 165 of file precedence.py.
◆ __init__()
def GaudiHive.precedence.CruncherSequence.__init__ |
( |
|
self, |
|
|
|
timeValue, |
|
|
|
BlockingBoolValue, |
|
|
|
sleepFraction, |
|
|
|
cfgPath, |
|
|
|
dfgPath, |
|
|
|
topSequencer, |
|
|
|
showStat = False , |
|
|
|
timeline = False , |
|
|
|
outputLevel = INFO , |
|
|
|
cardinality = 1 |
|
) |
| |
Keyword arguments:
timeValue -- timeValue object to set algorithm execution time
BlockingBoolValue -- *BooleanValue object to set whether an algorithm has to experience CPU-blocking execution
cfgPath -- relative to $ENV_PROJECT_SOURCE_DIR/GaudiHive/data path to GRAPHML file with control flow dependencies
dfgPath -- relative to $ENV_PROJECT_SOURCE_DIR/GaudiHive/data path to GRAPHML file with data flow dependencies
showStat -- print out statistics on precedence graph
Definition at line 176 of file precedence.py.
191 timeValue -- timeValue object to set algorithm execution time
192 BlockingBoolValue -- *BooleanValue object to set whether an algorithm has to experience CPU-blocking execution
193 cfgPath -- relative to $ENV_PROJECT_SOURCE_DIR/GaudiHive/data path to GRAPHML file with control flow dependencies
194 dfgPath -- relative to $ENV_PROJECT_SOURCE_DIR/GaudiHive/data path to GRAPHML file with data flow dependencies
195 showStat -- print out statistics on precedence graph
198 self.cardinality = cardinality
199 self.timeValue = timeValue
200 self.BlockingBoolValue = BlockingBoolValue
201 self.sleepFraction = sleepFraction
206 self.enableTimeline = timeline
208 self.outputLevel = outputLevel
211 self.sequencer = self._generate_sequence(topSequencer)
214 print(
"\n===== Statistics on Algorithms =====")
216 "Total number of algorithm nodes: ",
217 len(self.unique_algos)
218 + sum([self.dupl_algos[i] - 1
for i
in self.dupl_algos]),
220 print(
"Number of unique algorithms: ", len(self.unique_algos))
223 len(self.dupl_algos),
224 "of them being re-used with the following distribution: ",
225 [self.dupl_algos[i]
for i
in self.dupl_algos],
229 print(
"\n===== Statistics on Sequencers =====")
231 "Total number of sequencers: ",
232 len(self.unique_sequencers)
233 + sum([self.dupl_seqs[i] - 1
for i
in self.dupl_seqs]),
235 print(
"Number of unique sequencers: ", len(self.unique_sequencers))
239 "of them being re-used with the following distribution: ",
240 [self.dupl_seqs[i]
for i
in self.dupl_seqs],
243 print(
"Number of OR-sequencers: ", len(self.OR_sequencers))
245 print(
"\n===== Statistics on DataObjects =====")
246 print(
"Number of unique DataObjects: ", len(self.unique_data_objects))
◆ _declare_data_deps()
def GaudiHive.precedence.CruncherSequence._declare_data_deps |
( |
|
self, |
|
|
|
algo_name, |
|
|
|
algo |
|
) |
| |
|
private |
Declare data inputs and outputs for a given algorithm.
Definition at line 253 of file precedence.py.
253 def _declare_data_deps(self, algo_name, algo):
254 """Declare data inputs and outputs for a given algorithm."""
257 for inNode, outNode
in self.dfg.in_edges(algo_name):
259 if dataName
not in self.unique_data_objects:
260 self.unique_data_objects.append(dataName)
262 if dataName
not in algo.inpKeys:
263 algo.inpKeys.append(dataName)
266 for inNode, outNode
in self.dfg.out_edges(algo_name):
268 if dataName
not in self.unique_data_objects:
269 self.unique_data_objects.append(dataName)
271 if dataName
not in algo.outKeys:
272 algo.outKeys.append(dataName)
◆ _generate_sequence()
def GaudiHive.precedence.CruncherSequence._generate_sequence |
( |
|
self, |
|
|
|
name, |
|
|
|
seq = None |
|
) |
| |
|
private |
Assemble the tree of sequencers.
Definition at line 274 of file precedence.py.
274 def _generate_sequence(self, name, seq=None):
275 """Assemble the tree of sequencers."""
278 seq = Gaudi__Sequencer(name, ShortCircuit=
False)
280 for n
in self.cfg[name]:
282 algo_name = n.split(
"/")[1]
if "/" in n
else n
284 if "type" in self.cfg.nodes[n]:
286 algo_type = self.cfg.nodes[n].
get(
"type")
290 algo_type = n.split(
"/")[0]
if "/" in n
else "Algorithm"
292 if algo_type
in [
"GaudiSequencer",
"AthSequencer",
"ProcessPhase"]:
293 if algo_name
in [
"RecoITSeq",
"RecoOTSeq",
"RecoTTSeq"]:
296 if n
not in self.unique_sequencers:
297 self.unique_sequencers.append(n)
299 if n
not in self.dupl_seqs:
300 self.dupl_seqs[n] = 2
302 self.dupl_seqs[n] += 1
304 seq_daughter = Gaudi__Sequencer(algo_name, OutputLevel=INFO)
305 if self.cfg.nodes[n].
get(
"ModeOR") ==
"True":
306 self.OR_sequencers.append(n)
307 seq_daughter.ModeOR =
True
310 seq_daughter.ShortCircuit =
False
311 if seq_daughter
not in seq.Members:
312 seq.Members += [seq_daughter]
314 self._generate_sequence(n, seq_daughter)
318 if n
not in self.unique_algos:
319 self.unique_algos.append(n)
321 if n
not in self.dupl_algos:
322 self.dupl_algos[n] = 2
324 self.dupl_algos[n] += 1
326 avgRuntime, varRuntime = self.timeValue.
get(algo_name)
330 Cardinality=self.cardinality,
331 OutputLevel=self.outputLevel,
332 varRuntime=varRuntime,
333 avgRuntime=avgRuntime,
334 SleepFraction=self.sleepFraction
335 if self.BlockingBoolValue.
get()
337 Timeline=self.enableTimeline,
340 self._declare_data_deps(algo_name, algo_daughter)
342 if algo_daughter
not in seq.Members:
343 seq.Members += [algo_daughter]
◆ get()
def GaudiHive.precedence.CruncherSequence.get |
( |
|
self | ) |
|
◆ BlockingBoolValue
GaudiHive.precedence.CruncherSequence.BlockingBoolValue |
◆ cardinality
GaudiHive.precedence.CruncherSequence.cardinality |
◆ cfg
GaudiHive.precedence.CruncherSequence.cfg |
◆ dfg
GaudiHive.precedence.CruncherSequence.dfg |
◆ dupl_algos
GaudiHive.precedence.CruncherSequence.dupl_algos |
|
static |
◆ dupl_seqs
GaudiHive.precedence.CruncherSequence.dupl_seqs |
|
static |
◆ enableTimeline
GaudiHive.precedence.CruncherSequence.enableTimeline |
◆ OR_sequencers
GaudiHive.precedence.CruncherSequence.OR_sequencers |
|
static |
◆ outputLevel
GaudiHive.precedence.CruncherSequence.outputLevel |
◆ sequencer
GaudiHive.precedence.CruncherSequence.sequencer |
◆ sleepFraction
GaudiHive.precedence.CruncherSequence.sleepFraction |
◆ timeValue
GaudiHive.precedence.CruncherSequence.timeValue |
◆ unique_algos
GaudiHive.precedence.CruncherSequence.unique_algos |
|
static |
◆ unique_data_objects
GaudiHive.precedence.CruncherSequence.unique_data_objects |
|
static |
◆ unique_sequencers
GaudiHive.precedence.CruncherSequence.unique_sequencers |
|
static |
The documentation for this class was generated from the following file: