1 #ifndef FWCore_Framework_Worker_h
2 #define FWCore_Framework_Worker_h
69 #include <unordered_map>
75 class ModuleProcessName;
76 class ProductResolverIndexHelper;
77 class ProductResolverIndexAndSkipBit;
80 class ProductRegistry;
81 class ThinnedAssociationsHelper;
83 namespace workerhelper {
87 namespace eventsetup {
107 void push(oneapi::tbb::task_group& iG,
F&& iF) {
145 template <
typename T>
147 typename T::TransitionInfoType
const&,
151 typename T::Context
const*);
153 template <
typename T>
155 typename T::TransitionInfoType
const&,
159 typename T::Context
const*);
161 template <
typename T>
165 typename T::Context
const*);
206 std::unordered_multimap<
std::string, std::tuple<TypeID const*, const char*, edm::ProductResolverIndex>>
const&
211 std::vector<ModuleProcessName>& modulesInPreviousProcesses,
213 std::map<std::string, ModuleDescription const*>
const& labelsToDesc)
const = 0;
217 virtual std::vector<ConsumesInfo>
consumesInfo()
const = 0;
223 timesRun_.store(0, std::memory_order_release);
244 template <
typename O>
281 template <
typename T>
307 template <
bool IS_EVENT>
316 template <
bool IS_EVENT>
325 template <
bool IS_EVENT>
335 template <
typename T>
339 typename T::TransitionInfoType
const&,
355 template <
typename T>
357 typename T::TransitionInfoType
const&,
360 typename T::Context
const*);
371 template <
typename T>
375 typename T::TransitionInfoType
const& transitionInfo,
379 typename T::Context
const*
context,
380 oneapi::tbb::task_group* iGroup)
409 std::exception_ptr temp_excptr;
411 if constexpr (T::isEvent_) {
418 temp_excptr = std::current_exception();
420 excptr = &temp_excptr;
441 std::exception_ptr* ptr =
nullptr;
442 worker->template runModuleAfterAsyncPrefetch<T>(ptr,
info, streamID, parentContext, sContext);
475 template <
typename T,
typename DUMMY =
void>
479 typename T::TransitionInfoType
const&,
486 template <
typename DUMMY>
495 m_eventTransitionInfo(eventTransitionInfo),
496 m_parentContext(parentContext),
497 m_holder(std::
move(holder)),
498 m_serviceToken(token) {}
506 std::exception_ptr temp_excptr;
511 m_worker->emitPostModuleEventPrefetchingSignal();
513 temp_excptr = std::current_exception();
515 excptr = &temp_excptr;
520 if (
auto queue = m_worker->serializeRunModule()) {
521 queue.push(*m_holder.group(),
523 info = m_eventTransitionInfo,
524 parentContext = m_parentContext,
525 serviceToken = m_serviceToken,
526 holder = m_holder]() {
530 std::exception_ptr* ptr =
nullptr;
531 worker->runAcquireAfterAsyncPrefetch(ptr, info, parentContext, holder);
537 m_worker->runAcquireAfterAsyncPrefetch(excptr, m_eventTransitionInfo, m_parentContext,
std::move(m_holder));
554 oneapi::tbb::task_group*
group,
592 template <
typename T>
593 class ModuleSignalSentry {
596 typename T::Context
const*
context,
603 ~ModuleSignalSentry() {
610 typename T::Context
const* context_;
616 namespace workerhelper {
628 return iWorker->
implDo(info, mcc);
654 ModuleSignalSentry<Arg> cpp(actReg, context, mcc);
679 ModuleSignalSentry<Arg> cpp(actReg, context, mcc);
704 ModuleSignalSentry<Arg> cpp(actReg, context, mcc);
729 ModuleSignalSentry<Arg> cpp(actReg, context, mcc);
755 ModuleSignalSentry<Arg> cpp(actReg, context, mcc);
780 ModuleSignalSentry<Arg> cpp(actReg, context, mcc);
806 ModuleSignalSentry<Arg> cpp(actReg, context, mcc);
831 ModuleSignalSentry<Arg> cpp(actReg, context, mcc);
856 ModuleSignalSentry<Arg> cpp(actReg, context, mcc);
876 ModuleSignalSentry<Arg> cpp(actReg, context, mcc);
896 ModuleSignalSentry<Arg> cpp(actReg, context, mcc);
908 template <
typename T>
912 typename T::TransitionInfoType
const& transitionInfo,
914 Principal const& principal = transitionInfo.principal();
930 template <
typename T>
932 typename T::TransitionInfoType
const& transitionInfo,
936 typename T::Context
const*
context) {
942 bool expected =
false;
943 bool workStarted =
workStarted_.compare_exchange_strong(expected,
true);
946 if constexpr (T::isEvent_) {
965 auto p = m_task.exchange(
nullptr);
974 std::atomic<edm::WaitingTask*> m_task;
976 if constexpr (T::isEvent_) {
978 auto ownRunTask = std::make_shared<DestroyTask>(moduleTask);
982 [
this, weakToken, transitionInfo, parentContext, ownRunTask,
group](std::exception_ptr
const* iExcept) {
985 AcquireTask<T> t(
this, transitionInfo, weakToken.lock(), parentContext, runTaskHolder);
991 auto ownModuleTask = std::make_shared<DestroyTask>(moduleTask);
995 std::exception_ptr
const*)
mutable {
1008 if constexpr (T::isEvent_) {
1015 prefetchAsync<T>(
WaitingTaskHolder(*group, moduleTask),
token, parentContext, transitionInfo, T::transition_);
1020 template <
typename T>
1022 typename T::TransitionInfoType
const& transitionInfo,
1025 typename T::Context
const*
context) {
1026 std::exception_ptr exceptionPtr;
1030 exceptionPtr = *iEPtr;
1031 setException<T::isEvent_>(exceptionPtr);
1033 setPassed<T::isEvent_>();
1038 CMS_SA_ALLOW try { runModule<T>(transitionInfo, streamID, parentContext,
context); }
catch (...) {
1039 exceptionPtr = std::current_exception();
1043 return exceptionPtr;
1046 template <
typename T>
1048 typename T::TransitionInfoType
const& transitionInfo,
1052 typename T::Context
const*
context) {
1058 bool expected =
false;
1059 auto workStarted =
workStarted_.compare_exchange_strong(expected,
true);
1064 auto toDo = [
this,
info = transitionInfo, streamID, parentContext,
context, weakToken]() {
1065 std::exception_ptr exceptionPtr;
1071 this->runModule<T>(
info, streamID, parentContext,
context);
1073 exceptionPtr = std::current_exception();
1080 auto afterPrefetch =
1086 queue.push(*
group, toDo);
1093 WaitingTaskHolder(*
group, afterPrefetch), transitionInfo.eventSetupImpl(), T::transition_, serviceToken);
1097 queue.push(*
group, toDo);
1105 template <
typename T>
1109 typename T::Context
const*
context) {
1115 if constexpr (T::isEvent_) {
1116 timesRun_.fetch_add(1, std::memory_order_relaxed);
1126 setPassed<T::isEvent_>();
1128 setFailed<T::isEvent_>();
1135 setException<T::isEvent_>(std::current_exception());
1136 std::rethrow_exception(cached_exception_);
1138 rc = setPassed<T::isEvent_>();
1145 template <
typename T>
1149 typename T::Context
const*
context) {
1151 std::exception_ptr
const* prefetchingException =
nullptr;
1152 return runModuleAfterAsyncPrefetch<T>(prefetchingException, transitionInfo, streamID, parentContext,
context);
std::exception_ptr runModuleDirectly(typename T::TransitionInfoType const &, StreamID, ParentContext const &, typename T::Context const *)
static SerialTaskQueue * enableGlobalQueue(Worker *)
static SerialTaskQueue * pauseGlobalQueue(Worker *iWorker)
virtual bool hasAcquire() const =0
std::atomic< int > timesVisited_
virtual void implDoAcquire(EventTransitionInfo const &, ModuleCallingContext const *, WaitingTaskWithArenaHolder &)=0
ServiceToken lock() const
virtual bool wantsStreamRuns() const =0
void push(oneapi::tbb::task_group &iGroup, T &&iAction)
asynchronously pushes functor iAction into queue
virtual bool implDoBeginProcessBlock(ProcessBlockPrincipal const &, ModuleCallingContext const *)=0
void resetModuleDescription(ModuleDescription const *)
void push(oneapi::tbb::task_group &iG, F &&iF)
static SerialTaskQueue * pauseGlobalQueue(Worker *)
T::Context const * m_context
ModuleDescription const * description() const
static bool call(Worker *iWorker, StreamID, EventTransitionInfo const &info, ActivityRegistry *, ModuleCallingContext const *mcc, Arg::Context const *)
std::atomic< int > numberOfPathsLeftToRun_
void exceptionContext(cms::Exception &, ESModuleCallingContext const &)
virtual bool hasAccumulator() const =0
virtual void preActionBeforeRunEventAsync(WaitingTaskHolder iTask, ModuleCallingContext const &moduleCallingContext, Principal const &iPrincipal) const =0
StreamContext const * getStreamContext() const
std::exception_ptr setException(std::exception_ptr iException)
static bool needToRunSelection(Worker const *iWorker)
static SerialTaskQueue * enableGlobalQueue(Worker *)
static SerialTaskQueue * pauseGlobalQueue(Worker *iWorker)
static bool call(Worker *iWorker, StreamID, LumiTransitionInfo const &info, ActivityRegistry *actReg, ModuleCallingContext const *mcc, Arg::Context const *context)
void setEarlyDeleteHelper(EarlyDeleteHelper *iHelper)
AcquireTask(Worker *worker, EventTransitionInfo const &eventTransitionInfo, ServiceToken const &token, ParentContext const &parentContext, WaitingTaskWithArenaHolder holder)
static bool call(Worker *iWorker, StreamID, RunTransitionInfo const &info, ActivityRegistry *actReg, ModuleCallingContext const *mcc, Arg::Context const *context)
static bool wantsTransition(Worker const *iWorker)
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
static void esPrefetchAsync(Worker *worker, WaitingTaskHolder waitingTask, ServiceToken const &token, LumiTransitionInfo const &info, Transition transition)
static bool needToRunSelection(Worker const *iWorker)
ParentContext const m_parentContext
static bool call(Worker *iWorker, StreamID, ProcessBlockTransitionInfo const &info, ActivityRegistry *actReg, ModuleCallingContext const *mcc, Arg::Context const *context)
ParentContext const m_parentContext
static SerialTaskQueue * enableGlobalQueue(Worker *)
std::atomic< int > timesExcept_
static bool wantsTransition(Worker const *iWorker)
oneapi::tbb::task_group * m_group
std::atomic< bool > workStarted_
static bool needToRunSelection(Worker const *iWorker)
static SerialTaskQueue * pauseGlobalQueue(Worker *iWorker)
virtual bool implDoEnd(RunTransitionInfo const &, ModuleCallingContext const *)=0
OccurrenceTraits< RunPrincipal, BranchActionGlobalEnd > Arg
std::atomic< int > timesFailed_
bool needsESPrefetching(Transition iTrans) const noexcept
WaitingTask * m_runModuleTask
virtual void implRespondToCloseInputFile(FileBlock const &fb)=0
std::shared_ptr< ActivityRegistry > actReg_
static SerialTaskQueue * pauseGlobalQueue(Worker *iWorker)
static SerialTaskQueue * enableGlobalQueue(Worker *)
virtual std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom(BranchType) const =0
void doWorkAsync(WaitingTaskHolder, typename T::TransitionInfoType const &, ServiceToken const &, StreamID, ParentContext const &, typename T::Context const *)
void runAcquireAfterAsyncPrefetch(std::exception_ptr const *, EventTransitionInfo const &, ParentContext const &, WaitingTaskWithArenaHolder)
TaskQueueAdaptor(SerialTaskQueueChain *iChain)
static bool needToRunSelection(Worker const *iWorker)
static SerialTaskQueue * enableGlobalQueue(Worker *)
static SerialTaskQueue * enableGlobalQueue(Worker *)
virtual void updateLookup(BranchType iBranchType, ProductResolverIndexHelper const &)=0
virtual void implRespondToCloseOutputFile()=0
ActivityRegistry * activityRegistry()
static bool call(Worker *iWorker, StreamID id, RunTransitionInfo const &info, ActivityRegistry *actReg, ModuleCallingContext const *mcc, Arg::Context const *context)
void prePrefetchSelectionAsync(oneapi::tbb::task_group &, WaitingTask *task, ServiceToken const &, StreamID stream, void const *)
void beginStream(StreamID id, StreamContext &streamContext)
uint32_t T const *__restrict__ uint32_t const *__restrict__ int32_t int Histo::index_type cudaStream_t stream
EventTransitionInfo m_eventTransitionInfo
TaskQueueAdaptor()=default
void reset()
Resets access to the resource so that added tasks will wait.
SerialTaskQueueChain * serial_
static bool call(Worker *iWorker, StreamID id, RunTransitionInfo const &info, ActivityRegistry *actReg, ModuleCallingContext const *mcc, Arg::Context const *context)
virtual std::string workerType() const =0
ExceptionToActionTable const * actions_
virtual std::vector< ESProxyIndex > const & esItemsToGetFrom(Transition) const =0
static bool needToRunSelection(Worker const *iWorker)
LimitedTaskQueue * limited_
void setContext(State state, ParentContext const &parent, ModuleCallingContext const *previousOnThread)
bool ranAcquireWithoutException_
void setActivityRegistry(std::shared_ptr< ActivityRegistry > areg)
virtual bool implDoBegin(RunTransitionInfo const &, ModuleCallingContext const *)=0
virtual void itemsToGet(BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const =0
oneapi::tbb::task_group * m_group
ModuleCallingContext moduleCallingContext_
AcquireTask(Worker *, typename T::TransitionInfoType const &, ServiceToken const &, ParentContext const &, WaitingTaskWithArenaHolder)
void prePrefetchSelectionAsync(oneapi::tbb::task_group &, WaitingTask *task, ServiceToken const &, StreamID stream, EventPrincipal const *)
std::exception_ptr cached_exception_
static SerialTaskQueue * enableGlobalQueue(Worker *)
virtual bool implDoPrePrefetchSelection(StreamID, EventPrincipal const &, ModuleCallingContext const *)=0
virtual std::vector< ESRecordIndex > const & esRecordsToGetFrom(Transition) const =0
oneapi::tbb::task_group * group() const noexcept
static SerialTaskQueue * pauseGlobalQueue(Worker *iWorker)
virtual bool implDo(EventTransitionInfo const &, ModuleCallingContext const *)=0
static bool needToRunSelection(Worker const *iWorker)
virtual void selectInputProcessBlocks(ProductRegistry const &, ProcessBlockHelperBase const &)=0
static bool needToRunSelection(Worker const *iWorker)
void doneWaiting(std::exception_ptr iPtr)
Signals that the resource is now available and tasks should be spawned.
bool resume()
Resumes processing if the queue was paused.
static bool wantsTransition(Worker const *iWorker)
EnableQueueGuard(EnableQueueGuard &&iGuard)
Worker & operator=(Worker const &)=delete
static bool needToRunSelection(Worker const *iWorker)
edm::WaitingTaskList waitingTasks_
T::TransitionInfoType m_transitionInfo
virtual void implRegisterThinnedAssociations(ProductRegistry const &, ThinnedAssociationsHelper &)=0
static void esPrefetchAsync(Worker *worker, WaitingTaskHolder waitingTask, ServiceToken const &token, RunTransitionInfo const &info, Transition transition)
static SerialTaskQueue * enableGlobalQueue(Worker *)
ServiceWeakToken m_serviceToken
virtual bool implDoStreamBegin(StreamID, RunTransitionInfo const &, ModuleCallingContext const *)=0
static bool wantsTransition(Worker const *iWorker)
virtual bool wantsInputProcessBlocks() const =0
virtual void resolvePutIndicies(BranchType iBranchType, std::unordered_multimap< std::string, std::tuple< TypeID const *, const char *, edm::ProductResolverIndex >> const &iIndicies)=0
static void esPrefetchAsync(Worker *worker, WaitingTaskHolder waitingTask, ServiceToken const &token, LumiTransitionInfo const &info, Transition transition)
BranchType const & branchType() const
virtual bool wantsProcessBlocks() const =0
static void esPrefetchAsync(Worker *, WaitingTaskHolder, ServiceToken const &, ProcessBlockTransitionInfo const &, Transition)
OccurrenceTraits< RunPrincipal, BranchActionGlobalBegin > Arg
static void esPrefetchAsync(Worker *worker, WaitingTaskHolder waitingTask, ServiceToken const &token, RunTransitionInfo const &info, Transition transition)
ModuleDescription const * moduleDescription() const
EnableQueueGuard(SerialTaskQueue *iQueue)
virtual std::vector< ConsumesInfo > consumesInfo() const =0
void add(oneapi::tbb::task_group *, WaitingTask *)
Adds task to the waiting list.
void registerThinnedAssociations(ProductRegistry const ®istry, ThinnedAssociationsHelper &helper)
static bool wantsTransition(Worker const *iWorker)
#define CMS_THREAD_GUARD(_var_)
static SerialTaskQueue * pauseGlobalQueue(Worker *iWorker)
Worker(ModuleDescription const &iMD, ExceptionToActionTable const *iActions)
virtual void itemsToGetForSelection(std::vector< ProductResolverIndexAndSkipBit > &) const =0
FunctorWaitingTask< F > * make_waiting_task(F f)
std::atomic< State > state_
static SerialTaskQueue * enableGlobalQueue(Worker *)
static SerialTaskQueue * enableGlobalQueue(Worker *)
void callWhenDoneAsync(WaitingTaskHolder task)
void esPrefetchAsync(WaitingTaskHolder, EventSetupImpl const &, Transition, ServiceToken const &)
WaitingTaskWithArenaHolder m_holder
static bool needToRunSelection(Worker const *iWorker)
static bool call(Worker *iWorker, StreamID, RunTransitionInfo const &info, ActivityRegistry *actReg, ModuleCallingContext const *mcc, Arg::Context const *context)
virtual void implEndJob()=0
static SerialTaskQueue * pauseGlobalQueue(Worker *iWorker)
static bool wantsTransition(Worker const *iWorker)
static bool wantsTransition(Worker const *iWorker)
static bool wantsTransition(Worker const *iWorker)
bool shouldRethrowException(std::exception_ptr iPtr, ParentContext const &parentContext, bool isEvent) const
ServiceWeakToken m_serviceToken
HandleExternalWorkExceptionTask(Worker *worker, oneapi::tbb::task_group *group, WaitingTask *runModuleTask, ParentContext const &parentContext)
virtual Types moduleType() const =0
static SerialTaskQueue * pauseGlobalQueue(Worker *iWorker)
static bool wantsTransition(Worker const *iWorker)
static bool call(Worker *iWorker, StreamID, ProcessBlockTransitionInfo const &info, ActivityRegistry *actReg, ModuleCallingContext const *mcc, Arg::Context const *context)
static bool wantsTransition(Worker const *iWorker)
std::exception_ptr runModuleAfterAsyncPrefetch(std::exception_ptr const *, typename T::TransitionInfoType const &, StreamID, ParentContext const &, typename T::Context const *)
TaskQueueAdaptor(LimitedTaskQueue *iLimited)
OccurrenceTraits< EventPrincipal, BranchActionStreamBegin > Arg
void doWorkNoPrefetchingAsync(WaitingTaskHolder, typename T::TransitionInfoType const &, ServiceToken const &, StreamID, ParentContext const &, typename T::Context const *)
virtual bool implNeedToRunSelection() const =0
virtual bool implDoEndProcessBlock(ProcessBlockPrincipal const &, ModuleCallingContext const *)=0
virtual bool implDoStreamEnd(StreamID, RunTransitionInfo const &, ModuleCallingContext const *)=0
virtual void modulesWhoseProductsAreConsumed(std::array< std::vector< ModuleDescription const * > *, NumBranchTypes > &modules, std::vector< ModuleProcessName > &modulesInPreviousProcesses, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc) const =0
virtual TaskQueueAdaptor serializeRunModule()=0
static SerialTaskQueue * pauseGlobalQueue(Worker *iWorker)
virtual SerialTaskQueue * globalRunsQueue()=0
OccurrenceTraits< RunPrincipal, BranchActionStreamBegin > Arg
virtual void implBeginJob()=0
void respondToOpenInputFile(FileBlock const &fb)
static SerialTaskQueue * pauseGlobalQueue(Worker *iWorker)
void respondToCloseOutputFile()
static SerialTaskQueue * enableGlobalQueue(Worker *iWorker)
void skipOnPath(EventPrincipal const &iEvent)
static bool call(Worker *iWorker, StreamID id, LumiTransitionInfo const &info, ActivityRegistry *actReg, ModuleCallingContext const *mcc, Arg::Context const *context)
virtual void implBeginStream(StreamID)=0
virtual bool implDoAccessInputProcessBlock(ProcessBlockPrincipal const &, ModuleCallingContext const *)=0
ProcessBlockPrincipal & principal()
EventSetupImpl const & eventSetupImpl() const
virtual void implEndStream(StreamID)=0
virtual void doClearModule()=0
void edPrefetchAsync(WaitingTaskHolder, ServiceToken const &, Principal const &) const
void respondToCloseInputFile(FileBlock const &fb)
virtual std::vector< ProductResolverIndex > const & itemsShouldPutInEvent() const =0
virtual bool wantsStreamLuminosityBlocks() const =0
virtual void convertCurrentProcessAlias(std::string const &processName)=0
bool runModule(typename T::TransitionInfoType const &, StreamID, ParentContext const &, typename T::Context const *)
void emitPostModuleEventPrefetchingSignal()
ParentContext const m_parentContext
static SerialTaskQueue * enableGlobalQueue(Worker *iWorker)
static bool wantsTransition(Worker const *iWorker)
static void esPrefetchAsync(Worker *worker, WaitingTaskHolder waitingTask, ServiceToken const &token, LumiTransitionInfo const &info, Transition transition)
EventSetupImpl const & eventSetupImpl() const
static void esPrefetchAsync(Worker *worker, WaitingTaskHolder waitingTask, ServiceToken const &token, EventTransitionInfo const &info, Transition transition)
static SerialTaskQueue * pauseGlobalQueue(Worker *iWorker)
std::atomic< int > timesPassed_
static bool needToRunSelection(Worker const *iWorker)
void runAcquire(EventTransitionInfo const &, ParentContext const &, WaitingTaskWithArenaHolder &)
void endStream(StreamID id, StreamContext &streamContext)
void postDoEvent(EventPrincipal const &)
virtual bool wantsGlobalLuminosityBlocks() const =0
static void esPrefetchAsync(Worker *worker, WaitingTaskHolder waitingTask, ServiceToken const &token, RunTransitionInfo const &info, Transition transition)
static bool call(Worker *iWorker, StreamID id, LumiTransitionInfo const &info, ActivityRegistry *actReg, ModuleCallingContext const *mcc, Arg::Context const *context)
static bool call(Worker *iWorker, StreamID, LumiTransitionInfo const &info, ActivityRegistry *actReg, ModuleCallingContext const *mcc, Arg::Context const *context)
static bool needToRunSelection(Worker const *iWorker)
auto wrap(F iFunc) -> decltype(iFunc())
edm::propagate_const< EarlyDeleteHelper * > earlyDeleteHelper_
static void esPrefetchAsync(Worker *worker, WaitingTaskHolder waitingTask, ServiceToken const &token, LumiTransitionInfo const &info, Transition transition)
void prefetchAsync(WaitingTaskHolder, ServiceToken const &, ParentContext const &, typename T::TransitionInfoType const &, Transition)
static bool wantsTransition(Worker const *iWorker)
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
std::atomic< int > timesRun_
std::exception_ptr const * exceptionPtr() const
Returns exception thrown by dependent task.
static bool needToRunSelection(Worker const *iWorker)
static bool call(Worker *iWorker, StreamID, ProcessBlockTransitionInfo const &info, ActivityRegistry *actReg, ModuleCallingContext const *mcc, Arg::Context const *context)
virtual void implRespondToOpenInputFile(FileBlock const &fb)=0
static void esPrefetchAsync(Worker *, WaitingTaskHolder, ServiceToken const &, ProcessBlockTransitionInfo const &, Transition)
OccurrenceTraits< RunPrincipal, BranchActionStreamEnd > Arg
static void esPrefetchAsync(Worker *, WaitingTaskHolder, ServiceToken const &, ProcessBlockTransitionInfo const &, Transition)
virtual SerialTaskQueue * globalLuminosityBlocksQueue()=0
EnableQueueGuard & operator=(EnableQueueGuard const &)=delete
virtual ConcurrencyTypes moduleConcurrencyType() const =0
std::exception_ptr handleExternalWorkException(std::exception_ptr const *iEPtr, ParentContext const &parentContext)
EventSetupImpl const & eventSetupImpl() const
virtual bool wantsGlobalRuns() const =0
static void esPrefetchAsync(Worker *worker, WaitingTaskHolder waitingTask, ServiceToken const &token, RunTransitionInfo const &info, Transition transition)
void push(oneapi::tbb::task_group &iGroup, T &&iAction)
asynchronously pushes functor iAction into queue
RunModuleTask(Worker *worker, typename T::TransitionInfoType const &transitionInfo, ServiceToken const &token, StreamID streamID, ParentContext const &parentContext, typename T::Context const *context, oneapi::tbb::task_group *iGroup)
virtual void itemsMayGet(BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const =0