Skip to content

Sequential scheduling of an algorithm set (native support)

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

Loading