All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
AlgResourcePool.h
Go to the documentation of this file.
1 #ifndef GAUDIHIVE_ALGRESOURCEPOOL_H
2 #define GAUDIHIVE_ALGRESOURCEPOOL_H
3 
4 // Include files
5 #include "GaudiKernel/IAlgResourcePool.h"
6 #include "GaudiKernel/IAlgManager.h"
7 #include "GaudiKernel/Service.h"
8 #include "GaudiKernel/IAlgorithm.h"
9 #include "GaudiKernel/Algorithm.h"
10 
11 // TODO: include here is only a workaround
12 #include "ExecutionFlowGraph.h"
13 
14 // std includes
15 #include <string>
16 #include <list>
17 #include <vector>
18 #include <bitset>
19 #include <atomic>
20 #include <mutex>
21 
22 // External libs
23 #include "boost/dynamic_bitset.hpp"
24 #include "tbb/concurrent_queue.h"
25 
34 class AlgResourcePool: public extends1<Service, IAlgResourcePool>{
35 public:
36  // Standard constructor
37  AlgResourcePool( const std::string& name, ISvcLocator* svc );
38  // Standard destructor
40 
41  virtual StatusCode start();
42  virtual StatusCode initialize();
44  virtual StatusCode acquireAlgorithm(const std::string& name, IAlgorithm*& algo, bool blocking = false);
46  virtual StatusCode releaseAlgorithm(const std::string& name, IAlgorithm*& algo);
48  virtual StatusCode acquireResource(const std::string& name);
50  virtual StatusCode releaseResource(const std::string& name);
51 
52  virtual std::list<IAlgorithm*> getFlatAlgList();
53  virtual std::list<IAlgorithm*> getTopAlgList();
54 
55  virtual StatusCode beginRun();
56  virtual StatusCode endRun();
57 
58  virtual StatusCode stop();
59 
61 
62 private:
63  typedef tbb::concurrent_bounded_queue<IAlgorithm*> concurrentQueueIAlgPtr;
64  typedef std::list<SmartIF<IAlgorithm> > ListAlg;
65  typedef boost::dynamic_bitset<> state_type;
66 
67  std::mutex m_resource_mutex;
70  std::map<size_t,concurrentQueueIAlgPtr*> m_algqueue_map;
71  std::map<size_t,state_type> m_resource_requirements;
72  std::map<size_t,size_t> m_n_of_allowed_instances;
73  std::map<size_t,unsigned int> m_n_of_created_instances;
74  std::map<std::string,unsigned int> m_resource_indices;
75 
78 
80  StatusCode flattenSequencer(Algorithm* sequencer, ListAlg& alglist, const std::string& parentName, unsigned int recursionDepth=0);
81 
84 
86  ListAlg m_algList;
87 
89  ListAlg m_topAlgList;
90 
93 
95  std::list<IAlgorithm*> m_flatUniqueAlgPtrList;
96 
98  std::list<IAlgorithm*> m_topAlgPtrList;
99 
102 };
103 
104 #endif // GAUDIHIVE_ALGRESOURCEPOOL_H
ListAlg m_flatUniqueAlgList
The flat list of algorithms w/o clones.
AlgResourcePool(const std::string &name, ISvcLocator *svc)
virtual StatusCode releaseResource(const std::string &name)
Release a certrain resource.
StringArrayProperty m_topAlgNames
The names of the algorithms to be passed to the algorithm manager.
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
Definition: ISvcLocator.h:25
virtual std::list< IAlgorithm * > getTopAlgList()
std::map< size_t, concurrentQueueIAlgPtr * > m_algqueue_map
std::mutex m_resource_mutex
std::list< SmartIF< IAlgorithm > > ListAlg
virtual StatusCode initialize()
The AlgResourcePool is a concrete implementation of the IAlgResourcePool interface.
state_type m_available_resources
boost::dynamic_bitset state_type
std::map< size_t, size_t > m_n_of_allowed_instances
tbb::concurrent_bounded_queue< IAlgorithm * > concurrentQueueIAlgPtr
std::list< IAlgorithm * > m_flatUniqueAlgPtrList
The flat list of algorithms w/o clones which is returned.
virtual StatusCode acquireResource(const std::string &name)
Acquire a certain resource.
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
concurrency::ExecutionFlowGraph * m_EFGraph
OMG yet another hack.
std::list< IAlgorithm * > m_topAlgPtrList
The top list of algorithms.
virtual concurrency::ExecutionFlowGraph * getExecutionFlowGraph() const
The IAlgorithm is the interface implemented by the Algorithm base class.
Definition: IAlgorithm.h:23
virtual StatusCode start()
virtual StatusCode endRun()
Base class from which all concrete algorithm classes should be derived.
Definition: Algorithm.h:77
StatusCode decodeTopAlgs()
Decode the top alg list.
Base class used to extend a class implementing other interfaces.
Definition: extends.h:10
virtual std::list< IAlgorithm * > getFlatAlgList()
StatusCode flattenSequencer(Algorithm *sequencer, ListAlg &alglist, const std::string &parentName, unsigned int recursionDepth=0)
Recursively flatten an algList.
std::map< size_t, state_type > m_resource_requirements
virtual StatusCode releaseAlgorithm(const std::string &name, IAlgorithm *&algo)
Release a certain algorithm.
ListAlg m_topAlgList
The list of top algorithms.
virtual StatusCode stop()
std::map< std::string, unsigned int > m_resource_indices
virtual StatusCode beginRun()
std::map< size_t, unsigned int > m_n_of_created_instances
ListAlg m_algList
The list of all algorithms created withing the Pool which are not top.
virtual StatusCode acquireAlgorithm(const std::string &name, IAlgorithm *&algo, bool blocking=false)
Acquire a certain algorithm using its name.