| The Gaudi Framework v29r1 (5cd95fa2)

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- Class List
- Class Index
- Class Hierarchy
- Class Members

Public Member Functions | Private Member Functions | Private Attributes | List of all members
PrecedenceSvc Class Reference

A service to resolve the task execution precedence. More...

`#include <GaudiHive/PrecedenceSvc.h>`

Inheritance diagram for PrecedenceSvc:
[legend]
Collaboration diagram for PrecedenceSvc:
[legend]

## Public Member Functions
| PrecedenceSvc (const std::string &name, ISvcLocator *svc)
| Constructor. More...
| ~PrecedenceSvc ()=default
| Destructor. More...
StatusCode | initialize () override
| Initialize. More...
StatusCode | finalize () override
| Finalize. More...
StatusCode | iterate (EventSlot &, const Cause &) override
| Infer the precedence effect caused by an execution flow event. More...
StatusCode | simulate (EventSlot &) const override
| Simulate execution flow. More...
bool | CFRulesResolved (EventSlot &) const override
| Check if the root CF decision is resolved. More...
uint | getPriority (const std::string &name) const override
| Get priority of an algorithm. More...
bool | isBlocking (const std::string &name) const override
| Check if a task is CPU-blocking. More...
void | dumpControlFlow () const override
| Dump precedence rules. More...
void | dumpDataFlow () const override
const std::string | printState (EventSlot &) const override
void | dumpPrecedenceRules (EventSlot &) override
| Dump precedence rules (available only in DEBUG mode, and must be enabled with the corresponding service property) More...
void | dumpPrecedenceTrace (EventSlot &) override
| Dump precedence trace (available only in DEBUG mode, and must be enabled with the corresponding service property) More...
const concurrency::PrecedenceRulesGraph * | getRules () const
| Precedence rules accessor. More...
Public Member Functions inherited from extends< Service, IPrecedenceSvc >
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...
const 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 cached level (originally extracted 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 Member Functions
StatusCode | assembleCFRules (Algorithm *, const std::string &, unsigned int recursionDepth=0)

## Private Attributes
SmartIF< IAlgResourcePool > | m_algResourcePool
| A shortcut to the algorithm resource pool. More...
concurrency::PrecedenceRulesGraph | m_PRGraph {"PrecedenceRulesGraph", serviceLocator()}
| Graph of precedence rules. More...
Gaudi::Property< std::string > | m_mode {this, "TaskPriorityRule", "", "Task avalanche induction strategy."}
| Scheduling strategy. More...
Gaudi::Property< bool > | m_ignoreDFRules {this, "IgnoreDFRules", false, "Ignore the data flow rules."}
| Scheduling strategy. More...
boost::filesystem::path | m_dumpDirName
| Precedence analysis facilities. More...
Gaudi::Property< bool > | m_dumpPrecTrace
Gaudi::Property< std::string > | m_dumpPrecTraceFile
Gaudi::Property< bool > | m_dumpPrecRules
Gaudi::Property< std::string > | m_dumpPrecRulesFile

## Additional Inherited Members
Public Types inherited from extends< Service, IPrecedenceSvc >
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 > >
MSG::Level | setUpMessaging ()
| Set up local caches. More...
MSG::Level | resetMessaging ()
| Reinitialize internal states. More...
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...

## Detailed Description

A service to resolve the task execution precedence.

Author
  Illya Shapoval Aug 7, 2017

Definition at line 21 of file PrecedenceSvc.h.

## Constructor & Destructor Documentation

PrecedenceSvc::PrecedenceSvc | ( | const std::string & | name,
|  | ISvcLocator * | svc
| ) |  |

Constructor.

Definition at line 18 of file PrecedenceSvc.cpp.

18 : base_class( name, svcLoc ) {}
extends< Service, IPrecedenceSvc >::base_class
extends base_class
Typedef to this class.
Definition: extends.h:15

PrecedenceSvc::~PrecedenceSvc | ( |  | ) |
| default

Destructor.

## Member Function Documentation

StatusCode PrecedenceSvc::assembleCFRules | ( | Algorithm * | algo,
|  | const std::string & | parentName,
|  | unsigned int | recursionDepth = `0`
| ) |  |
| private

Definition at line 109 of file PrecedenceSvc.cpp.

110 {
111 StatusCode sc = StatusCode::SUCCESS;
112
113 ++recursionDepth;
114
115 bool isGaudiSequencer( false );
116 bool isAthSequencer( false );
117
118 if ( algo->isSequence() ) {
119 if ( algo->hasProperty( "ShortCircuit" ) )
120 isGaudiSequencer = true;
121 else if ( algo->hasProperty( "StopOverride" ) )
122 isAthSequencer = true;
123 }
124
125 std::vector<Algorithm*>* subAlgorithms = algo->subAlgorithms();
126 if ( // we only want to add basic algorithms -> have no subAlgs
127 // and exclude the case of empty sequencers
128 ( subAlgorithms->empty() && !( isGaudiSequencer || isAthSequencer ) ) ) {
129
130 ON_DEBUG debug() << std::string( recursionDepth, ' ' ) << "Algorithm '" << algo->name() << "' discovered" << endmsg;
131 sc = m_PRGraph.addAlgorithmNode( algo, parentName, false, false );
132 return sc;
133 }
134
135 // Recursively unroll
136 ON_DEBUG debug() << std::string( recursionDepth, ' ' ) << "Decision hub '" << algo->name() << "' discovered"
137 << endmsg;
138 bool modeOR = false;
139 bool allPass = false;
140 bool isLazy = false;
141 bool isSequential = false;
142
143 if ( isGaudiSequencer ) {
144 modeOR = ( algo->getProperty( "ModeOR" ).toString() == "True" ) ? true : false;
145 allPass = ( algo->getProperty( "IgnoreFilterPassed" ).toString() == "True" ) ? true : false;
146 isLazy = ( algo->getProperty( "ShortCircuit" ).toString() == "True" ) ? true : false;
147 if ( allPass ) isLazy = false; // standard GaudiSequencer behavior on all pass is to execute everything
148 isSequential = ( algo->hasProperty( "Sequential" ) && ( algo->getProperty( "Sequential" ).toString() == "True" ) );
149 } else if ( isAthSequencer ) {
150 modeOR = ( algo->getProperty( "ModeOR" ).toString() == "True" ) ? true : false;
151 allPass = ( algo->getProperty( "IgnoreFilterPassed" ).toString() == "True" ) ? true : false;
152 isLazy = ( algo->getProperty( "StopOverride" ).toString() == "True" ) ? false : true;
153 isSequential = ( algo->hasProperty( "Sequential" ) && ( algo->getProperty( "Sequential" ).toString() == "True" ) );
154 }
155 sc = m_PRGraph.addDecisionHubNode( algo, parentName, !isSequential, isLazy, modeOR, allPass );
156 if ( sc.isFailure() ) {
157 error() << "Failed to add DecisionHub " << algo->name() << " to graph of precedence rules" << endmsg;
158 return sc;
159 }
160
161 for ( Algorithm* subalgo : *subAlgorithms ) {
162 sc = assembleCFRules( subalgo, algo->name(), recursionDepth );
163 if ( sc.isFailure() ) {
164 error() << "Algorithm " << subalgo->name() << " could not be flattened" << endmsg;
165 return sc;
166 }
167 }
168 return sc;
169 }
PropertyHolder::getProperty
StatusCode getProperty(Gaudi::Details::PropertyBase *p) const override
get the property
Definition: PropertyHolder.h:291
PrecedenceSvc::m_PRGraph
concurrency::PrecedenceRulesGraph m_PRGraph
Graph of precedence rules.
Definition: PrecedenceSvc.h:77
StatusCode::SUCCESS
Definition: StatusCode.h:31
std::vector::empty
T empty(T...args)
concurrency::PrecedenceRulesGraph::addAlgorithmNode
StatusCode addAlgorithmNode(Algorithm *daughterAlgo, const std::string &parentName, bool inverted, bool allPass)
Add algorithm node.
Definition: PrecedenceRulesGraph.cpp:257
Algorithm::name
const std::string & name() const override
The identifying name of the algorithm object.
Definition: Algorithm.cpp:731
PrecedenceSvc::assembleCFRules
StatusCode assembleCFRules(Algorithm *, const std::string &, unsigned int recursionDepth=0)
Definition: PrecedenceSvc.cpp:109
PropertyHolder::hasProperty
bool hasProperty(const std::string &name) const override
Return true if we have a property with the given name.
Definition: PropertyHolder.h:334
concurrency::PrecedenceRulesGraph::addDecisionHubNode
StatusCode addDecisionHubNode(Algorithm *daughterAlgo, const std::string &parentName, bool modeConcurrent, bool modePromptDecision, bool modeOR, bool allPass)
Add a node, which aggregates decisions of direct daughter nodes.
Definition: PrecedenceRulesGraph.cpp:354
ON_DEBUG
#define ON_DEBUG
Definition: PrecedenceSvc.cpp:9
StatusCode::isFailure
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:86
std::string
STL class.
CommonMessagingBase::error
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:106
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:28
Algorithm::subAlgorithms
const std::vector< Algorithm * > * subAlgorithms() const
List of sub-algorithms. Returns a pointer to a vector of (sub) Algorithms.
Definition: Algorithm.cpp:776
Algorithm
Base class from which all concrete algorithm classes should be derived.
Definition: Algorithm.h:79
std::vector< Algorithm * >
CommonMessagingBase::debug
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
Definition: CommonMessaging.h:115
Algorithm::isSequence
bool isSequence() const override
Are we a Sequence?
Definition: Algorithm.h:220
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209

bool PrecedenceSvc::CFRulesResolved | ( | EventSlot & | slot | ) | const
| override

Check if the root CF decision is resolved.

Definition at line 247 of file PrecedenceSvc.cpp.

248 {
249 return ( -1 != slot.controlFlowState[m_PRGraph.getHeadNode()->getNodeIndex()] ? true : false );
250 }
PrecedenceSvc::m_PRGraph
concurrency::PrecedenceRulesGraph m_PRGraph
Graph of precedence rules.
Definition: PrecedenceSvc.h:77
EventSlot::controlFlowState
std::vector< int > controlFlowState
State of the control flow.
Definition: EventSlot.h:43
concurrency::ControlFlowNode::getNodeIndex
const unsigned int & getNodeIndex() const
Get node index.
Definition: PrecedenceRulesGraph.h:350
concurrency::PrecedenceRulesGraph::getHeadNode
DecisionNode * getHeadNode() const
Get head node.
Definition: PrecedenceRulesGraph.h:616

void PrecedenceSvc::dumpControlFlow | ( |  | ) | const
| override

Dump precedence rules.

Definition at line 253 of file PrecedenceSvc.cpp.

254 {
255
256 info() << std::endl << "==================== Control Flow Configuration ==================" << std::endl << std::endl;
257 info() << m_PRGraph.dumpControlFlow() << endmsg;
258 }
PrecedenceSvc::m_PRGraph
concurrency::PrecedenceRulesGraph m_PRGraph
Graph of precedence rules.
Definition: PrecedenceSvc.h:77
CommonMessagingBase::info
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
Definition: CommonMessaging.h:112
std::endl
T endl(T...args)
concurrency::PrecedenceRulesGraph::dumpControlFlow
std::string dumpControlFlow() const
Print out control flow of Algorithms and Sequences.
Definition: PrecedenceRulesGraph.cpp:458
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209

void PrecedenceSvc::dumpDataFlow | ( |  | ) | const
| override

Definition at line 260 of file PrecedenceSvc.cpp.

261 {
262 info() << std::endl << "===================== Data Flow Configuration ====================" << std::endl;
263 info() << m_PRGraph.dumpDataFlow() << endmsg;
264 }
PrecedenceSvc::m_PRGraph
concurrency::PrecedenceRulesGraph m_PRGraph
Graph of precedence rules.
Definition: PrecedenceSvc.h:77
CommonMessagingBase::info
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
Definition: CommonMessaging.h:112
std::endl
T endl(T...args)
concurrency::PrecedenceRulesGraph::dumpDataFlow
std::string dumpDataFlow() const
Print out all data origins and destinations, as reflected in the EF graph.
Definition: PrecedenceRulesGraph.cpp:495
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209

void PrecedenceSvc::dumpPrecedenceRules | ( | EventSlot & | slot | ) |
| override

Dump precedence rules (available only in DEBUG mode, and must be enabled with the corresponding service property)

Definition at line 276 of file PrecedenceSvc.cpp.

277 {
278
279 if ( !m_dumpPrecRules || !msgLevel( MSG::DEBUG ) ) {
280 info() << "No temporal and topological aspects of execution flow were traced. "
281 << "To get them traced, please set DumpPrecedenceRules "
282 << "property to True *and* put the whole application in DEBUG "
283 << "logging mode" << endmsg;
284 return;
285 }
286
287 ON_DEBUG debug() << "Dumping temporal precedence rules" << endmsg;
288
289 std::string fileName;
290 if ( m_dumpPrecRulesFile.empty() ) {
291 const auto& eventID = slot.eventContext->eventID();
292 fileName = "rules.evt-" + std::to_string( eventID.event_number() ) + "." + "run-" +
293 std::to_string( eventID.run_number() ) + ".graphml";
294 } else {
295 fileName = m_dumpPrecRulesFile;
296 }
297
298 boost::filesystem::path pth{m_dumpDirName};
299 pth.append( fileName );
300
301 m_PRGraph.dumpPrecRules( pth, slot );
302 }
PrecedenceSvc::m_PRGraph
concurrency::PrecedenceRulesGraph m_PRGraph
Graph of precedence rules.
Definition: PrecedenceSvc.h:77
GaudiPython.HistoUtils.path
path
Definition: HistoUtils.py:895
CommonMessagingBase::info
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
Definition: CommonMessaging.h:112
EventSlot::eventContext
EventContext * eventContext
Cache for the eventContext.
Definition: EventSlot.h:32
concurrency::PrecedenceRulesGraph::dumpPrecRules
void dumpPrecRules(const boost::filesystem::path &, const EventSlot &slot)
dump to file the precedence rules
Definition: PrecedenceRulesGraph.cpp:523
std::to_string
T to_string(T...args)
MSG::DEBUG
Definition: IMessageSvc.h:16
PrecedenceSvc::m_dumpDirName
boost::filesystem::path m_dumpDirName
Precedence analysis facilities.
Definition: PrecedenceSvc.h:83
ON_DEBUG
#define ON_DEBUG
Definition: PrecedenceSvc.cpp:9
std::string
STL class.
PrecedenceSvc::m_dumpPrecRulesFile
Gaudi::Property< std::string > m_dumpPrecRulesFile
Definition: PrecedenceSvc.h:96
CommonMessagingBase::debug
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
Definition: CommonMessaging.h:115
PrecedenceSvc::m_dumpPrecRules
Gaudi::Property< bool > m_dumpPrecRules
Definition: PrecedenceSvc.h:93
EventContext::eventID
const EventIDBase & eventID() const
Definition: EventContext.h:42
CommonMessagingBase::msgLevel
MSG::Level msgLevel() const
get the cached level (originally extracted from the embedded MsgStream)
Definition: CommonMessaging.h:124
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209

void PrecedenceSvc::dumpPrecedenceTrace | ( | EventSlot & | slot | ) |
| override

Dump precedence trace (available only in DEBUG mode, and must be enabled with the corresponding service property)

Definition at line 305 of file PrecedenceSvc.cpp.

306 {
307
308 if ( !m_dumpPrecTrace || !msgLevel( MSG::DEBUG ) ) {
309 info() << "Task precedence was not traced. To get it traced, please set "
310 << "DumpPrecedenceTrace property to True *and* put the "
311 << "whole application in DEBUG logging mode" << endmsg;
312 return;
313 }
314
315 ON_DEBUG debug() << "Dumping temporal precedence trace" << endmsg;
316
317 std::string fileName;
318 if ( m_dumpPrecTraceFile.empty() ) {
319 const auto& eventID = slot.eventContext->eventID();
320 fileName = "trace.evt-" + std::to_string( eventID.event_number() ) + "." + "run-" +
321 std::to_string( eventID.run_number() ) + ".graphml";
322 } else {
323 fileName = m_dumpPrecTraceFile;
324 }
325
326 boost::filesystem::path pth{m_dumpDirName};
327 pth.append( fileName );
328
329 m_PRGraph.dumpPrecTrace( pth );
330 }
PrecedenceSvc::m_dumpPrecTrace
Gaudi::Property< bool > m_dumpPrecTrace
Definition: PrecedenceSvc.h:85
PrecedenceSvc::m_PRGraph
concurrency::PrecedenceRulesGraph m_PRGraph
Graph of precedence rules.
Definition: PrecedenceSvc.h:77
GaudiPython.HistoUtils.path
path
Definition: HistoUtils.py:895
CommonMessagingBase::info
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
Definition: CommonMessaging.h:112
EventSlot::eventContext
EventContext * eventContext
Cache for the eventContext.
Definition: EventSlot.h:32
std::to_string
T to_string(T...args)
MSG::DEBUG
Definition: IMessageSvc.h:16
PrecedenceSvc::m_dumpDirName
boost::filesystem::path m_dumpDirName
Precedence analysis facilities.
Definition: PrecedenceSvc.h:83
ON_DEBUG
#define ON_DEBUG
Definition: PrecedenceSvc.cpp:9
std::string
STL class.
concurrency::PrecedenceRulesGraph::dumpPrecTrace
void dumpPrecTrace(const boost::filesystem::path &)
dump to file the precedence trace
Definition: PrecedenceRulesGraph.cpp:613
CommonMessagingBase::debug
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
Definition: CommonMessaging.h:115
PrecedenceSvc::m_dumpPrecTraceFile
Gaudi::Property< std::string > m_dumpPrecTraceFile
Definition: PrecedenceSvc.h:89
EventContext::eventID
const EventIDBase & eventID() const
Definition: EventContext.h:42
CommonMessagingBase::msgLevel
MSG::Level msgLevel() const
get the cached level (originally extracted from the embedded MsgStream)
Definition: CommonMessaging.h:124
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209

StatusCode PrecedenceSvc::finalize | ( |  | ) |
| override

Finalize.

Definition at line 335 of file PrecedenceSvc.cpp.

335 { return Service::finalize(); }
Service::finalize
StatusCode finalize() override
Definition: Service.cpp:174

uint PrecedenceSvc::getPriority | ( | const std::string & | name | ) | const
| inline override

Get priority of an algorithm.

Definition at line 47 of file PrecedenceSvc.h.

48 {
49 return (int)m_PRGraph.getAlgorithmNode( name )->getRank();
50 }
PrecedenceSvc::m_PRGraph
concurrency::PrecedenceRulesGraph m_PRGraph
Graph of precedence rules.
Definition: PrecedenceSvc.h:77
concurrency::PrecedenceRulesGraph::getAlgorithmNode
AlgorithmNode * getAlgorithmNode(const std::string &algoName) const
Get the AlgorithmNode from by algorithm name using graph index.
Definition: PrecedenceRulesGraph.cpp:302
concurrency::AlgorithmNode::getRank
const float & getRank() const
Get Algorithm rank.
Definition: PrecedenceRulesGraph.h:450

const concurrency::PrecedenceRulesGraph* PrecedenceSvc::getRules | ( |  | ) | const
| inline

Precedence rules accessor.

Definition at line 68 of file PrecedenceSvc.h.

68 { return &m_PRGraph; };
PrecedenceSvc::m_PRGraph
concurrency::PrecedenceRulesGraph m_PRGraph
Graph of precedence rules.
Definition: PrecedenceSvc.h:77

StatusCode PrecedenceSvc::initialize | ( |  | ) |
| override

Initialize.

Definition at line 23 of file PrecedenceSvc.cpp.

24 {
25
26 auto sc = Service::initialize(); // parent class must be initialized first
27 if ( sc.isFailure() ) {
28 fatal() << "Base class failed to initialize" << endmsg;
29 return sc;
30 }
31
32 ON_DEBUG
33 {
34 // prepare a directory to dump precedence analysis files to.
35 if ( m_dumpPrecTrace || m_dumpPrecRules ) {
36 if ( !boost::filesystem::create_directory( m_dumpDirName ) ) {
37 error() << "Could not create directory " << m_dumpDirName << "required "
38 "for task precedence tracing"
39 << endmsg;
40 return StatusCode::FAILURE;
41 }
42 }
43 }
44
45 // Get the algo resource pool
46 m_algResourcePool = serviceLocator()->service( "AlgResourcePool" );
47 if ( !m_algResourcePool.isValid() ) {
48 fatal() << "Error retrieving AlgoResourcePool" << endmsg;
49 return StatusCode::FAILURE;
50 }
51
52 info() << "Assembling CF and DF task precedence rules" << endmsg;
53
54 ON_DEBUG debug() << "Assembling CF precedence realm:" << endmsg;
55 // create the root CF node
56 m_PRGraph.addHeadNode( "RootDecisionHub", true, false, true, true );
57 // assemble the CF rules
58 for ( const auto& ialgoPtr : m_algResourcePool->getTopAlgList() ) {
59 auto algorithm = dynamic_cast<Algorithm*>( ialgoPtr );
60 if ( !algorithm ) fatal() << "Conversion from IAlgorithm to Algorithm failed" << endmsg;
61 sc = assembleCFRules( algorithm, "RootDecisionHub" );
62 if ( sc.isFailure() ) {
63 fatal() << "Could not assemble the CF precedence realm" << endmsg;
64 return sc;
65 }
66 }
67
68 if ( m_ignoreDFRules ) {
69 warning() << "Ignoring DF precedence rules, disabling all associated features" << endmsg;
70 return StatusCode::SUCCESS;
71 }
72
73 ON_DEBUG debug() << "Assembling DF precedence realm:" << endmsg;
74 sc = m_PRGraph.initialize();
75 if ( sc.isFailure() ) {
76 fatal() << "Could not assemble the DF precedence realm" << endmsg;
77 return sc;
78 }
79
80 // Rank algorithms if a prioritization rule is supplied
81 if ( m_mode == "PCE" ) {
82 auto ranker = concurrency::RankerByProductConsumption();
83 m_PRGraph.rankAlgorithms( ranker );
84 } else if ( m_mode == "COD" ) {
85 auto ranker = concurrency::RankerByCummulativeOutDegree();
86 m_PRGraph.rankAlgorithms( ranker );
87 } else if ( m_mode == "E" ) {
88 auto ranker = concurrency::RankerByEccentricity();
89 m_PRGraph.rankAlgorithms( ranker );
90 } else if ( m_mode == "T" ) {
91 auto ranker = concurrency::RankerByTiming();
92 m_PRGraph.rankAlgorithms( ranker );
93 } else if ( m_mode == "DRE" ) {
94 auto ranker = concurrency::RankerByDataRealmEccentricity();
95 m_PRGraph.rankAlgorithms( ranker );
96 } else if ( !m_mode.empty() ) {
97 error() << "Requested prioritization rule '" << m_mode << "' is unknown" << endmsg;
98 return StatusCode::FAILURE;
99 }
100
101 ON_DEBUG debug() << m_PRGraph.dumpDataFlow() << endmsg;
102
103 if ( sc.isSuccess() ) info() << "PrecedenceSvc initialized successfully" << endmsg;
104
105 return sc;
106 }
PrecedenceSvc::m_dumpPrecTrace
Gaudi::Property< bool > m_dumpPrecTrace
Definition: PrecedenceSvc.h:85
PrecedenceSvc::m_PRGraph
concurrency::PrecedenceRulesGraph m_PRGraph
Graph of precedence rules.
Definition: PrecedenceSvc.h:77
Service::initialize
StatusCode initialize() override
Definition: Service.cpp:64
StatusCode::SUCCESS
Definition: StatusCode.h:31
StatusCode::FAILURE
Definition: StatusCode.h:31
CommonMessagingBase::info
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
Definition: CommonMessaging.h:112
PrecedenceSvc::assembleCFRules
StatusCode assembleCFRules(Algorithm *, const std::string &, unsigned int recursionDepth=0)
Definition: PrecedenceSvc.cpp:109
PrecedenceSvc::m_dumpDirName
boost::filesystem::path m_dumpDirName
Precedence analysis facilities.
Definition: PrecedenceSvc.h:83
concurrency::PrecedenceRulesGraph::addHeadNode
void addHeadNode(const std::string &headName, bool modeConcurrent, bool modePromptDecision, bool modeOR, bool allPass)
Add a node, which has no parents.
Definition: PrecedenceRulesGraph.cpp:400
ON_DEBUG
#define ON_DEBUG
Definition: PrecedenceSvc.cpp:9
concurrency::PrecedenceRulesGraph::rankAlgorithms
void rankAlgorithms(IGraphVisitor &ranker) const
Rank Algorithm nodes by the number of data outputs.
Definition: PrecedenceRulesGraph.cpp:447
PrecedenceSvc::m_ignoreDFRules
Gaudi::Property< bool > m_ignoreDFRules
Scheduling strategy.
Definition: PrecedenceSvc.h:81
ISvcLocator::service
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
Definition: ISvcLocator.h:79
concurrency::PrecedenceRulesGraph::initialize
StatusCode initialize()
Initialize graph.
Definition: PrecedenceRulesGraph.cpp:142
CommonMessagingBase::error
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:106
concurrency::RankerByTiming
Definition: PRGraphVisitors.h:98
PrecedenceSvc::m_algResourcePool
SmartIF< IAlgResourcePool > m_algResourcePool
A shortcut to the algorithm resource pool.
Definition: PrecedenceSvc.h:75
concurrency::RankerByDataRealmEccentricity
Definition: PRGraphVisitors.h:114
IAlgResourcePool::getTopAlgList
virtual std::list< IAlgorithm * > getTopAlgList()=0
Get top list of algorithms.
CommonMessagingBase::warning
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
Definition: CommonMessaging.h:109
concurrency::PrecedenceRulesGraph::dumpDataFlow
std::string dumpDataFlow() const
Print out all data origins and destinations, as reflected in the EF graph.
Definition: PrecedenceRulesGraph.cpp:495
PrecedenceSvc::m_mode
Gaudi::Property< std::string > m_mode
Scheduling strategy.
Definition: PrecedenceSvc.h:79
concurrency::RankerByEccentricity
Definition: PRGraphVisitors.h:106
Algorithm
Base class from which all concrete algorithm classes should be derived.
Definition: Algorithm.h:79
CommonMessagingBase::debug
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
Definition: CommonMessaging.h:115
SmartIF::isValid
bool isValid() const
Allow for check if smart pointer is valid.
Definition: SmartIF.h:68
PrecedenceSvc::m_dumpPrecRules
Gaudi::Property< bool > m_dumpPrecRules
Definition: PrecedenceSvc.h:93
concurrency::RankerByProductConsumption
Definition: PRGraphVisitors.h:77
CommonMessagingBase::fatal
MsgStream & fatal() const
shortcut for the method msgStream(MSG::FATAL)
Definition: CommonMessaging.h:100
Service::serviceLocator
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator.
Definition: Service.cpp:292
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
concurrency::RankerByCummulativeOutDegree
Definition: PRGraphVisitors.h:85

bool PrecedenceSvc::isBlocking | ( | const std::string & | name | ) | const
| inline override

Check if a task is CPU-blocking.

Definition at line 53 of file PrecedenceSvc.h.

53 { return m_PRGraph.getAlgorithmNode( name )->isIOBound(); }
PrecedenceSvc::m_PRGraph
concurrency::PrecedenceRulesGraph m_PRGraph
Graph of precedence rules.
Definition: PrecedenceSvc.h:77
concurrency::PrecedenceRulesGraph::getAlgorithmNode
AlgorithmNode * getAlgorithmNode(const std::string &algoName) const
Get the AlgorithmNode from by algorithm name using graph index.
Definition: PrecedenceRulesGraph.cpp:302
concurrency::AlgorithmNode::isIOBound
bool isIOBound() const
Check if algorithm is I/O-bound.
Definition: PrecedenceRulesGraph.h:460

StatusCode PrecedenceSvc::iterate | ( | EventSlot & | slot,
|  | const Cause & | cause
| ) |  |
| override

Infer the precedence effect caused by an execution flow event.

Definition at line 172 of file PrecedenceSvc.cpp.

173 {
174
175 bool ifTrace = false;
176 ON_DEBUG if ( m_dumpPrecTrace ) ifTrace = true; // enable precedence analysis
177
178 if ( Cause::source::Task == cause.m_source ) {
179 ON_VERBOSE verbose() << "Triggering bottom-up traversal at node '" << cause.m_sourceName << "'" << endmsg;
180 auto visitor = concurrency::DecisionUpdater( slot, cause, ifTrace );
181 m_PRGraph.getAlgorithmNode( cause.m_sourceName )->accept( visitor );
182 } else {
183 ON_VERBOSE verbose() << "Triggering top-down traversal at the root node" << endmsg;
184 auto visitor = concurrency::Supervisor( slot, cause, ifTrace );
185 m_PRGraph.getHeadNode()->accept( visitor );
186 }
187
188 ON_DEBUG
189 {
190 if ( m_dumpPrecTrace )
191 if ( CFRulesResolved( slot ) ) dumpPrecedenceTrace( slot );
192 if ( m_dumpPrecRules )
193 if ( CFRulesResolved( slot ) ) dumpPrecedenceRules( slot );
194 }
195
196 return StatusCode::SUCCESS;
197 }
PrecedenceSvc::m_dumpPrecTrace
Gaudi::Property< bool > m_dumpPrecTrace
Definition: PrecedenceSvc.h:85
PrecedenceSvc::m_PRGraph
concurrency::PrecedenceRulesGraph m_PRGraph
Graph of precedence rules.
Definition: PrecedenceSvc.h:77
StatusCode::SUCCESS
Definition: StatusCode.h:31
PrecedenceSvc::dumpPrecedenceRules
void dumpPrecedenceRules(EventSlot &) override
Dump precedence rules (available only in DEBUG mode, and must be enabled with the corresponding servi...
Definition: PrecedenceSvc.cpp:276
Cause::source::Task
CommonMessagingBase::verbose
MsgStream & verbose() const
shortcut for the method msgStream(MSG::VERBOSE)
Definition: CommonMessaging.h:118
Cause::m_source
source m_source
Definition: PrecedenceRulesGraph.h:316
ON_DEBUG
#define ON_DEBUG
Definition: PrecedenceSvc.cpp:9
concurrency::PrecedenceRulesGraph::getAlgorithmNode
AlgorithmNode * getAlgorithmNode(const std::string &algoName) const
Get the AlgorithmNode from by algorithm name using graph index.
Definition: PrecedenceRulesGraph.cpp:302
concurrency::DecisionNode::accept
bool accept(IGraphVisitor &visitor) override
Visitor entry point.
Definition: PrecedenceRulesGraph.cpp:61
ON_VERBOSE
#define ON_VERBOSE
Definition: PrecedenceSvc.cpp:10
concurrency::DecisionUpdater
Definition: PRGraphVisitors.h:38
PrecedenceSvc::dumpPrecedenceTrace
void dumpPrecedenceTrace(EventSlot &) override
Dump precedence trace (available only in DEBUG mode, and must be enabled with the corresponding servi...
Definition: PrecedenceSvc.cpp:305
PrecedenceSvc::CFRulesResolved
bool CFRulesResolved(EventSlot &) const override
Check if the root CF decision is resolved.
Definition: PrecedenceSvc.cpp:247
PrecedenceSvc::m_dumpPrecRules
Gaudi::Property< bool > m_dumpPrecRules
Definition: PrecedenceSvc.h:93
concurrency::AlgorithmNode::accept
bool accept(IGraphVisitor &visitor) override
Visitor entry point.
Definition: PrecedenceRulesGraph.cpp:109
concurrency::Supervisor
Definition: PRGraphVisitors.h:54
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
Cause::m_sourceName
std::string m_sourceName
Definition: PrecedenceRulesGraph.h:317
concurrency::PrecedenceRulesGraph::getHeadNode
DecisionNode * getHeadNode() const
Get head node.
Definition: PrecedenceRulesGraph.h:616

const std::string PrecedenceSvc::printState | ( | EventSlot & | slot | ) | const
| override

Definition at line 267 of file PrecedenceSvc.cpp.

268 {
269
270 std::stringstream ss;
271 m_PRGraph.printState( ss, slot.algsStates, slot.controlFlowState, 0 );
272 return ss.str();
273 }
PrecedenceSvc::m_PRGraph
concurrency::PrecedenceRulesGraph m_PRGraph
Graph of precedence rules.
Definition: PrecedenceSvc.h:77
EventSlot::algsStates
AlgsExecutionStates algsStates
Vector of algorithms states.
Definition: EventSlot.h:37
concurrency::PrecedenceRulesGraph::printState
void printState(std::stringstream &output, AlgsExecutionStates &states, const std::vector< int > &node_decisions, const unsigned int &recursionLevel) const
Print a string representing the control flow state.
Definition: PrecedenceRulesGraph.h:638
std::stringstream
STL class.
EventSlot::controlFlowState
std::vector< int > controlFlowState
State of the control flow.
Definition: EventSlot.h:43
std::stringstream::str
T str(T...args)

StatusCode PrecedenceSvc::simulate | ( | EventSlot & | slot | ) | const
| override

Simulate execution flow.

Definition at line 200 of file PrecedenceSvc.cpp.

201 {
202
203 Cause cs = {Cause::source::Root, "RootDecisionHub"};
204 auto visitor = concurrency::RunSimulator( slot, cs );
205
206 auto& nodeDecisions = slot.controlFlowState;
207
208 std::vector<int> prevNodeDecisions;
209 int cntr = 0;
210 std::vector<int> counters;
211
212 while ( !CFRulesResolved( slot ) ) {
213 cntr += 1;
214 int prevAlgosNum = visitor.m_nodesSucceeded;
215 debug() << " Proceeding with iteration #" << cntr << endmsg;
216 prevNodeDecisions = slot.controlFlowState;
217 m_PRGraph.getHeadNode()->accept( visitor );
218 if ( prevNodeDecisions == nodeDecisions ) {
219 error() << " No progress on iteration " << cntr << " detected, node decisions are:" << nodeDecisions << endmsg;
220 return StatusCode::FAILURE;
221 }
222 info() << " Iteration #" << cntr << " finished, total algorithms executed: " << visitor.m_nodesSucceeded
223 << endmsg;
224
225 std::stringstream s;
226 s << cntr << ", " << ( visitor.m_nodesSucceeded - prevAlgosNum ) << "\n";
227
228 std::ofstream myfile;
229 myfile.open( "RunSimulation.csv", std::ios::app );
230 myfile << s.str();
231 myfile.close();
232
233 if ( visitor.m_nodesSucceeded != prevAlgosNum ) counters.push_back( visitor.m_nodesSucceeded );
234 }
235
236 info() << "Asymptotical concurrency speedup depth: " << (float)visitor.m_nodesSucceeded / (float)counters.size()
237 << endmsg;
238
239 // Reset algorithm states and node decisions
240 slot.algsStates.reset();
241 nodeDecisions.assign( nodeDecisions.size(), -1 );
242
243 return StatusCode::SUCCESS;
244 }
PrecedenceSvc::m_PRGraph
concurrency::PrecedenceRulesGraph m_PRGraph
Graph of precedence rules.
Definition: PrecedenceSvc.h:77
StatusCode::SUCCESS
Definition: StatusCode.h:31
std::ofstream::open
T open(T...args)
StatusCode::FAILURE
Definition: StatusCode.h:31
CommonMessagingBase::info
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
Definition: CommonMessaging.h:112
concurrency::RunSimulator
Definition: PRGraphVisitors.h:135
EventSlot::algsStates
AlgsExecutionStates algsStates
Vector of algorithms states.
Definition: EventSlot.h:37
std::stringstream
STL class.
concurrency::DecisionNode::accept
bool accept(IGraphVisitor &visitor) override
Visitor entry point.
Definition: PrecedenceRulesGraph.cpp:61
std::vector::push_back
T push_back(T...args)
CommonMessagingBase::error
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:106
std::ofstream
STL class.
EventSlot::controlFlowState
std::vector< int > controlFlowState
State of the control flow.
Definition: EventSlot.h:43
Cause
Definition: PrecedenceRulesGraph.h:313
std::stringstream::str
T str(T...args)
Cause::source::Root
PrecedenceSvc::CFRulesResolved
bool CFRulesResolved(EventSlot &) const override
Check if the root CF decision is resolved.
Definition: PrecedenceSvc.cpp:247
std::vector::size
T size(T...args)
std::vector< int >
CommonMessagingBase::debug
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
Definition: CommonMessaging.h:115
AlgsExecutionStates::reset
void reset()
Definition: AlgsExecutionStates.h:51
BrunelScenarioForwardScheduler.app
app
Definition: BrunelScenarioForwardScheduler.py:147
gaudirun.s
string s
Definition: gaudirun.py:253
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
concurrency::PrecedenceRulesGraph::getHeadNode
DecisionNode * getHeadNode() const
Get head node.
Definition: PrecedenceRulesGraph.h:616

## Member Data Documentation

SmartIF<IAlgResourcePool> PrecedenceSvc::m_algResourcePool
| private

A shortcut to the algorithm resource pool.

Definition at line 75 of file PrecedenceSvc.h.

boost::filesystem::path PrecedenceSvc::m_dumpDirName
| private

Initial value:
{
boost::filesystem::unique_path( boost::filesystem::path( "precedence.analysis.%%%%" ) )}

Precedence analysis facilities.

Definition at line 83 of file PrecedenceSvc.h.

Gaudi::Property<bool> PrecedenceSvc::m_dumpPrecRules
| private

Initial value:
{this, "DumpPrecedenceRules", false, "Dump task precedence rules. The service "
"must be in DEBUG mode for this switch "
"to have effect."}

Definition at line 93 of file PrecedenceSvc.h.

Gaudi::Property<std::string> PrecedenceSvc::m_dumpPrecRulesFile
| private

Initial value:
{this, "PrecedenceRulesFile", "",
"Override default name of the GRAPHML precedence rules file."}

Definition at line 96 of file PrecedenceSvc.h.

Gaudi::Property<bool> PrecedenceSvc::m_dumpPrecTrace
| private

Initial value:
{this, "DumpPrecedenceTrace", false,
"Dump task precedence traces for each event."
"The service must be in DEBUG mode for this switch "
"to have effect."}

Definition at line 85 of file PrecedenceSvc.h.

Gaudi::Property<std::string> PrecedenceSvc::m_dumpPrecTraceFile
| private

Initial value:
{
this, "PrecedenceTraceFile", "", "Override default name of the GRAPHML trace file. NOTE: if more than "
"1 event is processed, the setting forces creation of a single file "
"with cumulative precedence trace."}

Definition at line 89 of file PrecedenceSvc.h.

Gaudi::Property<bool> PrecedenceSvc::m_ignoreDFRules {this, "IgnoreDFRules", false, "Ignore the data flow rules."}
| private

Scheduling strategy.

Definition at line 81 of file PrecedenceSvc.h.

Gaudi::Property<std::string> PrecedenceSvc::m_mode {this, "TaskPriorityRule", "", "Task avalanche induction strategy."}
| private

Scheduling strategy.

Definition at line 79 of file PrecedenceSvc.h.

concurrency::PrecedenceRulesGraph PrecedenceSvc::m_PRGraph {"PrecedenceRulesGraph", serviceLocator()}
| private

Graph of precedence rules.

Definition at line 77 of file PrecedenceSvc.h.

The documentation for this class was generated from the following files:

- GaudiHive/src/PrecedenceSvc.h
- GaudiHive/src/PrecedenceSvc.cpp