The Gaudi Framework
v29r0 (ff2e7097)
|
#include <src/AvalancheSchedulerSvc.h>
Classes | |
struct | enqueueSchedulerActionTask |
class | SchedulerState |
Public Member Functions | |
~AvalancheSchedulerSvc () override=default | |
Destructor. More... | |
StatusCode | initialize () override |
Initialise. More... | |
StatusCode | finalize () override |
Finalise. More... | |
StatusCode | pushNewEvent (EventContext *eventContext) override |
Make an event available to the scheduler. More... | |
StatusCode | pushNewEvents (std::vector< EventContext * > &eventContexts) override |
StatusCode | popFinishedEvent (EventContext *&eventContext) override |
Blocks until an event is availble. More... | |
StatusCode | tryPopFinishedEvent (EventContext *&eventContext) override |
Try to fetch an event from the scheduler. More... | |
unsigned int | freeSlots () override |
Get free slots number. More... | |
void | addAlg (Algorithm *, EventContext *, pthread_t) |
bool | delAlg (Algorithm *) |
void | dumpState () override |
Public Member Functions inherited from extends< Service, IScheduler > | |
void * | i_cast (const InterfaceID &tid) const override |
Implementation of IInterface::i_cast. More... | |
StatusCode | queryInterface (const InterfaceID &ti, void **pp) override |
Implementation of IInterface::queryInterface. More... | |
std::vector< std::string > | getInterfaceNames () const override |
Implementation of IInterface::getInterfaceNames. More... | |
~extends () override=default | |
Virtual destructor. More... | |
Public Member Functions inherited from Service | |
const std::string & | name () const override |
Retrieve name of the service. More... | |
StatusCode | configure () override |
StatusCode | initialize () override |
StatusCode | start () override |
StatusCode | stop () override |
StatusCode | finalize () override |
StatusCode | terminate () override |
Gaudi::StateMachine::State | FSMState () const override |
Gaudi::StateMachine::State | targetFSMState () const override |
StatusCode | reinitialize () override |
StatusCode | restart () override |
StatusCode | sysInitialize () override |
Initialize Service. More... | |
StatusCode | sysStart () override |
Initialize Service. More... | |
StatusCode | sysStop () override |
Initialize Service. More... | |
StatusCode | sysFinalize () override |
Finalize Service. More... | |
StatusCode | sysReinitialize () override |
Re-initialize the Service. More... | |
StatusCode | sysRestart () override |
Re-initialize the Service. More... | |
Service (std::string name, ISvcLocator *svcloc) | |
Standard Constructor. More... | |
SmartIF< ISvcLocator > & | serviceLocator () const override |
Retrieve pointer to service locator. More... | |
StatusCode | setProperties () |
Method for setting declared properties to the values specified for the job. More... | |
template<class T > | |
StatusCode | service (const std::string &name, const T *&psvc, bool createIf=true) const |
Access a service by name, creating it if it doesn't already exist. More... | |
template<class T > | |
StatusCode | service (const std::string &name, T *&psvc, bool createIf=true) const |
template<typename IFace = IService> | |
SmartIF< IFace > | service (const std::string &name, bool createIf=true) const |
template<class T > | |
StatusCode | service (const std::string &svcType, const std::string &svcName, T *&psvc) const |
Access a service by name and type, creating it if it doesn't already exist. More... | |
template<class T > | |
StatusCode | declareTool (ToolHandle< T > &handle, std::string toolTypeAndName, bool createIf=true) |
Declare used tool. More... | |
SmartIF< IAuditorSvc > & | auditorSvc () const |
The standard auditor service.May not be invoked before sysInitialize() has been invoked. More... | |
Public Member Functions inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > > | |
PropertyHolder ()=default | |
~PropertyHolder () override=default | |
Gaudi::Details::PropertyBase & | declareProperty (Gaudi::Details::PropertyBase &prop) |
Declare a property. More... | |
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, TYPE &value, const std::string &doc="none") |
Helper to wrap a regular data member and use it as a regular property. More... | |
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, TYPE &value, const std::string &doc="none") const |
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, Gaudi::Property< TYPE, VERIFIER, HANDLERS > &prop, const std::string &doc="none") |
Declare a PropertyBase instance setting name and documentation. More... | |
Gaudi::Details::PropertyBase * | declareRemoteProperty (const std::string &name, IProperty *rsvc, const std::string &rname="") |
Declare a remote property. More... | |
StatusCode | setProperty (const Gaudi::Details::PropertyBase &p) override |
set the property form another property More... | |
StatusCode | setProperty (const std::string &s) override |
set the property from the formatted string More... | |
StatusCode | setProperty (const std::string &n, const std::string &v) override |
set the property from name and the value More... | |
StatusCode | setProperty (const std::string &name, const TYPE &value) |
set the property form the value More... | |
StatusCode | getProperty (Gaudi::Details::PropertyBase *p) const override |
get the property More... | |
const Gaudi::Details::PropertyBase & | getProperty (const std::string &name) const override |
get the property by name More... | |
StatusCode | getProperty (const std::string &n, std::string &v) const override |
convert the property to the string More... | |
const std::vector< Gaudi::Details::PropertyBase * > & | getProperties () const override |
get all properties More... | |
bool | hasProperty (const std::string &name) const override |
Return true if we have a property with the given name. More... | |
PropertyHolder (const PropertyHolder &)=delete | |
PropertyHolder & | operator= (const PropertyHolder &)=delete |
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, GaudiHandleBase &ref, const std::string &doc="none") |
Specializations for various GaudiHandles. More... | |
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, GaudiHandleArrayBase &ref, const std::string &doc="none") |
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, DataObjectHandleBase &ref, const std::string &doc="none") |
Public Member Functions inherited from CommonMessagingBase | |
virtual | ~CommonMessagingBase ()=default |
Virtual destructor. More... | |
SmartIF< IMessageSvc > & | msgSvc () const |
The standard message service. More... | |
MsgStream & | msgStream () const |
Return an uninitialized MsgStream. More... | |
MsgStream & | msgStream (const MSG::Level level) const |
Predefined configurable message stream for the efficient printouts. More... | |
MsgStream & | always () const |
shortcut for the method msgStream(MSG::ALWAYS) More... | |
MsgStream & | fatal () const |
shortcut for the method msgStream(MSG::FATAL) More... | |
MsgStream & | err () const |
shortcut for the method msgStream(MSG::ERROR) More... | |
MsgStream & | error () const |
shortcut for the method msgStream(MSG::ERROR) More... | |
MsgStream & | warning () const |
shortcut for the method msgStream(MSG::WARNING) More... | |
MsgStream & | info () const |
shortcut for the method msgStream(MSG::INFO) More... | |
MsgStream & | debug () const |
shortcut for the method msgStream(MSG::DEBUG) More... | |
MsgStream & | verbose () const |
shortcut for the method msgStream(MSG::VERBOSE) More... | |
MsgStream & | msg () const |
shortcut for the method msgStream(MSG::INFO) More... | |
MSG::Level | msgLevel () const |
get the output level from the embedded MsgStream More... | |
MSG::Level | outputLevel () const __attribute__((deprecated)) |
Backward compatibility function for getting the output level. More... | |
bool | msgLevel (MSG::Level lvl) const |
get the output level from the embedded MsgStream More... | |
Public Member Functions inherited from extend_interfaces< Interfaces... > | |
~extend_interfaces () override=default | |
Virtual destructor. More... | |
Private Types | |
enum | ActivationState { INACTIVE = 0, ACTIVE = 1, FAILURE = 2 } |
Private Member Functions | |
void | activate () |
Activate scheduler. More... | |
StatusCode | deactivate () |
Deactivate scheduler. More... | |
unsigned int | algname2index (const std::string &algoname) |
Convert a name to an integer. More... | |
const std::string & | index2algname (unsigned int index) |
Convert an integer to a name. More... | |
StatusCode | eventFailed (EventContext *eventContext) |
Method to check if an event failed and take appropriate actions. More... | |
StatusCode | updateStates (int si=-1, const std::string &algo_name=std::string()) |
Loop on algorithm in the slots and promote them to successive states (-1 means all slots, while empty string means skipping an update of the Control Flow state) More... | |
StatusCode | promoteToScheduled (unsigned int iAlgo, int si) |
Algorithm promotion. More... | |
StatusCode | promoteToAsyncScheduled (unsigned int iAlgo, int si) |
StatusCode | promoteToExecuted (unsigned int iAlgo, int si, IAlgorithm *algo, EventContext *) |
The call to this method is triggered only from within the AlgoExecutionTask. More... | |
StatusCode | promoteToAsyncExecuted (unsigned int iAlgo, int si, IAlgorithm *algo, EventContext *) |
The call to this method is triggered only from within the IOBoundAlgTask. More... | |
StatusCode | promoteToFinished (unsigned int iAlgo, int si) |
StatusCode | isStalled (int si) |
Check if the scheduling is in a stall. More... | |
void | dumpSchedulerState (int iSlot) |
Dump the state of the scheduler. More... | |
StatusCode | m_drain () |
Drain the actions present in the queue. More... | |
void | dumpState (std::ostringstream &) |
Private Attributes | |
Gaudi::Property< int > | m_threadPoolSize |
Gaudi::Property< std::string > | m_whiteboardSvcName {this, "WhiteboardSvc", "EventDataSvc", "The whiteboard name"} |
Gaudi::Property< std::string > | m_IOBoundAlgSchedulerSvcName {this, "IOBoundAlgSchedulerSvc", "IOBoundAlgSchedulerSvc"} |
Gaudi::Property< unsigned int > | m_maxIOBoundAlgosInFlight |
Gaudi::Property< bool > | m_simulateExecution |
Gaudi::Property< std::string > | m_optimizationMode |
Gaudi::Property< bool > | m_dumpIntraEventDynamics |
Gaudi::Property< bool > | m_useIOBoundAlgScheduler |
Gaudi::Property< bool > | m_checkDeps {this, "CheckDependencies", false, "Runtime check of Algorithm Data Dependencies"} |
Gaudi::Property< std::string > | m_useDataLoader |
Gaudi::Property< bool > | m_enableCondSvc {this, "EnableConditions", false, "Enable ConditionsSvc"} |
Gaudi::Property< bool > | m_showDataDeps |
Gaudi::Property< bool > | m_showDataFlow |
Gaudi::Property< bool > | m_showControlFlow |
std::atomic< ActivationState > | m_isActive {INACTIVE} |
Flag to track if the scheduler is active or not. More... | |
std::thread | m_thread |
The thread in which the activate function runs. More... | |
std::unordered_map< std::string, unsigned int > | m_algname_index_map |
Map to bookkeep the information necessary to the name2index conversion. More... | |
std::vector< std::string > | m_algname_vect |
Vector to bookkeep the information necessary to the index2name conversion. More... | |
SmartIF< IPrecedenceSvc > | m_precSvc |
A shortcut to the Precedence Service. More... | |
SmartIF< IHiveWhiteBoard > | m_whiteboard |
A shortcut to the whiteboard. More... | |
SmartIF< IAccelerator > | m_IOBoundAlgScheduler |
A shortcut to IO-bound algorithm scheduler. More... | |
std::vector< EventSlot > | m_eventSlots |
Vector of events slots. More... | |
std::atomic_int | m_freeSlots |
Atomic to account for asyncronous updates by the scheduler wrt the rest. More... | |
tbb::concurrent_bounded_queue< EventContext * > | m_finishedEvents |
Queue of finished events. More... | |
SmartIF< IAlgExecStateSvc > | m_algExecStateSvc |
Algorithm execution state manager. More... | |
SmartIF< ICondSvc > | m_condSvc |
A shortcut to service for Conditions handling. More... | |
unsigned int | m_algosInFlight = 0 |
Number of algoritms presently in flight. More... | |
unsigned int | m_IOBoundAlgosInFlight = 0 |
Number of algoritms presently in flight. More... | |
bool | m_updateNeeded = true |
Keep track of update actions scheduled. More... | |
SmartIF< IAlgResourcePool > | m_algResourcePool |
Cache for the algorithm resource pool. More... | |
tbb::concurrent_bounded_queue< action > | m_actionsQueue |
Queue where closures are stored and picked for execution. More... | |
SmartIF< IThreadPoolSvc > | m_threadPoolSvc |
size_t | m_maxEventsInFlight {0} |
size_t | m_maxAlgosInFlight {1} |
bool | m_first = true |
Static Private Attributes | |
static std::list< SchedulerState > | m_sState |
static std::mutex | m_ssMut |
Additional Inherited Members | |
Public Types inherited from extends< Service, IScheduler > | |
using | base_class = extends |
Typedef to this class. More... | |
using | extend_interfaces_base = extend_interfaces< Interfaces... > |
Typedef to the base of this class. More... | |
Public Types inherited from Service | |
typedef Gaudi::PluginService::Factory< IService *, const std::string &, ISvcLocator * > | Factory |
Public Types inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > > | |
using | PropertyHolderImpl = PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > > |
Typedef used to refer to this class from derived classes, as in. More... | |
Public Types inherited from CommonMessaging< implements< IService, IProperty, IStateful > > | |
using | base_class = CommonMessaging |
Public Types inherited from extend_interfaces< Interfaces... > | |
using | ext_iids = typename Gaudi::interface_list_cat< typename Interfaces::ext_iids... >::type |
take union of the ext_iids of all Interfaces... More... | |
Protected Member Functions inherited from Service | |
~Service () override | |
Standard Destructor. More... | |
int | outputLevel () const |
get the Service's output level More... | |
Protected Member Functions inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > > | |
Gaudi::Details::PropertyBase * | property (const std::string &name) const |
Protected Member Functions inherited from CommonMessaging< implements< IService, IProperty, IStateful > > | |
void | updateMsgStreamOutputLevel (int level) |
Update the output level of the cached MsgStream. More... | |
Protected Attributes inherited from Service | |
Gaudi::StateMachine::State | m_state = Gaudi::StateMachine::OFFLINE |
Service state. More... | |
Gaudi::StateMachine::State | m_targetState = Gaudi::StateMachine::OFFLINE |
Service state. More... | |
Gaudi::Property< int > | m_outputLevel {this, "OutputLevel", MSG::NIL, "output level"} |
Gaudi::Property< bool > | m_auditInit {this, "AuditServices", false, "[[deprecated]] unused"} |
Gaudi::Property< bool > | m_auditorInitialize {this, "AuditInitialize", false, "trigger auditor on initialize()"} |
Gaudi::Property< bool > | m_auditorStart {this, "AuditStart", false, "trigger auditor on start()"} |
Gaudi::Property< bool > | m_auditorStop {this, "AuditStop", false, "trigger auditor on stop()"} |
Gaudi::Property< bool > | m_auditorFinalize {this, "AuditFinalize", false, "trigger auditor on finalize()"} |
Gaudi::Property< bool > | m_auditorReinitialize {this, "AuditReinitialize", false, "trigger auditor on reinitialize()"} |
Gaudi::Property< bool > | m_auditorRestart {this, "AuditRestart", false, "trigger auditor on restart()"} |
SmartIF< IAuditorSvc > | m_pAuditorSvc |
Auditor Service. More... | |
The scheduler is named after its ability to generically maximize the average intra-event task occupancy by inducing avalanche-like concurrency disclosure waves in conditions of arbitrary intra-event task precedence constraints (see section 3.2 of http://cern.ch/go/7Jn7).
The scheduler is driven by graph-based task precedence management. When compared to approach used in the ForwardSchedulerSvc, the following advantages can be emphasized:
(1) Faster decision making (thus lower concurrency disclosure downtime); (2) Capacity for proactive task scheduling decision making.
Point (2) allowed to implement a number of generic, non-intrusive intra-event throughput maximization scheduling strategies.
o Task scheduling prerequisites
A task is scheduled ASA all following conditions are met:
o (*) Avalanche induction strategies
The scheduler is able to maximize the intra-event throughput by applying several search strategies within the pool, prioritizing tasks according to the following types of precedence rules graph asymmetries:
(A) Local task-to-data asymmetry; (B) Local task-to-task asymmetry; (C) Global task-to-task asymmetry.
o Other mechanisms of throughput maximization
The scheduler is able to maximize the overall throughput of data processing by scheduling the CPU-blocking tasks efficiently. The mechanism can be applied to the following types of tasks:
Historically, the AvalancheSchedulerSvc branched off the ForwardSchedulerSvc and in many ways built its success on ideas and code of the latter.
Definition at line 102 of file AvalancheSchedulerSvc.h.
|
private |
|
overridedefault |
Destructor.
|
private |
Activate scheduler.
Activate the scheduler.
From this moment on the queue of actions is checked. The checking will stop when the m_isActive flag is false and the queue is not empty. This will guarantee that all actions are executed and a stall is not created. The TBB pool must be initialised in the thread from where the tasks are launched (http://threadingbuildingblocks.org/docs/doxygen/a00342.html) The scheduler is initialised here since this method runs in a separate thread and spawns the tasks (through the execution of the lambdas)
Definition at line 363 of file AvalancheSchedulerSvc.cpp.
void AvalancheSchedulerSvc::addAlg | ( | Algorithm * | a, |
EventContext * | e, | ||
pthread_t | t | ||
) |
Definition at line 1100 of file AvalancheSchedulerSvc.cpp.
|
inlineprivate |
Convert a name to an integer.
Definition at line 431 of file AvalancheSchedulerSvc.cpp.
|
private |
Deactivate scheduler.
Deactivates the scheduler.
Two actions are pushed into the queue: 1) Drain the scheduler until all events are finished. 2) Flip the status flag m_isActive to false This second action is the last one to be executed by the scheduler.
Definition at line 406 of file AvalancheSchedulerSvc.cpp.
bool AvalancheSchedulerSvc::delAlg | ( | Algorithm * | a | ) |
Definition at line 1108 of file AvalancheSchedulerSvc.cpp.
|
private |
Dump the state of the scheduler.
Used for debugging purposes, the state of the scheduler is dumped on screen in order to be inspected.
The dependencies of each algo are printed and the missing ones specified.
Definition at line 809 of file AvalancheSchedulerSvc.cpp.
|
override |
Definition at line 1136 of file AvalancheSchedulerSvc.cpp.
|
private |
Definition at line 1125 of file AvalancheSchedulerSvc.cpp.
|
private |
Method to check if an event failed and take appropriate actions.
It can be possible that an event fails.
In this case this method is called. It dumps the state of the scheduler, drains the actions (without executing them) and events in the queues and returns a failure.
Definition at line 569 of file AvalancheSchedulerSvc.cpp.
|
override |
Finalise.
Here the scheduler is deactivated and the thread joined.
Definition at line 332 of file AvalancheSchedulerSvc.cpp.
|
override |
Get free slots number.
Definition at line 506 of file AvalancheSchedulerSvc.cpp.
|
inlineprivate |
Convert an integer to a name.
Definition at line 427 of file AvalancheSchedulerSvc.cpp.
|
override |
Initialise.
Here, among some "bureaucracy" operations, the scheduler is activated, executing the activate() function in a new thread.
In addition the algorithms list is acquired from the algResourcePool.
Definition at line 61 of file AvalancheSchedulerSvc.cpp.
|
private |
Check if the scheduling is in a stall.
Check if we are in present of a stall condition for a particular slot.
This is the case when no actions are present in the actionsQueue, no algorithm is in flight and no algorithm has all of its dependencies satisfied.
Definition at line 784 of file AvalancheSchedulerSvc.cpp.
|
private |
Drain the actions present in the queue.
Update the states for all slots until nothing is left to do.
Definition at line 512 of file AvalancheSchedulerSvc.cpp.
|
override |
Blocks until an event is availble.
Get a finished event or block until one becomes available.
Definition at line 529 of file AvalancheSchedulerSvc.cpp.
|
private |
The call to this method is triggered only from within the IOBoundAlgTask.
Definition at line 1047 of file AvalancheSchedulerSvc.cpp.
|
private |
Definition at line 943 of file AvalancheSchedulerSvc.cpp.
|
private |
The call to this method is triggered only from within the AlgoExecutionTask.
Definition at line 991 of file AvalancheSchedulerSvc.cpp.
|
private |
|
private |
Algorithm promotion.
Definition at line 881 of file AvalancheSchedulerSvc.cpp.
|
override |
Make an event available to the scheduler.
Add event to the scheduler.
There are two cases possible: 1) No slot is free. A StatusCode::FAILURE is returned. 2) At least one slot is free. An action which resets the slot and kicks off its update is queued.
Definition at line 445 of file AvalancheSchedulerSvc.cpp.
|
override |
Definition at line 495 of file AvalancheSchedulerSvc.cpp.
|
override |
Try to fetch an event from the scheduler.
Try to get a finished event, if not available just return a failure.
Definition at line 551 of file AvalancheSchedulerSvc.cpp.
|
private |
Loop on algorithm in the slots and promote them to successive states (-1 means all slots, while empty string means skipping an update of the Control Flow state)
Update the state of the algorithms.
The oldest events are checked before the newest, in order to reduce the event backlog. To check if the event is finished the algorithm checks if:
Definition at line 614 of file AvalancheSchedulerSvc.cpp.
|
private |
Queue where closures are stored and picked for execution.
Definition at line 260 of file AvalancheSchedulerSvc.h.
|
private |
Algorithm execution state manager.
Definition at line 216 of file AvalancheSchedulerSvc.h.
|
private |
Map to bookkeep the information necessary to the name2index conversion.
Definition at line 186 of file AvalancheSchedulerSvc.h.
|
private |
Vector to bookkeep the information necessary to the index2name conversion.
Definition at line 192 of file AvalancheSchedulerSvc.h.
|
private |
Number of algoritms presently in flight.
Definition at line 224 of file AvalancheSchedulerSvc.h.
|
private |
Cache for the algorithm resource pool.
Definition at line 252 of file AvalancheSchedulerSvc.h.
|
private |
Definition at line 152 of file AvalancheSchedulerSvc.h.
A shortcut to service for Conditions handling.
Definition at line 219 of file AvalancheSchedulerSvc.h.
|
private |
Definition at line 147 of file AvalancheSchedulerSvc.h.
|
private |
Definition at line 157 of file AvalancheSchedulerSvc.h.
|
private |
Vector of events slots.
Definition at line 204 of file AvalancheSchedulerSvc.h.
|
private |
Queue of finished events.
Definition at line 210 of file AvalancheSchedulerSvc.h.
|
private |
Definition at line 286 of file AvalancheSchedulerSvc.h.
|
private |
Atomic to account for asyncronous updates by the scheduler wrt the rest.
Definition at line 207 of file AvalancheSchedulerSvc.h.
|
private |
Number of algoritms presently in flight.
Definition at line 227 of file AvalancheSchedulerSvc.h.
|
private |
A shortcut to IO-bound algorithm scheduler.
Definition at line 201 of file AvalancheSchedulerSvc.h.
|
private |
Definition at line 139 of file AvalancheSchedulerSvc.h.
|
private |
Flag to track if the scheduler is active or not.
Definition at line 177 of file AvalancheSchedulerSvc.h.
|
private |
Definition at line 285 of file AvalancheSchedulerSvc.h.
|
private |
Definition at line 284 of file AvalancheSchedulerSvc.h.
|
private |
Definition at line 140 of file AvalancheSchedulerSvc.h.
|
private |
Definition at line 145 of file AvalancheSchedulerSvc.h.
|
private |
A shortcut to the Precedence Service.
Definition at line 195 of file AvalancheSchedulerSvc.h.
|
private |
Definition at line 165 of file AvalancheSchedulerSvc.h.
|
private |
Definition at line 159 of file AvalancheSchedulerSvc.h.
|
private |
Definition at line 162 of file AvalancheSchedulerSvc.h.
|
private |
Definition at line 142 of file AvalancheSchedulerSvc.h.
|
staticprivate |
Definition at line 318 of file AvalancheSchedulerSvc.h.
|
staticprivate |
Definition at line 317 of file AvalancheSchedulerSvc.h.
|
private |
The thread in which the activate function runs.
Definition at line 180 of file AvalancheSchedulerSvc.h.
|
private |
Definition at line 135 of file AvalancheSchedulerSvc.h.
|
private |
Definition at line 283 of file AvalancheSchedulerSvc.h.
|
private |
Keep track of update actions scheduled.
Definition at line 248 of file AvalancheSchedulerSvc.h.
|
private |
Definition at line 154 of file AvalancheSchedulerSvc.h.
|
private |
Definition at line 149 of file AvalancheSchedulerSvc.h.
|
private |
A shortcut to the whiteboard.
Definition at line 198 of file AvalancheSchedulerSvc.h.
|
private |
Definition at line 138 of file AvalancheSchedulerSvc.h.