| 
| 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: