9 #include <unordered_set> 10 #include <unordered_map> 13 #include <boost/format.hpp> 14 #include <boost/range/irange.hpp> 45 template <
class Rep,
class Period>
46 double ms(std::chrono::duration<Rep, Period> duration)
48 return std::chrono::duration_cast<std::chrono::duration<double, std::milli>>(duration).
count();;
52 template <
class Rep,
class Period>
53 double ms(boost::chrono::duration<Rep, Period> duration)
55 return boost::chrono::duration_cast<boost::chrono::duration<double, boost::milli>>(duration).
count();;
81 time_real = boost::chrono::nanoseconds::zero();
208 paths(process.paths_.
size()),
209 endpaths(process.endPaths_.
size())
226 for (
unsigned int i: boost::irange(0ul,
paths.size()))
229 for (
unsigned int i: boost::irange(0ul,
endpaths.size()))
248 highlight(groups.
size()),
276 event += other.
event;
278 for (
unsigned int i: boost::irange(0ul,
highlight.size()))
281 for (
unsigned int i: boost::irange(0ul,
modules.size()))
284 for (
unsigned int i: boost::irange(0ul,
processes.size()))
308 #ifdef DEBUG_THREAD_CONCURRENCY 309 id = std::this_thread::get_id();
310 #endif // DEBUG_THREAD_CONCURRENCY 319 #ifdef DEBUG_THREAD_CONCURRENCY 320 assert(std::this_thread::get_id() ==
id);
321 #endif // DEBUG_THREAD_CONCURRENCY 327 store.
time_real = new_time_real - time_real;
328 store.
allocated = new_allocated - allocated;
330 time_thread = new_time_thread;
331 time_real = new_time_real;
332 allocated = new_allocated;
333 deallocated = new_deallocated;
338 #ifdef DEBUG_THREAD_CONCURRENCY 339 assert(std::this_thread::get_id() ==
id);
340 #endif // DEBUG_THREAD_CONCURRENCY 346 store.
time_real += boost::chrono::duration_cast<boost::chrono::nanoseconds>(new_time_real - time_real).
count();
347 store.
allocated += new_allocated - allocated;
348 store.
deallocated += new_deallocated - deallocated;
349 time_thread = new_time_thread;
350 time_real = new_time_real;
351 allocated = new_allocated;
352 deallocated = new_deallocated;
366 unsigned int lumisections,
374 time_thread_ = booker.
book1D(
375 name +
" time_thread",
376 title +
" processing time (cpu)",
378 time_thread_.
setXTitle(
"processing time [ms]");
379 time_thread_.setYTitle(y_title_ms.c_str());
381 time_real_ = booker.
book1D(
383 title +
" processing time (real)",
385 time_real_.
setXTitle(
"processing time [ms]");
386 time_real_.setYTitle(y_title_ms.c_str());
390 allocated_ = booker.
book1D(
392 title +
" allocated memory",
395 allocated_.setYTitle(y_title_kB.c_str());
397 deallocated_ = booker.
book1D(
398 name +
" deallocated",
399 title +
" deallocated memory",
402 deallocated_.setYTitle(y_title_kB.c_str());
409 name +
" time_thread_byls",
410 title +
" processing time (cpu) vs. lumisection",
411 lumisections, 0.5, lumisections + 0.5,
414 time_thread_byls_.
setXTitle(
"lumisection");
415 time_thread_byls_.setYTitle(
"processing time [ms]");
418 name +
" time_real_byls",
419 title +
" processing time (real) vs. lumisection",
420 lumisections, 0.5, lumisections + 0.5,
423 time_real_byls_.
setXTitle(
"lumisection");
424 time_real_byls_.setYTitle(
"processing time [ms]");
429 name +
" allocated_byls",
430 title +
" allocated memory vs. lumisection",
431 lumisections, 0.5, lumisections + 0.5,
434 allocated_byls_.
setXTitle(
"lumisection");
435 allocated_byls_.setYTitle(
"memory [kB]");
438 name +
" deallocated_byls",
439 title +
" deallocated memory vs. lumisection",
440 lumisections, 0.5, lumisections + 0.5,
443 deallocated_byls_.
setXTitle(
"lumisection");
444 deallocated_byls_.setYTitle(
"memory [kB]");
452 TH1::StatOverflows(
true);
457 if (time_thread_byls_)
464 time_real_byls_.fill(lumisection,
ms(data.
time_real));
470 allocated_byls_.fill(lumisection, kB(data.
allocated));
475 if (deallocated_byls_)
476 deallocated_byls_.fill(lumisection, kB(data.
deallocated));
483 TH1::StatOverflows(
true);
488 if (time_thread_byls_)
501 allocated_byls_.fill(lumisection, kB(data.
allocated));
506 if (deallocated_byls_)
507 deallocated_byls_.fill(lumisection, kB(data.
deallocated));
514 TH1::StatOverflows(
true);
522 time_thread_.fill(total, fraction);
524 if (time_thread_byls_)
525 time_thread_byls_.fill(lumisection, total, fraction);
530 time_real_.fill(total, fraction);
533 time_real_byls_.fill(lumisection, total, fraction);
538 allocated_.fill(total, fraction);
541 allocated_byls_.fill(lumisection, total, fraction);
546 deallocated_.fill(total, fraction);
548 if (deallocated_byls_)
549 deallocated_byls_.fill(lumisection, total, fraction);
563 unsigned int lumisections,
570 total_.book(booker,
"path", path.
name_, ranges, lumisections, byls);
573 module_counter_ = booker.
book1DD(
576 bins + 1, -0.5, bins + 0.5);
578 module_time_thread_total_ = booker.
book1DD(
579 "module_time_thread_total",
580 "total module time (cpu)",
581 bins, -0.5, bins - 0.5);
582 module_time_thread_total_.
setYTitle(
"processing time [ms]");
583 module_time_real_total_ = booker.
book1DD(
584 "module_time_real_total",
585 "total module time (real)",
586 bins, -0.5, bins - 0.5);
587 module_time_real_total_.
setYTitle(
"processing time [ms]");
590 module_allocated_total_ = booker.
book1DD(
591 "module_allocated_total",
592 "total allocated memory",
593 bins, -0.5, bins - 0.5);
594 module_allocated_total_.
setYTitle(
"memory [kB]");
595 module_deallocated_total_ = booker.
book1DD(
596 "module_deallocated_total",
597 "total deallocated memory",
598 bins, -0.5, bins - 0.5);
599 module_deallocated_total_.
setYTitle(
"memory [kB]");
601 for (
unsigned int bin: boost::irange(0u, bins)) {
604 module_counter_ .setBinLabel(
bin + 1, label.c_str());
605 module_time_thread_total_.setBinLabel(
bin + 1, label.c_str());
606 module_time_real_total_ .setBinLabel(
bin + 1, label.c_str());
609 module_allocated_total_ .setBinLabel(
bin + 1, label.c_str());
610 module_deallocated_total_.setBinLabel(
bin + 1, label.c_str());
613 module_counter_.setBinLabel(bins + 1,
"");
622 total_.fill(path.
total, ls);
625 for (
unsigned int i = 0;
i < path.
last; ++
i) {
628 module_counter_.fill(
i);
630 if (module_time_thread_total_)
631 module_time_thread_total_.fill(
i,
ms(
module.total.time_thread));
633 if (module_time_real_total_)
634 module_time_real_total_.fill(
i,
ms(
module.total.time_real));
636 if (module_allocated_total_)
637 module_allocated_total_.fill(
i, kB(
module.total.allocated));
639 if (module_deallocated_total_)
640 module_deallocated_total_.fill(
i, kB(
module.total.deallocated));
642 if (module_counter_ and path.
status)
643 module_counter_.fill(path.
last);
649 paths_(process.paths_.
size()),
650 endpaths_(process.endPaths_.
size())
661 unsigned int lumisections,
667 "process " + process.
name_,
"process " + process.
name_,
673 for (
unsigned int id: boost::irange(0ul,
paths_.size()))
681 for (
unsigned int id: boost::irange(0ul,
endpaths_.size()))
700 for (
unsigned int id: boost::irange(0ul,
paths_.size()))
704 for (
unsigned int id: boost::irange(0ul,
endpaths_.size()))
712 highlight_(groups.
size()),
713 modules_(job.
size()),
725 std::vector<GroupOfModules>
const& groups,
729 unsigned int lumisections,
745 "explicit",
"Event (explicit)",
751 "overhead",
"Overhead",
764 "lumi",
"LumiSection transitions",
770 "run",
"Run transtions",
777 for (
unsigned int group: boost::irange(0ul, groups.size())) {
787 for (
unsigned int pid: boost::irange(0ul, job.
processes().size())) {
799 for (
unsigned int id:
process.modules_)
826 for (
unsigned int id: boost::irange(0ul,
modules_.size()))
829 for (
unsigned int pid: boost::irange(0ul,
processes_.size()))
872 config.getUntrackedParameter<
double>(
"dqmPathTimeResolution" ),
873 config.getUntrackedParameter<
double>(
"dqmPathMemoryRange" ),
874 config.getUntrackedParameter<
double>(
"dqmPathMemoryResolution" ) } ),
876 config.getUntrackedParameter<
double>(
"dqmModuleTimeResolution" ),
877 config.getUntrackedParameter<
double>(
"dqmModuleMemoryRange" ),
878 config.getUntrackedParameter<
double>(
"dqmModuleMemoryResolution") } ),
886 tbb::task_scheduler_observer::observe();
964 auto const&
module = stream.modules[
id];
978 return ms(stream.total.time_real);
986 return ms(stream.processes[pid].total.time_real);
1030 auto const& stream =
streams_[sid];
1034 for (
unsigned int id: boost::irange(0ul, desc.paths_.size()))
1035 if (desc.paths_[
id].name_ == path)
1036 return ms(stream.processes[
pid].paths[
id].total.time_real);
1037 for (
unsigned int id: boost::irange(0ul, desc.endPaths_.size()))
1038 if (desc.paths_[
id].name_ == path)
1039 return ms(stream.processes[
pid].endpaths[
id].total.time_real);
1049 auto const& stream =
streams_[sid];
1052 for (
unsigned int id: boost::irange(0ul, desc.paths_.size()))
1053 if (desc.paths_[
id].name_ == path)
1054 return ms(stream.processes[pid].paths[
id].total.time_real);
1055 for (
unsigned int id: boost::irange(0ul, desc.endPaths_.size()))
1056 if (desc.paths_[
id].name_ == path)
1057 return ms(stream.processes[pid].endpaths[
id].total.time_real);
1066 auto const& stream =
streams_[sid];
1069 return ms(stream.highlight[
group].time_real);
1079 LogDebug(
"FastTimerService") <<
"The FastTimerService received is currently not monitoring the signal \"" << signal <<
"\".\n";
1087 edm::LogWarning(
"FastTimerService") <<
"The FastTimerService received the unsupported signal \"" << signal <<
"\".\n" 1088 <<
"Please report how to reproduce the issue to cms-hlt@cern.ch .";
1152 auto safe_for_dqm =
"/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+=_()# "s;
1154 if (safe_for_dqm.find(
c) == std::string::npos)
1373 template <
typename T>
1376 out <<
"FastReport ";
1377 if (label.size() < 60)
1378 for (
unsigned int i = (60-label.size()) / 2;
i > 0; --
i)
1380 out <<
' ' << label <<
" Summary ";
1381 if (label.size() < 60)
1382 for (
unsigned int i = (59-label.size()) / 2;
i > 0; --
i)
1387 template <
typename T>
1390 out <<
"FastReport CPU time Real time Allocated Deallocated " << label <<
"\n";
1394 template <
typename T>
1397 out <<
boost::format(
"FastReport %10.1f ms %10.1f ms %+10d kB %+10d kB %s\n")
1400 % +
static_cast<int64_t
>(kB(data.
allocated))
1405 template <
typename T>
1408 out <<
boost::format(
"FastReport %10.1f ms %10.1f ms %+10d kB %+10d kB %s\n")
1411 % +
static_cast<int64_t
>(kB(data.
allocated))
1416 template <
typename T>
1428 for (
unsigned int m: proc_d.modules_) {
1442 for (
unsigned int p = 0;
p <
proc.paths.size(); ++
p) {
1443 auto const&
name = proc_d.paths_[
p].name_;
1448 for (
unsigned int p = 0;
p <
proc.endpaths.size(); ++
p) {
1449 auto const&
name = proc_d.endPaths_[
p].name_;
1469 template <
typename T>
1473 out <<
"FastReport CPU time avg. when run Real time avg. when run Alloc. avg. when run Dealloc. avg. when run ";
1476 out <<
"FastReport CPU time avg. Real time avg. Alloc. avg. Dealloc. avg. ";
1478 out << label <<
'\n';
1481 template <
typename T>
1484 out <<
"FastReport CPU time sched. / depend. Real time sched. / depend. Alloc. sched. / depend. Dealloc. sched. / depend. ";
1486 out << label <<
'\n';
1489 template <
typename T>
1492 out <<
boost::format(
"FastReport %10.1f ms %10.1f ms %+10d kB %+10d kB %s\n")
1495 % (events ? +static_cast<int64_t>(kB(data.
allocated) / events) : 0)
1496 % (events ? -static_cast<int64_t>(kB(data.
deallocated) / events) : 0)
1500 template <
typename T>
1503 out <<
boost::format(
"FastReport %10.1f ms %10.1f ms %10.1f ms %10.1f ms %+10d kB %+10d kB %+10d kB %+10d kB %s\n")
1506 % (events ? +static_cast<int64_t>(kB(data.
allocated) / events) : 0) % (active ? +static_cast<int64_t>(kB(data.
allocated) / active) : 0)
1507 % (events ? -static_cast<int64_t>(kB(data.
deallocated) / events) : 0) % (active ? -static_cast<int64_t>(kB(data.
deallocated) / active) : 0)
1511 template <
typename T>
1514 out <<
boost::format(
"FastReport %10.1f ms %10.1f ms %10.1f ms %10.1f ms %+10d kB %+10d kB %+10d kB %+10d kB %s\n")
1517 % (events ? +static_cast<int64_t>(kB(data.
allocated) / events) : 0) % (events ? +static_cast<int64_t>(kB(total.
allocated) / events) : 0)
1518 % (events ? -static_cast<int64_t>(kB(data.
deallocated) / events) : 0) % (events ? -static_cast<int64_t>(kB(total.
deallocated) / events) : 0)
1522 template <
typename T>
1534 for (
unsigned int m: proc_d.modules_) {
1548 for (
unsigned int p = 0;
p <
proc.paths.size(); ++
p) {
1549 auto const&
name = proc_d.paths_[
p].name_;
1553 for (
unsigned int p = 0;
p <
proc.endpaths.size(); ++
p) {
1554 auto const&
name = proc_d.endPaths_[
p].name_;
1573 template <
typename T>
1599 unsigned int old_value = check.fetch_add(1, std::memory_order_acq_rel);
1620 auto &
data = stream.processes[
pid].total;
1621 for (
unsigned int i:
process.modules_)
1622 data += stream.modules[
i].total;
1623 stream.total +=
data;
1631 stream.event_measurement.measure_and_store(stream.event);
1636 stream.highlight[
group] += stream.modules[
i].total;
1666 auto & measurement =
thread();
1667 measurement.measure_and_accumulate(stream.overhead);
1668 stream.event_measurement = measurement;
1676 unsigned int id = md.
id();
1680 ++stream.modules[
id].events;
1689 unsigned int id = pc.
pathID();
1692 data.status =
false;
1702 unsigned int id = pc.
pathID();
1707 unsigned int index =
path.modules_on_path_.empty() ? 0 : status.
index() + 1;
1708 data.last =
path.modules_on_path_.empty() ? 0 :
path.last_dependency_of_module_[status.
index()];
1710 for (
unsigned int i = 0;
i <
index; ++
i) {
1711 auto const&
module = stream.modules[
path.modules_on_path_[
i]];
1714 for (
unsigned int i = 0;
i <
data.last; ++
i) {
1715 auto const&
module = stream.modules[
path.modules_and_dependencies_[
i]];
1732 unsigned int id = md.
id();
1737 ++stream.modules[
id].events;
1912 desc.
addUntracked<
bool>(
"enableDQMbyLumiSection",
false);
1913 desc.
addUntracked<
bool>(
"enableDQMbyProcesses",
false);
1914 desc.
addUntracked<
bool>(
"enableDQMTransitions",
false);
1917 desc.
addUntracked<
double>(
"dqmMemoryRange", 1000000. );
1918 desc.
addUntracked<
double>(
"dqmMemoryResolution", 5000. );
1920 desc.
addUntracked<
double>(
"dqmPathTimeResolution", 0.5);
1921 desc.
addUntracked<
double>(
"dqmPathMemoryRange", 1000000. );
1922 desc.
addUntracked<
double>(
"dqmPathMemoryResolution", 5000. );
1923 desc.
addUntracked<
double>(
"dqmModuleTimeRange", 40. );
1924 desc.
addUntracked<
double>(
"dqmModuleTimeResolution", 0.2);
1925 desc.
addUntracked<
double>(
"dqmModuleMemoryRange", 100000. );
1926 desc.
addUntracked<
double>(
"dqmModuleMemoryResolution", 500. );
1927 desc.
addUntracked<
unsigned>(
"dqmLumiSectionsRange", 2500 );
1931 highlightModulesDescription.
addUntracked<std::vector<std::string>>(
"modules", {});
1932 highlightModulesDescription.addUntracked<
std::string>(
"label",
"producers");
1952 descriptions.
add(
"FastTimerService", desc);
ConcurrentMonitorElement book1DD(Args &&...args)
void book(DQMStore::ConcurrentBooker &, std::string const &name, std::string const &title, PlotRanges const &ranges, unsigned int lumisections, bool byls)
ResourcesPerJob()=default
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)
ConcurrentMonitorElement bookProfile(Args &&...args)
void setComment(std::string const &value)
T getUntrackedParameter(std::string const &, T const &) const
std::unique_ptr< std::atomic< unsigned int >[]> subprocess_global_lumi_check_
void postStreamBeginRun(edm::StreamContext const &)
double queryEventTime(edm::StreamID) const
LuminosityBlockIndex const & luminosityBlockIndex() const
void postGlobalEndLumi(edm::GlobalContext const &)
void postGlobalBeginLumi(edm::GlobalContext const &)
void on_scheduler_entry(bool worker) final
void postStreamEndLumi(edm::StreamContext const &)
void on_scheduler_exit(bool worker) final
std::vector< edm::ParameterSet > highlight_module_psets_
void postModuleGlobalEndLumi(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void preEventReadFromSource(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preGlobalEndRun(edm::GlobalContext const &)
PlotsPerElement event_ex_
void preBeginJob(edm::PathsAndConsumesOfModulesBase const &, edm::ProcessContext const &)
void fill_lumi(AtomicResources const &, unsigned int lumisection)
void preSourceLumi(edm::LuminosityBlockIndex)
void printSummary(T &out, ResourcesPerJob const &data, std::string const &label) const
AtomicResources operator+(AtomicResources const &other) const
void setYTitle(std::string const &title)
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
const PlotRanges dqm_event_ranges_
void postModuleGlobalEndRun(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void preSourceRun(edm::RunIndex)
void postModuleEvent(edm::StreamContext const &, edm::ModuleCallingContext const &)
void unsupportedSignal(const std::string &signal) const
std::vector< GroupOfModules > highlight_modules_
ResourcesPerJob job_summary_
PlotsPerJob(ProcessCallGraph const &job, std::vector< GroupOfModules > const &groups)
void book(DQMStore::ConcurrentBooker &, std::string const &, ProcessCallGraph const &, ProcessCallGraph::PathType const &, PlotRanges const &ranges, unsigned int lumisections, bool byls)
unsigned int processId(edm::ProcessContext const &) const
TrainProcessor *const proc
PlotsPerProcess(ProcessCallGraph::ProcessType const &)
void preGlobalEndLumi(edm::GlobalContext const &)
std::vector< ResourcesPerPath > endpaths
double queryModuleTime_(edm::StreamID, unsigned int id) const
LuminosityBlockID const & luminosityBlockID() const
AtomicResources overhead_
bool isFirstSubprocess(edm::StreamContext const &)
const bool enable_dqm_bynproc_
unsigned int concurrent_runs_
boost::chrono::nanoseconds time_real
void measure_and_accumulate(AtomicResources &store)
std::atomic< uint64_t > deallocated
PlotsPerElement overhead_
std::unique_ptr< std::atomic< unsigned int >[]> subprocess_global_run_check_
void postSourceRun(edm::RunIndex)
std::vector< ResourcesPerJob > streams_
std::atomic< uint64_t > allocated
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
const bool enable_dqm_bypath_
edm::ModuleDescription const & source() const
tbb::enumerable_thread_specific< Measurement, tbb::cache_aligned_allocator< Measurement >, tbb::ets_key_per_instance > threads_
void postStreamBeginLumi(edm::StreamContext const &)
const PlotRanges dqm_path_ranges_
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 book(DQMStore::ConcurrentBooker &, ProcessCallGraph const &, std::vector< GroupOfModules > const &, PlotRanges const &event_ranges, PlotRanges const &path_ranges, PlotRanges const &module_ranges, unsigned int lumisections, bool bymodule, bool bypath, bool byls, bool transitions)
void printEvent(T &out, ResourcesPerJob const &) const
void printHeader(T &out, std::string const &label) const
void postModuleStreamEndLumi(edm::StreamContext const &, edm::ModuleCallingContext const &)
std::mutex summary_mutex_
void printPathSummaryHeader(T &out, std::string const &label) const
ResourcesPerJob & operator+=(ResourcesPerJob const &other)
void printSummaryHeader(T &out, std::string const &label, bool detailed) const
void fill(ProcessCallGraph::ProcessType const &, ResourcesPerJob const &, ResourcesPerProcess const &, unsigned int ls)
double queryModuleTime(edm::StreamID, const edm::ModuleDescription &module) const
void prePathEvent(edm::StreamContext const &, edm::PathContext const &)
LuminosityBlockIndex const & luminosityBlockIndex() const
std::vector< ResourcesPerJob > run_summary_
void printEventHeader(T &out, std::string const &label) const
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
FastTimerService(const edm::ParameterSet &, edm::ActivityRegistry &)
void preModuleStreamEndLumi(edm::StreamContext const &, edm::ModuleCallingContext const &)
void postEvent(edm::StreamContext const &)
void preBeginJob(edm::PathsAndConsumesOfModulesBase const &, edm::ProcessContext const &)
void postGlobalEndRun(edm::GlobalContext const &)
static uint64_t deallocated()
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
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_
ConcurrentMonitorElement book1D(Args &&...args)
ProcessType const & processDescription(unsigned int) const
ParameterDescriptionNode * addOptionalNode(ParameterDescriptionNode const &node, bool writeToCfi)
unsigned int concurrent_lumis_
void preSourceConstruction(edm::ModuleDescription const &)
void printSummaryLine(T &out, Resources const &data, uint64_t events, std::string const &label) const
unsigned int pathID() const
format
Some error handling for the usage.
const bool enable_dqm_transitions_
ProcessContext const * processContext() const
void printEventLine(T &out, Resources const &data, std::string const &label) const
std::atomic< boost::chrono::nanoseconds::rep > time_thread
Resources operator+(Resources const &other) const
std::vector< Resources > highlight
const bool enable_dqm_bymodule_
void printPathSummaryLine(T &out, Resources const &data, Resources const &total, uint64_t events, std::string const &label) const
bin
set the eta bin as selection string.
StreamID const & streamID() const
void fill_run(AtomicResources const &)
const std::string processor_model
~FastTimerService() override
const PlotRanges dqm_module_ranges_
std::vector< PlotsPerPath > endpaths_
static bool is_available()
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)
unsigned int maxNumberOfConcurrentLuminosityBlocks() const
unsigned long long uint64_t
void postModuleStreamBeginLumi(edm::StreamContext const &, edm::ModuleCallingContext const &)
double querySourceTime(edm::StreamID) const
void printTransition(T &out, AtomicResources const &data, std::string const &label) const
std::vector< AtomicResources > run_transition_
void preModuleStreamEndRun(edm::StreamContext const &, edm::ModuleCallingContext const &)
void postModuleStreamEndRun(edm::StreamContext const &, edm::ModuleCallingContext const &)
static uint64_t allocated()
const std::string & pwd()
void postModuleStreamBeginRun(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preSourceEvent(edm::StreamID)
boost::chrono::nanoseconds time_thread
LuminosityBlockNumber_t luminosityBlock() const
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void preEvent(edm::StreamContext const &)
void postGlobalBeginRun(edm::GlobalContext const &)
ProcessContext const * processContext() const
void preStreamBeginLumi(edm::StreamContext const &)
ResourcesPerProcess(ProcessCallGraph::ProcessType const &process)
void ignoredSignal(const std::string &signal) const
void postSourceEvent(edm::StreamID)
void preModuleStreamBeginLumi(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preStreamEndRun(edm::StreamContext const &)
char data[epos_bytes_allocation]
std::atomic< boost::chrono::nanoseconds::rep > time_real
void preModuleStreamBeginRun(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preStreamEndLumi(edm::StreamContext const &)
void measure_and_store(Resources &store)
ResourcesPerModule & operator+=(ResourcesPerModule const &other)
std::vector< PathType > endPaths_
void postModuleEventPrefetching(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preModuleGlobalEndLumi(edm::GlobalContext const &, edm::ModuleCallingContext const &)
std::unique_ptr< PlotsPerJob > plots_
unsigned int size() const
edm::ModuleDescription const & module(unsigned int module) const
double queryPathTime(edm::StreamID, std::string const &path) const
void preGlobalBeginLumi(edm::GlobalContext const &)
unsigned int maxNumberOfConcurrentRuns() const
AtomicResources & operator+=(AtomicResources const &other)
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 postSourceLumi(edm::LuminosityBlockIndex)
void postModuleGlobalBeginRun(edm::GlobalContext const &, edm::ModuleCallingContext const &)
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
AtomicResources & operator=(AtomicResources const &other)
ProcessCallGraph callgraph_
void postModuleGlobalBeginLumi(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void preStreamBeginRun(edm::StreamContext const &)
std::vector< ResourcesPerPath > paths
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)
std::vector< AtomicResources > lumi_transition_
static std::string const source
void book(DQMStore::ConcurrentBooker &, ProcessCallGraph const &, ProcessCallGraph::ProcessType const &, PlotRanges const &event_ranges, PlotRanges const &path_ranges, unsigned int lumisections, bool bypath, bool byls)
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)
void fill(ProcessCallGraph::PathType const &, ResourcesPerJob const &, ResourcesPerPath const &, unsigned int lumisection)
void setXTitle(std::string const &title)
unsigned int index() const