Skip to content

Sequential scheduling of an algorithm set (native support)

Illya Shapoval requested to merge ishapova/Gaudi:scheduler-sequential into master

This MR brings support for sequential scheduling of so designated algorithm sets. In contrast to the existent AtomicSequencer, this is a natively supported feature of the (Avalanche) scheduler. This new mechanism is more powerful than the AtomicSequencer, as it yields greater concurrency, and thus greater intra-event throughput. In particular, the new mechanism has the following pros:

  1. it will make sure the in-sequence algorithms are scheduled ASAP, i.e., as soon as their individual input dependencies are satisfied (in contrast to "atomic" sequencing, with its cumulative input dependencies).
  2. likewise, an out-sequence algorithm, which is data-dependent on the in-sequence one(s), will also be scheduled earlier (unless it depends on the last in-sequence algorithm).
  3. it doesn't degrade load balancing (no "superalgorithms").

The highlights are:

  • in the graph of precedence rules, add explicit typing of a CF decision hub node as concurrent/sequential (before, it was always considered as concurrent);
  • in AthSequencer, add 'Sequential' flag to configure a CF decision hub accordingly (default value is False);
  • in GaudiSequencer - no changes, the corresponding CF decision hub will always be configured as concurrent, as before;
  • make the CF graph traversals respect the concurrent/sequential nature of a CF decision hub.

I also took this occasion to:

  • re-factor the bottom-up part of the CF graph traversal (recursive pattern -> graph visitor pattern);
  • make few terminology updates:
    • replace the notion of 'laziness', inherited historically from the GaudiSequencer, with a more accurate notion of 'prompt decision' (the change is internal to PrecedenceRulesGraph);
    • rename the root CF decision hub: "EVENT LOOP" -> "RootDecisionHub".

Merge request reports