CMS 3D CMS Logo

WorkerManager.h
Go to the documentation of this file.
1 #ifndef FWCore_Framework_WorkerManager_h
2 #define FWCore_Framework_WorkerManager_h
3 
11 
12 #include <memory>
13 #include <set>
14 #include <string>
15 #include <utility>
16 #include <vector>
17 
18 namespace edm {
19  class ExceptionCollector;
20  class ExceptionToActionTable;
21  class ModuleRegistry;
22  class ModuleTypeResolverMaker;
23  class PreallocationConfiguration;
24  class Worker;
25  namespace eventsetup {
27  }
28 
29  class WorkerManager {
30  public:
31  typedef std::vector<Worker*> AllWorkers;
32 
33  WorkerManager(std::shared_ptr<ActivityRegistry> actReg,
35  ModuleTypeResolverMaker const* typeResolverMaker);
36  WorkerManager(WorkerManager&&) = default;
37 
38  WorkerManager(std::shared_ptr<ModuleRegistry> modReg,
39  std::shared_ptr<ActivityRegistry> actReg,
41 
43 
45  ProductRegistry& preg,
46  PreallocationConfiguration const* prealloc,
47  std::shared_ptr<ProcessConfiguration const> processConfiguration,
49  std::set<std::string>& unscheduledLabels,
50  std::vector<std::string>& shouldBeUsedLabels);
51 
52  template <typename T, typename U>
54  typename T::TransitionInfoType&,
55  ServiceToken const&,
56  StreamID,
57  typename T::Context const* topContext,
58  U const* context) noexcept;
59 
60  template <typename T>
62  typename T::TransitionInfoType const&,
63  ServiceToken const&,
64  StreamID,
65  ParentContext const&,
66  typename T::Context const*);
67 
68  void setupResolvers(Principal& principal);
70 
71  void beginJob(ProductRegistry const& iRegistry,
73  ProcessBlockHelperBase const&);
74  void endJob();
75  void endJob(ExceptionCollector& collector);
76 
77  void beginStream(StreamID iID, StreamContext& streamContext);
78  void endStream(StreamID iID, StreamContext& streamContext);
79 
80  AllWorkers const& allWorkers() const { return allWorkers_; }
81  AllWorkers const& unscheduledWorkers() const { return unscheduled_.workers(); }
82 
83  void addToAllWorkers(Worker* w);
84 
85  ExceptionToActionTable const& actionTable() const { return *actionTable_; }
86 
88  ProductRegistry& preg,
89  PreallocationConfiguration const* prealloc,
90  std::shared_ptr<ProcessConfiguration const> processConfiguration,
91  std::string const& label);
92 
93  void resetAll();
94 
95  private:
101  };
102 
103  template <typename T, typename U>
105  typename T::TransitionInfoType& info,
106  ServiceToken const& token,
107  StreamID streamID,
108  typename T::Context const* topContext,
109  U const* context) noexcept {
110  static_assert(!T::isEvent_);
111 
112  // Spawn them in reverse order. At least in the single threaded case that makes
113  // them run in forward order (and more likely to with multiple threads).
114  for (auto it = allWorkers_.rbegin(), itEnd = allWorkers_.rend(); it != itEnd; ++it) {
115  Worker* worker = *it;
116 
117  ParentContext parentContext(context);
118 
119  // We do not need to run prefetching here because this only handles
120  // stream begin/end transitions for runs and lumis. There are no products
121  // put into the runs or lumis in stream transitions, so there can be
122  // no data dependencies which require prefetching. Prefetching is
123  // needed for global transitions, but they are run elsewhere.
124  // (One exception, the SecondaryEventProvider (used for mixing) sends
125  // global begin/end run/lumi transitions through here. They shouldn't
126  // need prefetching either and for some years nothing has been using
127  // that part of the code anyway...)
128  worker->doWorkNoPrefetchingAsync<T>(task, info, token, streamID, parentContext, topContext);
129  }
130  }
131 
132  template <typename T>
134  typename T::TransitionInfoType const& info,
135  ServiceToken const& token,
136  StreamID streamID,
137  ParentContext const& parentContext,
138  typename T::Context const* context) {
139  unscheduled_.runAccumulatorsAsync<T>(std::move(task), info, token, streamID, parentContext, context);
140  }
141 } // namespace edm
142 
143 #endif
static const TGPicture * info(bool iBackgroundIsBlack)
roAction_t actions[nactions]
Definition: GenABIO.cc:181
void doWorkNoPrefetchingAsync(WaitingTaskHolder, typename T::TransitionInfoType const &, ServiceToken const &, StreamID, ParentContext const &, typename T::Context const *) noexcept
Definition: Worker.h:1195
worker_container const & workers() const
void endStream(StreamID iID, StreamContext &streamContext)
void processAccumulatorsAsync(WaitingTaskHolder, typename T::TransitionInfoType const &, ServiceToken const &, StreamID, ParentContext const &, typename T::Context const *)
T w() const
void beginJob(ProductRegistry const &iRegistry, eventsetup::ESRecordsToProductResolverIndices const &, ProcessBlockHelperBase const &)
UnscheduledCallProducer unscheduled_
Definition: WorkerManager.h:99
AllWorkers allWorkers_
Definition: WorkerManager.h:98
void setupOnDemandSystem(EventTransitionInfo const &)
AllWorkers const & unscheduledWorkers() const
Definition: WorkerManager.h:81
void deleteModuleIfExists(std::string const &moduleLabel)
ExceptionToActionTable const * actionTable_
Definition: WorkerManager.h:97
Worker * getWorker(ParameterSet &pset, ProductRegistry &preg, PreallocationConfiguration const *prealloc, std::shared_ptr< ProcessConfiguration const > processConfiguration, std::string const &label)
void const * lastSetupEventPrincipal_
std::vector< Worker * > AllWorkers
Definition: WorkerManager.h:31
char const * label
WorkerManager(std::shared_ptr< ActivityRegistry > actReg, ExceptionToActionTable const &actions, ModuleTypeResolverMaker const *typeResolverMaker)
void processOneOccurrenceAsync(WaitingTaskHolder, typename T::TransitionInfoType &, ServiceToken const &, StreamID, typename T::Context const *topContext, U const *context) noexcept
AllWorkers const & allWorkers() const
Definition: WorkerManager.h:80
void runAccumulatorsAsync(WaitingTaskHolder task, typename T::TransitionInfoType const &info, ServiceToken const &token, StreamID streamID, ParentContext const &parentContext, typename T::Context const *context) noexcept
ExceptionToActionTable const & actionTable() const
Definition: WorkerManager.h:85
void beginStream(StreamID iID, StreamContext &streamContext)
void addToUnscheduledWorkers(ParameterSet &pset, ProductRegistry &preg, PreallocationConfiguration const *prealloc, std::shared_ptr< ProcessConfiguration const > processConfiguration, std::string label, std::set< std::string > &unscheduledLabels, std::vector< std::string > &shouldBeUsedLabels)
HLT enums.
void setupResolvers(Principal &principal)
WorkerRegistry workerReg_
Definition: WorkerManager.h:96
The Registry of all workers that where requested Holds all instances of workers. In this implementati...
long double T
def move(src, dest)
Definition: eostools.py:511
void addToAllWorkers(Worker *w)