13 #include <unordered_set> 14 #include <unordered_map> 17 #include <boost/format.hpp> 18 #include <boost/range/irange.hpp> 44 template <
class Rep,
class Period>
45 double ms(std::chrono::duration<Rep, Period> duration)
47 return std::chrono::duration_cast<std::chrono::duration<double, std::milli>>(duration).
count();;
51 template <
class Rep,
class Period>
52 double ms(boost::chrono::duration<Rep, Period> duration)
54 return boost::chrono::duration_cast<boost::chrono::duration<double, boost::milli>>(duration).
count();;
73 time_real = boost::chrono::nanoseconds::zero();
150 paths(process.paths_.
size()),
151 endpaths(process.endPaths_.
size())
168 for (
unsigned int i: boost::irange(0ul,
paths.size()))
171 for (
unsigned int i: boost::irange(0ul,
endpaths.size()))
191 highlight( groups.
size() ),
217 for (
unsigned int i: boost::irange(0ul,
highlight.size()))
220 for (
unsigned int i: boost::irange(0ul,
modules.size()))
223 for (
unsigned int i: boost::irange(0ul,
processes.size()))
246 #ifdef DEBUG_THREAD_CONCURRENCY 247 id = std::this_thread::get_id();
248 #endif // DEBUG_THREAD_CONCURRENCY 255 #ifdef DEBUG_THREAD_CONCURRENCY 256 assert(std::this_thread::get_id() ==
id);
257 #endif // DEBUG_THREAD_CONCURRENCY 261 store.
time_real = new_time_real - time_real;
262 time_thread = new_time_thread;
263 time_real = new_time_real;
293 unsigned int lumisections,
296 int bins = (
int) std::ceil(range / resolution);
300 name +
" time_thread",
301 title +
" processing time (cpu)",
310 title +
" processing time (real)",
314 time_real_->SetXTitle(
"processing time [ms]");
321 name +
" time_thread_byls",
322 title +
" processing time (cpu) vs. lumisection",
323 lumisections, 0.5, lumisections + 0.5,
331 name +
" time_real_byls",
332 title +
" processing time (real) vs. lumisection",
333 lumisections, 0.5, lumisections + 0.5,
384 module_time_thread_total_(
nullptr),
385 module_time_real_total_(
nullptr)
406 unsigned int lumisections,
412 total_.
book(booker,
"path", path.
name_, range, resolution, lumisections, byls);
418 bins + 1, -0.5, bins + 0.5
422 "module_time_thread_total",
423 "total module time (cpu)",
424 bins, -0.5, bins - 0.5
428 "module_time_real_total",
429 "total module time (real)",
430 bins, -0.5, bins - 0.5
433 for (
unsigned int bin: boost::irange(0u, bins)) {
452 for (
unsigned int i = 0;
i < path.
last; ++
i) {
465 paths_(process.paths_.
size()),
466 endpaths_(process.endPaths_.
size())
486 double event_resolution,
488 double path_resolution,
489 unsigned int lumisections,
494 "process " + process.
name_,
"process " + process.
name_,
500 for (
unsigned int id: boost::irange(0ul,
paths_.size()))
509 for (
unsigned int id: boost::irange(0ul,
endpaths_.size()))
528 for (
unsigned int id: boost::irange(0ul,
paths_.size()))
532 for (
unsigned int id: boost::irange(0ul,
endpaths_.size()))
538 highlight_(groups.
size()),
539 modules_(job.
size()),
563 std::vector<GroupOfModules>
const& groups,
565 double event_resolution,
567 double path_resolution,
569 double module_resolution,
570 unsigned int lumisections,
592 for (
unsigned int group: boost::irange(0ul, groups.size())) {
603 for (
unsigned int pid: boost::irange(0ul, job.
processes().size())) {
616 for (
unsigned int id:
process.modules_)
642 for (
unsigned int id: boost::irange(0ul,
modules_.size()))
645 for (
unsigned int pid: boost::irange(0ul,
processes_.size()))
664 enable_dqm_( config.getUntrackedParameter<bool>(
"enableDQM" ) ),
666 enable_dqm_byls_( config.getUntrackedParameter<bool>(
"enableDQMbyLumiSection" ) ),
753 auto const&
module = stream.modules[
id];
767 return ms(stream.total.time_real);
775 return ms(stream.processes[pid].total.time_real);
823 for (
unsigned int id: boost::irange(0ul, desc.paths_.size()))
824 if (desc.paths_[
id].name_ == path)
825 return ms(stream.processes[
pid].paths[
id].total.time_real);
826 for (
unsigned int id: boost::irange(0ul, desc.endPaths_.size()))
827 if (desc.paths_[
id].name_ == path)
828 return ms(stream.processes[
pid].endpaths[
id].total.time_real);
841 for (
unsigned int id: boost::irange(0ul, desc.paths_.size()))
842 if (desc.paths_[
id].name_ == path)
843 return ms(stream.processes[pid].paths[
id].total.time_real);
844 for (
unsigned int id: boost::irange(0ul, desc.endPaths_.size()))
845 if (desc.paths_[
id].name_ == path)
846 return ms(stream.processes[pid].endpaths[
id].total.time_real);
858 return ms(stream.highlight[
group].time_real);
868 LogDebug(
"FastTimerService") <<
"The FastTimerService received is currently not monitoring the signal \"" << signal <<
"\".\n";
876 edm::LogWarning(
"FastTimerService") <<
"The FastTimerService received the unsupported signal \"" << signal <<
"\".\n" 877 <<
"Please report how to reproduce the issue to cms-hlt@cern.ch .";
1156 template <
typename T>
1159 out <<
"FastReport --------------------------- Event Summary ---------------------------\n";
1160 out <<
"FastReport CPU time Real time Modules\n";
1163 out <<
boost::format(
"FastReport %10.3f ms %10.3f ms %s\n") %
ms(
source.total.time_thread) %
ms(
source.total.time_real) % source_d.moduleLabel();
1167 out <<
boost::format(
"FastReport %10.3f ms %10.3f ms process %s\n") %
ms(
proc.total.time_thread) %
ms(
proc.total.time_real) % proc_d.name_;
1168 for (
unsigned int m: proc_d.modules_) {
1171 out <<
boost::format(
"FastReport %10.3f ms %10.3f ms %s\n") %
ms(
module.total.time_thread) %
ms(
module.total.time_real) % module_d.moduleLabel();
1176 out <<
"FastReport CPU time Real time Processes and Paths\n";
1177 out <<
boost::format(
"FastReport %10.3f ms %10.3f ms %s\n") %
ms(
source.total.time_thread) %
ms(
source.total.time_real) % source_d.moduleLabel();
1181 out <<
boost::format(
"FastReport %10.3f ms %10.3f ms process %s\n") %
ms(
proc.total.time_thread) %
ms(
proc.total.time_real) % proc_d.name_;
1182 for (
unsigned int p = 0;
p <
proc.paths.size(); ++
p) {
1183 auto const&
name = proc_d.paths_[
p].name_;
1185 out <<
boost::format(
"FastReport %10.3f ms %10.3f ms %s (only scheduled modules)\n") %
ms(
path.active.time_thread) %
ms(
path.active.time_real) %
name;
1186 out <<
boost::format(
"FastReport %10.3f ms %10.3f ms %s (including dependencies)\n") %
ms(
path.total.time_thread) %
ms(
path.total.time_real) %
name;
1188 for (
unsigned int p = 0;
p <
proc.endpaths.size(); ++
p) {
1189 auto const&
name = proc_d.endPaths_[
p].name_;
1191 out <<
boost::format(
"FastReport %10.3f ms %10.3f ms %s (only scheduled modules)\n") %
ms(
path.active.time_thread) %
ms(
path.active.time_real) %
name;
1192 out <<
boost::format(
"FastReport %10.3f ms %10.3f ms %s (including dependencies)\n") %
ms(
path.total.time_thread) %
ms(
path.total.time_real) %
name;
1198 out <<
"FastReport CPU time Real time Highlighted modules\n";
1202 out <<
boost::format(
"FastReport %10.3f ms %10.3f ms %s\n") %
ms(
module.total.time_thread) %
ms(
module.total.time_real) % module_d.moduleLabel();
1209 template <
typename T>
1212 out <<
"FastReport ";
1213 if (label.size() < 60)
1214 for (
unsigned int i = (60-label.size()) / 2;
i > 0; --
i)
1216 out <<
' ' << label <<
" Summary ";
1217 if (label.size() < 60)
1218 for (
unsigned int i = (59-label.size()) / 2;
i > 0; --
i)
1221 out <<
"FastReport CPU time avg. when run Real time avg. when run Modules\n";
1224 out <<
boost::format(
"FastReport %10.3f ms %10.3f ms %10.3f ms %10.3f ms %s\n")
1227 % source_d.moduleLabel();
1231 out <<
boost::format(
"FastReport %10.3f ms %10.3f ms process %s\n")
1235 for (
unsigned int m: proc_d.modules_) {
1238 out <<
boost::format(
"FastReport %10.3f ms %10.3f ms %10.3f ms %10.3f ms %s\n")
1241 % module_d.moduleLabel();
1244 out <<
boost::format(
"FastReport %10.3f ms %10.3f ms total\n")
1248 out <<
"FastReport CPU time Real time Processes and Paths\n";
1252 % source_d.moduleLabel();
1256 out <<
boost::format(
"FastReport %10.3f ms %10.3f ms process %s\n")
1260 for (
unsigned int p = 0;
p <
proc.paths.size(); ++
p) {
1261 auto const&
name = proc_d.paths_[
p].name_;
1263 out <<
boost::format(
"FastReport %10.3f ms %10.3f ms %s (only scheduled modules)\n")
1267 out <<
boost::format(
"FastReport %10.3f ms %10.3f ms %s (including dependencies)\n")
1272 for (
unsigned int p = 0;
p <
proc.endpaths.size(); ++
p) {
1273 auto const&
name = proc_d.endPaths_[
p].name_;
1275 out <<
boost::format(
"FastReport %10.3f ms %10.3f ms %s (only scheduled modules)\n")
1279 out <<
boost::format(
"FastReport %10.3f ms %10.3f ms %s (including dependencies)\n")
1285 out <<
boost::format(
"FastReport %10.3f ms %10.3f ms total\n")
1290 out <<
"FastReport CPU time avg. when run Real time avg. when run Highlighted modules\n";
1294 out <<
boost::format(
"FastReport %10.3f ms %10.3f ms %10.3f ms %10.3f ms %s\n")
1297 % module_d.moduleLabel();
1326 unsigned int old_value = check.fetch_add(1, std::memory_order_acq_rel);
1347 auto &
data = stream.processes[
pid].total;
1348 for (
unsigned int i:
process.modules_)
1349 data += stream.modules[
i].total;
1350 stream.total +=
data;
1360 stream.highlight[
group] += stream.modules[
i].total;
1396 unsigned int id = md.
id();
1400 ++stream.modules[
id].events;
1409 unsigned int id = pc.
pathID();
1412 data.status =
false;
1422 unsigned int id = pc.
pathID();
1427 unsigned int index =
path.modules_on_path_.empty() ? 0 : status.
index() + 1;
1428 data.last =
path.modules_on_path_.empty() ? 0 :
path.last_dependency_of_module_[status.
index()];
1430 for (
unsigned int i = 0;
i <
index; ++
i) {
1431 auto const&
module = stream.modules[
path.modules_on_path_[
i]];
1434 for (
unsigned int i = 0;
i <
data.last; ++
i) {
1435 auto const&
module = stream.modules[
path.modules_and_dependencies_[
i]];
1450 unsigned int id = md.
id();
1455 ++stream.modules[
id].events;
1608 desc.
addUntracked<
bool>(
"enableDQMbyLumiSection",
false);
1609 desc.
addUntracked<
bool>(
"enableDQMbyProcesses",
false);
1613 desc.
addUntracked<
double>(
"dqmPathTimeResolution", 0.5);
1614 desc.
addUntracked<
double>(
"dqmModuleTimeRange", 40. );
1615 desc.
addUntracked<
double>(
"dqmModuleTimeResolution", 0.2);
1616 desc.
addUntracked<
unsigned>(
"dqmLumiSectionsRange", 2500 );
1620 highlightModulesDescription.
addUntracked<std::vector<std::string>>(
"modules", {});
1621 highlightModulesDescription.addUntracked<
std::string>(
"label",
"producers");
1641 descriptions.
add(
"FastTimerService", desc);
void preGlobalBeginRun(edm::GlobalContext const &)
void preModuleEventDelayedGet(edm::StreamContext const &, edm::ModuleCallingContext const &)
const bool print_run_summary_
unsigned int maxNumberOfThreads() const
void fill(Resources const &, unsigned int lumisection)
void setComment(std::string const &value)
void postStreamBeginRun(edm::StreamContext const &)
double queryEventTime(edm::StreamID) const
void postGlobalEndLumi(edm::GlobalContext const &)
void postGlobalBeginLumi(edm::GlobalContext const &)
void postStreamEndLumi(edm::StreamContext const &)
std::vector< edm::ParameterSet > highlight_module_psets_
const double dqm_pathtime_resolution_
void postModuleGlobalEndLumi(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void preEventReadFromSource(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preGlobalEndRun(edm::GlobalContext const &)
void book(DQMStore::IBooker &, std::string const &name, std::string const &title, double range, double resolution, unsigned int lumisections, bool byls)
void preBeginJob(edm::PathsAndConsumesOfModulesBase const &, edm::ProcessContext const &)
const double dqm_moduletime_range_
void watchPrePathEvent(PrePathEvent::slot_type const &iSlot)
void watchPreallocate(Preallocate::slot_type const &iSlot)
const double dqm_moduletime_resolution_
unsigned int concurrent_threads_
std::vector< unsigned int > modules_and_dependencies_
void postEventReadFromSource(edm::StreamContext const &, edm::ModuleCallingContext const &)
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
double queryHighlightTime(edm::StreamID sid, std::string const &label) const
void watchPostEndJob(PostEndJob::slot_type const &iSlot)
void postModuleGlobalEndRun(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void postModuleEvent(edm::StreamContext const &, edm::ModuleCallingContext const &)
std::vector< GroupOfModules > highlight_modules_
ResourcesPerJob job_summary_
MonitorElement * bookProfile(Args &&...args)
PlotsPerJob(ProcessCallGraph const &job, std::vector< GroupOfModules > const &groups)
void watchPreModuleEvent(PreModuleEvent::slot_type const &iSlot)
unsigned int processId(edm::ProcessContext const &) const
TrainProcessor *const proc
PlotsPerProcess(ProcessCallGraph::ProcessType const &)
const double dqm_eventtime_range_
void preGlobalEndLumi(edm::GlobalContext const &)
std::vector< ResourcesPerPath > endpaths
TH1D * module_time_real_total_
void watchPostEvent(PostEvent::slot_type const &iSlot)
const std::string & pwd(void)
double queryModuleTime_(edm::StreamID, unsigned int id) const
bool isFirstSubprocess(edm::StreamContext const &)
void watchPreSourceConstruction(PreSourceConstruction::slot_type const &iSlot)
const bool enable_dqm_bynproc_
unsigned int concurrent_runs_
void watchPostStreamEndLumi(PostStreamEndLumi::slot_type const &iSlot)
boost::chrono::nanoseconds time_real
void watchPostPathEvent(PostPathEvent::slot_type const &iSlot)
void watchPostModuleEvent(PostModuleEvent::slot_type const &iSlot)
TH1D * getTH1D(void) const
std::unique_ptr< std::atomic< unsigned int >[]> subprocess_global_run_check_
void watchPostSourceEvent(PostSourceEvent::slot_type const &iSlot)
std::vector< ResourcesPerJob > streams_
RunIndex const & runIndex() const
void postPathEvent(edm::StreamContext const &, edm::PathContext const &, edm::HLTPathStatus const &)
std::vector< PlotsPerElement > highlight_
void preModuleGlobalBeginLumi(edm::GlobalContext const &, edm::ModuleCallingContext const &)
ResourcesPerProcess & operator+=(ResourcesPerProcess const &other)
LuminosityBlockNumber_t luminosityBlock() const
const bool print_job_summary_
std::string const & moduleLabel() const
edm::ModuleDescription const & source() const
static unsigned int getUniqueID()
Returns a unique id each time called. Intended to be passed to ModuleDescription's constructor's modI...
tbb::enumerable_thread_specific< Measurement, tbb::cache_aligned_allocator< Measurement >, tbb::ets_key_per_instance > threads_
void postStreamBeginLumi(edm::StreamContext const &)
void printSummary(T &out, ResourcesPerJob const &, std::string const &label) const
RunIndex const & runIndex() const
unsigned int maxNumberOfStreams() const
ResourcesPerProcess operator+(ResourcesPerProcess const &other) const
ResourcesPerJob operator+(ResourcesPerJob const &other) const
std::vector< ResourcesPerModule > modules
void printEvent(T &out, ResourcesPerJob const &) const
void postModuleStreamEndLumi(edm::StreamContext const &, edm::ModuleCallingContext const &)
std::mutex summary_mutex_
TProfile * time_thread_byls_
ResourcesPerJob & operator+=(ResourcesPerJob const &other)
std::vector< PlotsPerJob > stream_plots_
void fill(ProcessCallGraph::ProcessType const &, ResourcesPerJob const &, ResourcesPerProcess const &, unsigned int ls)
double queryModuleTime(edm::StreamID, const edm::ModuleDescription &module) const
TProfile * time_real_byls_
void prePathEvent(edm::StreamContext const &, edm::PathContext const &)
void book(DQMStore::IBooker &, ProcessCallGraph const &, ProcessCallGraph::PathType const &, double range, double resolution, unsigned int lumisections, bool byls)
std::vector< ResourcesPerJob > run_summary_
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
FastTimerService(const edm::ParameterSet &, edm::ActivityRegistry &)
void preModuleStreamEndLumi(edm::StreamContext const &, edm::ModuleCallingContext const &)
void watchPreModuleEventDelayedGet(PreModuleEventDelayedGet::slot_type const &iSlot)
TH1D * module_time_thread_total_
void postEvent(edm::StreamContext const &)
std::unique_ptr< std::atomic< unsigned int >[]> subprocess_lumisection_check_
void preBeginJob(edm::PathsAndConsumesOfModulesBase const &, edm::ProcessContext const &)
void postGlobalEndRun(edm::GlobalContext const &)
ModuleDescription const * moduleDescription() const
std::unique_ptr< std::atomic< unsigned int >[]> subprocess_event_check_
void fill_fraction(Resources const &, Resources const &, unsigned int lumisection)
std::vector< ProcessType > const & processes() const
MonitorElement * book1D(Args &&...args)
ResourcesPerModule operator+(ResourcesPerModule const &other) const
const unsigned int dqm_lumisections_range_
void postStreamEndRun(edm::StreamContext const &)
std::vector< PathType > paths_
void preModuleEvent(edm::StreamContext const &, edm::ModuleCallingContext const &)
ResourcesPerPath & operator+=(ResourcesPerPath const &other)
std::vector< PlotsPerElement > modules_
ProcessType const & processDescription(unsigned int) const
ParameterDescriptionNode * addOptionalNode(ParameterDescriptionNode const &node, bool writeToCfi)
void book(DQMStore::IBooker &, ProcessCallGraph const &, std::vector< GroupOfModules > const &, double event_range, double event_resolution, double path_range, double path_resolution, double module_range, double module_resolution, unsigned int lumisections, bool bymodule, bool byls)
void preSourceConstruction(edm::ModuleDescription const &)
unsigned int pathID() const
format
Some error handling for the usage.
ProcessContext const * processContext() const
void watchPostStreamEndRun(PostStreamEndRun::slot_type const &iSlot)
void mergeAndResetMEsRunSummaryCache(uint32_t run, uint32_t streamId, uint32_t moduleId)
Resources operator+(Resources const &other) const
std::vector< Resources > highlight
const bool enable_dqm_bymodule_
void book(DQMStore::IBooker &, ProcessCallGraph const &, ProcessCallGraph::ProcessType const &, double event_range, double event_resolution, double path_range, double path_resolution, unsigned int lumisections, bool byls)
bin
set the eta bin as selection string.
StreamID const & streamID() const
void watchPreGlobalBeginRun(PreGlobalBeginRun::slot_type const &iSlot)
const double dqm_eventtime_resolution_
std::vector< PlotsPerPath > endpaths_
const bool enable_dqm_byls_
std::vector< PlotsPerProcess > processes_
void postModuleEventDelayedGet(edm::StreamContext const &, edm::ModuleCallingContext const &)
const bool print_event_summary_
unsigned int value() const
void setCurrentFolder(const std::string &fullpath)
void watchPostModuleEventDelayedGet(PostModuleEventDelayedGet::slot_type const &iSlot)
void postModuleStreamBeginLumi(edm::StreamContext const &, edm::ModuleCallingContext const &)
double querySourceTime(edm::StreamID) const
void preModuleStreamEndRun(edm::StreamContext const &, edm::ModuleCallingContext const &)
void postModuleStreamEndRun(edm::StreamContext const &, edm::ModuleCallingContext const &)
void postModuleStreamBeginRun(edm::StreamContext const &, edm::ModuleCallingContext const &)
TH1F * getTH1F(void) const
void watchPostGlobalEndRun(PostGlobalEndRun::slot_type const &iSlot)
void preSourceEvent(edm::StreamID)
boost::chrono::nanoseconds time_thread
void watchPreStreamBeginLumi(PreStreamBeginLumi::slot_type const &iSlot)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void preEvent(edm::StreamContext const &)
void watchPreBeginJob(PreBeginJob::slot_type const &iSlot)
convenience function for attaching to signal
void postGlobalBeginRun(edm::GlobalContext const &)
ProcessContext const * processContext() const
void preStreamBeginLumi(edm::StreamContext const &)
ResourcesPerProcess(ProcessCallGraph::ProcessType const &process)
void postSourceEvent(edm::StreamID)
void preModuleStreamBeginLumi(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preStreamEndRun(edm::StreamContext const &)
char data[epos_bytes_allocation]
void preModuleStreamBeginRun(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preStreamEndLumi(edm::StreamContext const &)
void watchPreStreamBeginRun(PreStreamBeginRun::slot_type const &iSlot)
void measure_and_store(Resources &store)
ResourcesPerModule & operator+=(ResourcesPerModule const &other)
std::vector< PathType > endPaths_
TProfile * getTProfile(void) const
void unsupportedSignal(std::string signal) const
void postModuleEventPrefetching(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preModuleGlobalEndLumi(edm::GlobalContext const &, edm::ModuleCallingContext const &)
unsigned int size() const
edm::ModuleDescription const & module(unsigned int module) const
void ignoredSignal(std::string signal) const
double queryPathTime(edm::StreamID, std::string const &path) const
void preGlobalBeginLumi(edm::GlobalContext const &)
unsigned int maxNumberOfConcurrentRuns() const
Resources & operator+=(Resources const &other)
void preModuleEventPrefetching(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preSourceConstruction(edm::ModuleDescription const &)
void preModuleGlobalEndRun(edm::GlobalContext const &, edm::ModuleCallingContext const &)
tbb::concurrent_unordered_set< std::string > unsupported_signals_
std::vector< PlotsPerPath > paths_
EventID const & eventID() const
void postModuleGlobalBeginRun(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void watchPreSourceEvent(PreSourceEvent::slot_type const &iSlot)
std::vector< ResourcesPerProcess > processes
double queryModuleTimeByLabel(edm::StreamID, std::string const &module) const
boost::date_time::subsecond_duration< boost::posix_time::time_duration, 1000000000 > nanoseconds
ProcessCallGraph callgraph_
void mergeAndResetMEsLuminositySummaryCache(uint32_t run, uint32_t lumi, uint32_t streamId, uint32_t moduleId)
void postModuleGlobalBeginLumi(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void preStreamBeginRun(edm::StreamContext const &)
std::vector< ResourcesPerPath > paths
MonitorElement * book1DD(Args &&...args)
bool isSubProcess() const
ResourcesPerPath operator+(ResourcesPerPath const &other) const
void preModuleGlobalBeginRun(edm::GlobalContext const &, edm::ModuleCallingContext const &)
ParameterDescriptionBase * addVPSetUntracked(U const &iLabel, ParameterSetDescription const &validator, std::vector< ParameterSet > const &defaults)
static std::string const source
std::unique_ptr< std::atomic< unsigned int >[]> subprocess_run_check_
std::vector< unsigned int > modules_
unsigned int concurrent_streams_
bool isLastSubprocess(std::atomic< unsigned int > &check)
void preallocate(edm::service::SystemBounds const &)
void fill(ProcessCallGraph const &, ResourcesPerJob const &, unsigned int ls)
const double dqm_pathtime_range_
void watchPostBeginJob(PostBeginJob::slot_type const &iSlot)
convenience function for attaching to signal
void fill(ProcessCallGraph::PathType const &, ResourcesPerJob const &, ResourcesPerPath const &, unsigned int lumisection)
unsigned int index() const