CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
NVProfilerService.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: HeterogeneousCore/CUDAServices
4 // Class : NVProfilerService
5 
6 #include <algorithm>
7 #include <iostream>
8 #include <sstream>
9 #include <string>
10 #include <vector>
11 
12 #include <tbb/concurrent_vector.h>
13 #include <tbb/enumerable_thread_specific.h>
14 
15 #include <fmt/printf.h>
16 
17 #include <cuda_profiler_api.h>
18 #include <nvToolsExt.h>
19 
45 
46 using namespace std::string_literals;
47 
48 namespace {
49  int nvtxDomainRangePush(nvtxDomainHandle_t domain, const char* message) {
50  nvtxEventAttributes_t eventAttrib = {};
51  eventAttrib.version = NVTX_VERSION;
52  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
53  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
54  eventAttrib.message.ascii = message;
55  return nvtxDomainRangePushEx(domain, &eventAttrib);
56  }
57 
58  __attribute__((unused)) int nvtxDomainRangePushColor(nvtxDomainHandle_t domain, const char* message, uint32_t color) {
59  nvtxEventAttributes_t eventAttrib = {};
60  eventAttrib.version = NVTX_VERSION;
61  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
62  eventAttrib.colorType = NVTX_COLOR_ARGB;
63  eventAttrib.color = color;
64  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
65  eventAttrib.message.ascii = message;
66  return nvtxDomainRangePushEx(domain, &eventAttrib);
67  }
68 
69  __attribute__((unused)) nvtxRangeId_t nvtxDomainRangeStart(nvtxDomainHandle_t domain, const char* message) {
70  nvtxEventAttributes_t eventAttrib = {};
71  eventAttrib.version = NVTX_VERSION;
72  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
73  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
74  eventAttrib.message.ascii = message;
75  return nvtxDomainRangeStartEx(domain, &eventAttrib);
76  }
77 
78  nvtxRangeId_t nvtxDomainRangeStartColor(nvtxDomainHandle_t domain, const char* message, uint32_t color) {
79  nvtxEventAttributes_t eventAttrib = {};
80  eventAttrib.version = NVTX_VERSION;
81  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
82  eventAttrib.colorType = NVTX_COLOR_ARGB;
83  eventAttrib.color = color;
84  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
85  eventAttrib.message.ascii = message;
86  return nvtxDomainRangeStartEx(domain, &eventAttrib);
87  }
88 
89  void nvtxDomainMark(nvtxDomainHandle_t domain, const char* message) {
90  nvtxEventAttributes_t eventAttrib = {};
91  eventAttrib.version = NVTX_VERSION;
92  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
93  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
94  eventAttrib.message.ascii = message;
95  nvtxDomainMarkEx(domain, &eventAttrib);
96  }
97 
98  __attribute__((unused)) void nvtxDomainMarkColor(nvtxDomainHandle_t domain, const char* message, uint32_t color) {
99  nvtxEventAttributes_t eventAttrib = {};
100  eventAttrib.version = NVTX_VERSION;
101  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
102  eventAttrib.colorType = NVTX_COLOR_ARGB;
103  eventAttrib.color = color;
104  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
105  eventAttrib.message.ascii = message;
106  nvtxDomainMarkEx(domain, &eventAttrib);
107  }
108 
109  enum {
110  nvtxBlack = 0x00000000,
111  nvtxRed = 0x00ff0000,
112  nvtxDarkGreen = 0x00009900,
113  nvtxGreen = 0x0000ff00,
114  nvtxLightGreen = 0x00ccffcc,
115  nvtxBlue = 0x000000ff,
116  nvtxAmber = 0x00ffbf00,
117  nvtxLightAmber = 0x00fff2cc,
118  nvtxWhite = 0x00ffffff
119  };
120 
121  constexpr nvtxRangeId_t nvtxInvalidRangeId = 0xfffffffffffffffful;
122 } // namespace
123 
125 public:
128 
129  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
130 
131  void preallocate(edm::service::SystemBounds const&);
132 
133  // these signal pair are NOT guaranteed to be called by the same thread
134  void preBeginJob(edm::PathsAndConsumesOfModulesBase const&, edm::ProcessContext const&);
135  void postBeginJob();
136 
137  // there is no preEndJob() signal
138  void postEndJob();
139 
140  // these signal pair are NOT guaranteed to be called by the same thread
141  void preGlobalBeginRun(edm::GlobalContext const&);
142  void postGlobalBeginRun(edm::GlobalContext const&);
143 
144  // these signal pair are NOT guaranteed to be called by the same thread
145  void preGlobalEndRun(edm::GlobalContext const&);
146  void postGlobalEndRun(edm::GlobalContext const&);
147 
148  // these signal pair are NOT guaranteed to be called by the same thread
149  void preStreamBeginRun(edm::StreamContext const&);
150  void postStreamBeginRun(edm::StreamContext const&);
151 
152  // these signal pair are NOT guaranteed to be called by the same thread
153  void preStreamEndRun(edm::StreamContext const&);
154  void postStreamEndRun(edm::StreamContext const&);
155 
156  // these signal pair are NOT guaranteed to be called by the same thread
157  void preGlobalBeginLumi(edm::GlobalContext const&);
158  void postGlobalBeginLumi(edm::GlobalContext const&);
159 
160  // these signal pair are NOT guaranteed to be called by the same thread
161  void preGlobalEndLumi(edm::GlobalContext const&);
162  void postGlobalEndLumi(edm::GlobalContext const&);
163 
164  // these signal pair are NOT guaranteed to be called by the same thread
165  void preStreamBeginLumi(edm::StreamContext const&);
166  void postStreamBeginLumi(edm::StreamContext const&);
167 
168  // these signal pair are NOT guaranteed to be called by the same thread
169  void preStreamEndLumi(edm::StreamContext const&);
170  void postStreamEndLumi(edm::StreamContext const&);
171 
172  // these signal pair are NOT guaranteed to be called by the same thread
173  void preEvent(edm::StreamContext const&);
174  void postEvent(edm::StreamContext const&);
175 
176  // these signal pair are NOT guaranteed to be called by the same thread
177  void prePathEvent(edm::StreamContext const&, edm::PathContext const&);
178  void postPathEvent(edm::StreamContext const&, edm::PathContext const&, edm::HLTPathStatus const&);
179 
180  // these signal pair are NOT guaranteed to be called by the same thread
181  void preModuleEventPrefetching(edm::StreamContext const&, edm::ModuleCallingContext const&);
182  void postModuleEventPrefetching(edm::StreamContext const&, edm::ModuleCallingContext const&);
183 
184  // these signal pair are guaranteed to be called by the same thread
185  void preOpenFile(std::string const&, bool);
186  void postOpenFile(std::string const&, bool);
187 
188  // these signal pair are guaranteed to be called by the same thread
189  void preCloseFile(std::string const&, bool);
190  void postCloseFile(std::string const&, bool);
191 
192  // these signal pair are guaranteed to be called by the same thread
193  void preSourceConstruction(edm::ModuleDescription const&);
194  void postSourceConstruction(edm::ModuleDescription const&);
195 
196  // these signal pair are guaranteed to be called by the same thread
197  void preSourceRun(edm::RunIndex);
198  void postSourceRun(edm::RunIndex);
199 
200  // these signal pair are guaranteed to be called by the same thread
201  void preSourceLumi(edm::LuminosityBlockIndex);
202  void postSourceLumi(edm::LuminosityBlockIndex);
203 
204  // these signal pair are guaranteed to be called by the same thread
205  void preSourceEvent(edm::StreamID);
206  void postSourceEvent(edm::StreamID);
207 
208  // these signal pair are guaranteed to be called by the same thread
209  void preModuleConstruction(edm::ModuleDescription const&);
210  void postModuleConstruction(edm::ModuleDescription const&);
211 
212  // these signal pair are guaranteed to be called by the same thread
213  void preModuleDestruction(edm::ModuleDescription const&);
214  void postModuleDestruction(edm::ModuleDescription const&);
215 
216  // these signal pair are guaranteed to be called by the same thread
217  void preModuleBeginJob(edm::ModuleDescription const&);
218  void postModuleBeginJob(edm::ModuleDescription const&);
219 
220  // these signal pair are guaranteed to be called by the same thread
221  void preModuleEndJob(edm::ModuleDescription const&);
222  void postModuleEndJob(edm::ModuleDescription const&);
223 
224  // these signal pair are guaranteed to be called by the same thread
225  void preModuleBeginStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
226  void postModuleBeginStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
227 
228  // these signal pair are guaranteed to be called by the same thread
229  void preModuleEndStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
230  void postModuleEndStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
231 
232  // these signal pair are guaranteed to be called by the same thread
233  void preModuleGlobalBeginRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
234  void postModuleGlobalBeginRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
235 
236  // these signal pair are guaranteed to be called by the same thread
237  void preModuleGlobalEndRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
238  void postModuleGlobalEndRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
239 
240  // these signal pair are guaranteed to be called by the same thread
241  void preModuleGlobalBeginLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
242  void postModuleGlobalBeginLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
243 
244  // these signal pair are guaranteed to be called by the same thread
245  void preModuleGlobalEndLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
246  void postModuleGlobalEndLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
247 
248  // these signal pair are guaranteed to be called by the same thread
249  void preModuleStreamBeginRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
250  void postModuleStreamBeginRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
251 
252  // these signal pair are guaranteed to be called by the same thread
253  void preModuleStreamEndRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
254  void postModuleStreamEndRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
255 
256  // these signal pair are guaranteed to be called by the same thread
257  void preModuleStreamBeginLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
258  void postModuleStreamBeginLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
259 
260  // these signal pair are guaranteed to be called by the same thread
261  void preModuleStreamEndLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
262  void postModuleStreamEndLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
263 
264  // these signal pair are guaranteed to be called by the same thread
265  void preModuleEventAcquire(edm::StreamContext const&, edm::ModuleCallingContext const&);
266  void postModuleEventAcquire(edm::StreamContext const&, edm::ModuleCallingContext const&);
267 
268  // these signal pair are guaranteed to be called by the same thread
269  void preModuleEvent(edm::StreamContext const&, edm::ModuleCallingContext const&);
270  void postModuleEvent(edm::StreamContext const&, edm::ModuleCallingContext const&);
271 
272  // these signal pair are guaranteed to be called by the same thread
273  void preModuleEventDelayedGet(edm::StreamContext const&, edm::ModuleCallingContext const&);
274  void postModuleEventDelayedGet(edm::StreamContext const&, edm::ModuleCallingContext const&);
275 
276  // these signal pair are guaranteed to be called by the same thread
277  void preEventReadFromSource(edm::StreamContext const&, edm::ModuleCallingContext const&);
278  void postEventReadFromSource(edm::StreamContext const&, edm::ModuleCallingContext const&);
279 
280 private:
281  bool highlight(std::string const& label) const {
282  return (std::binary_search(highlightModules_.begin(), highlightModules_.end(), label));
283  }
284 
285  uint32_t labelColor(std::string const& label) const { return highlight(label) ? nvtxAmber : nvtxGreen; }
286 
287  uint32_t labelColorLight(std::string const& label) const {
288  return highlight(label) ? nvtxLightAmber : nvtxLightGreen;
289  }
290 
291  std::vector<std::string> highlightModules_;
293  const bool skipFirstEvent_;
294 
295  std::atomic<bool> globalFirstEventDone_ = false;
296  std::vector<std::atomic<bool>> streamFirstEventDone_;
297  std::vector<nvtxRangeId_t> event_; // per-stream event ranges
298  std::vector<std::vector<nvtxRangeId_t>> stream_modules_; // per-stream, per-module ranges
299  // use a tbb::concurrent_vector rather than an std::vector because its final size is not known
300  tbb::concurrent_vector<nvtxRangeId_t> global_modules_; // global per-module events
301 
302  nvtxDomainHandle_t global_domain_; // NVTX domain for global EDM transitions
303  std::vector<nvtxDomainHandle_t> stream_domain_; // NVTX domains for per-EDM-stream transitions
304 };
305 
307  : highlightModules_(config.getUntrackedParameter<std::vector<std::string>>("highlightModules")),
308  showModulePrefetching_(config.getUntrackedParameter<bool>("showModulePrefetching")),
309  skipFirstEvent_(config.getUntrackedParameter<bool>("skipFirstEvent")) {
310  // make sure that CUDA is initialised, and that the CUDAService destructor is called after this service's destructor
311  edm::Service<CUDAService> cudaService;
312 
313  std::sort(highlightModules_.begin(), highlightModules_.end());
314 
315  // create the NVTX domain for global EDM transitions
316  global_domain_ = nvtxDomainCreate("EDM Global");
317 
318  // enables profile collection; if profiling is already enabled it has no effect
319  if (not skipFirstEvent_) {
320  cudaProfilerStart();
321  }
322 
324 
325  // these signal pair are NOT guaranteed to be called by the same thread
328 
329  // there is no preEndJob() signal
331 
332  // these signal pair are NOT guaranteed to be called by the same thread
335 
336  // these signal pair are NOT guaranteed to be called by the same thread
339 
340  // these signal pair are NOT guaranteed to be called by the same thread
343 
344  // these signal pair are NOT guaranteed to be called by the same thread
347 
348  // these signal pair are NOT guaranteed to be called by the same thread
351 
352  // these signal pair are NOT guaranteed to be called by the same thread
355 
356  // these signal pair are NOT guaranteed to be called by the same thread
359 
360  // these signal pair are NOT guaranteed to be called by the same thread
363 
364  // these signal pair are NOT guaranteed to be called by the same thread
367 
368  // these signal pair are NOT guaranteed to be called by the same thread
371 
373  // these signal pair are NOT guaranteed to be called by the same thread
376  }
377 
378  // these signal pair are guaranteed to be called by the same thread
381 
382  // these signal pair are guaranteed to be called by the same thread
385 
386  // these signal pair are guaranteed to be called by the same thread
389 
390  // these signal pair are guaranteed to be called by the same thread
393 
394  // these signal pair are guaranteed to be called by the same thread
397 
398  // these signal pair are guaranteed to be called by the same thread
401 
402  // these signal pair are guaranteed to be called by the same thread
405 
406  // these signal pair are guaranteed to be called by the same thread
409 
410  // these signal pair are guaranteed to be called by the same thread
413 
414  // these signal pair are guaranteed to be called by the same thread
417 
418  // these signal pair are guaranteed to be called by the same thread
421 
422  // these signal pair are guaranteed to be called by the same thread
425 
426  // these signal pair are guaranteed to be called by the same thread
429 
430  // these signal pair are guaranteed to be called by the same thread
433 
434  // these signal pair are guaranteed to be called by the same thread
437 
438  // these signal pair are guaranteed to be called by the same thread
441 
442  // these signal pair are guaranteed to be called by the same thread
445 
446  // these signal pair are guaranteed to be called by the same thread
449 
450  // these signal pair are guaranteed to be called by the same thread
453 
454  // these signal pair are guaranteed to be called by the same thread
457 
458  // these signal pair are guaranteed to be called by the same thread
461 
462  // these signal pair are guaranteed to be called by the same thread
465 
466  // these signal pair are guaranteed to be called by the same thread
469 
470  // these signal pair are guaranteed to be called by the same thread
473 }
474 
476  for (unsigned int sid = 0; sid < stream_domain_.size(); ++sid) {
477  nvtxDomainDestroy(stream_domain_[sid]);
478  }
479  nvtxDomainDestroy(global_domain_);
480  cudaProfilerStop();
481 }
482 
485  desc.addUntracked<std::vector<std::string>>("highlightModules", {})->setComment("");
486  desc.addUntracked<bool>("showModulePrefetching", false)
487  ->setComment("Show the stack of dependencies that requested to run a module.");
488  desc.addUntracked<bool>("skipFirstEvent", false)
489  ->setComment(
490  "Start profiling after the first event has completed.\nWith multiple streams, ignore transitions belonging "
491  "to events started in parallel to the first event.\nRequires running nvprof with the '--profile-from-start "
492  "off' option.");
493  descriptions.add("NVProfilerService", desc);
494  descriptions.setComment(R"(This Service provides CMSSW-aware annotations to nvprof/nvvm. Notes on nvprof options: - the option '--profile-from-start off' should be used if skipFirstEvent is True. - the option '--cpu-profiling on' currently results in cmsRun being stuck at the beginning of the job. - the option '--cpu-thread-tracing on' is not compatible with jemalloc, and should only be used with cmsRunGlibC.)");
495 }
496 
498  std::stringstream out;
499  out << "preallocate: " << bounds.maxNumberOfConcurrentRuns() << " concurrent runs, "
500  << bounds.maxNumberOfConcurrentLuminosityBlocks() << " luminosity sections, " << bounds.maxNumberOfStreams()
501  << " streams\nrunning on" << bounds.maxNumberOfThreads() << " threads";
502  nvtxDomainMark(global_domain_, out.str().c_str());
503 
504  auto concurrentStreams = bounds.maxNumberOfStreams();
505  // create the NVTX domains for per-EDM-stream transitions
506  stream_domain_.resize(concurrentStreams);
507  for (unsigned int sid = 0; sid < concurrentStreams; ++sid) {
508  stream_domain_[sid] = nvtxDomainCreate(fmt::sprintf("EDM Stream %d", sid).c_str());
509  }
510 
511  event_.resize(concurrentStreams);
512  stream_modules_.resize(concurrentStreams);
513  if (skipFirstEvent_) {
514  globalFirstEventDone_ = false;
515  std::vector<std::atomic<bool>> tmp(concurrentStreams);
516  for (auto& element : tmp)
517  std::atomic_init(&element, false);
519  }
520 }
521 
523  edm::ProcessContext const& pc) {
524  nvtxDomainMark(global_domain_, "preBeginJob");
525 
526  // FIXME this probably works only in the absence of subprocesses
527  // size() + 1 because pathsAndConsumes.allModules() does not include the source
528  unsigned int modules = pathsAndConsumes.allModules().size() + 1;
529  global_modules_.resize(modules, nvtxInvalidRangeId);
530  for (unsigned int sid = 0; sid < stream_modules_.size(); ++sid) {
531  stream_modules_[sid].resize(modules, nvtxInvalidRangeId);
532  }
533 }
534 
537  nvtxDomainMark(global_domain_, "postBeginJob");
538  }
539 }
543  nvtxDomainMark(global_domain_, "postEndJob");
544  }
545 }
549  nvtxDomainRangePush(stream_domain_[sid], "source");
550  }
551 }
555  nvtxDomainRangePop(stream_domain_[sid]);
556  }
557 }
561  nvtxDomainRangePush(global_domain_, "source lumi");
562  }
563 }
567  nvtxDomainRangePop(global_domain_);
568  }
569 }
573  nvtxDomainRangePush(global_domain_, "source run");
574  }
575 }
579  nvtxDomainRangePop(global_domain_);
580  }
581 }
583 void NVProfilerService::preOpenFile(std::string const& lfn, bool) {
585  nvtxDomainRangePush(global_domain_, ("open file "s + lfn).c_str());
586  }
587 }
589 void NVProfilerService::postOpenFile(std::string const& lfn, bool) {
591  nvtxDomainRangePop(global_domain_);
592  }
593 }
595 void NVProfilerService::preCloseFile(std::string const& lfn, bool) {
597  nvtxDomainRangePush(global_domain_, ("close file "s + lfn).c_str());
598  }
599 }
601 void NVProfilerService::postCloseFile(std::string const& lfn, bool) {
603  nvtxDomainRangePop(global_domain_);
604  }
605 }
608  auto sid = sc.streamID();
610  auto mid = mcc.moduleDescription()->id();
611  auto const& label = mcc.moduleDescription()->moduleLabel();
612  auto const& msg = label + " begin stream";
613  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
614  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
615  }
616 }
617 
619  auto sid = sc.streamID();
621  auto mid = mcc.moduleDescription()->id();
622  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
623  stream_modules_[sid][mid] = nvtxInvalidRangeId;
624  }
625 }
626 
628  auto sid = sc.streamID();
630  auto mid = mcc.moduleDescription()->id();
631  auto const& label = mcc.moduleDescription()->moduleLabel();
632  auto const& msg = label + " end stream";
633  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
634  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
635  }
636 }
637 
639  auto sid = sc.streamID();
641  auto mid = mcc.moduleDescription()->id();
642  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
643  stream_modules_[sid][mid] = nvtxInvalidRangeId;
644  }
645 }
646 
649  nvtxDomainRangePush(global_domain_, "global begin run");
650  }
651 }
655  nvtxDomainRangePop(global_domain_);
656  }
657 }
661  nvtxDomainRangePush(global_domain_, "global end run");
662  }
663 }
667  nvtxDomainRangePop(global_domain_);
668  }
669 }
672  auto sid = sc.streamID();
674  nvtxDomainRangePush(stream_domain_[sid], "stream begin run");
675  }
676 }
677 
679  auto sid = sc.streamID();
681  nvtxDomainRangePop(stream_domain_[sid]);
682  }
683 }
684 
686  auto sid = sc.streamID();
688  nvtxDomainRangePush(stream_domain_[sid], "stream end run");
689  }
690 }
691 
693  auto sid = sc.streamID();
695  nvtxDomainRangePop(stream_domain_[sid]);
696  }
697 }
698 
701  nvtxDomainRangePush(global_domain_, "global begin lumi");
702  }
703 }
707  nvtxDomainRangePop(global_domain_);
708  }
709 }
713  nvtxDomainRangePush(global_domain_, "global end lumi");
714  }
715 }
719  nvtxDomainRangePop(global_domain_);
720  }
721 }
724  auto sid = sc.streamID();
726  nvtxDomainRangePush(stream_domain_[sid], "stream begin lumi");
727  }
728 }
729 
731  auto sid = sc.streamID();
733  nvtxDomainRangePop(stream_domain_[sid]);
734  }
735 }
736 
738  auto sid = sc.streamID();
739  nvtxDomainRangePush(stream_domain_[sid], "stream end lumi");
740 }
741 
743  auto sid = sc.streamID();
745  nvtxDomainRangePop(stream_domain_[sid]);
746  }
747 }
748 
750  auto sid = sc.streamID();
752  event_[sid] = nvtxDomainRangeStartColor(stream_domain_[sid], "event", nvtxDarkGreen);
753  }
754 }
755 
757  auto sid = sc.streamID();
759  nvtxDomainRangeEnd(stream_domain_[sid], event_[sid]);
760  event_[sid] = nvtxInvalidRangeId;
761  } else {
762  streamFirstEventDone_[sid] = true;
763  auto identity = [](bool x) { return x; };
764  if (std::all_of(streamFirstEventDone_.begin(), streamFirstEventDone_.end(), identity)) {
765  bool expected = false;
766  if (globalFirstEventDone_.compare_exchange_strong(expected, true))
767  cudaProfilerStart();
768  }
769  }
770 }
771 
773  auto sid = sc.streamID();
775  nvtxDomainMark(global_domain_, ("before path "s + pc.pathName()).c_str());
776  }
777 }
778 
780  edm::PathContext const& pc,
781  edm::HLTPathStatus const& hlts) {
782  auto sid = sc.streamID();
784  nvtxDomainMark(global_domain_, ("after path "s + pc.pathName()).c_str());
785  }
786 }
787 
789  auto sid = sc.streamID();
791  auto mid = mcc.moduleDescription()->id();
792  auto const& label = mcc.moduleDescription()->moduleLabel();
793  auto const& msg = label + " prefetching";
794  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
795  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColorLight(label));
796  }
797 }
798 
800  auto sid = sc.streamID();
802  auto mid = mcc.moduleDescription()->id();
803  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
804  stream_modules_[sid][mid] = nvtxInvalidRangeId;
805  }
806 }
807 
809  if (not skipFirstEvent_) {
810  auto mid = desc.id();
811  global_modules_.grow_to_at_least(mid + 1);
812  auto const& label = desc.moduleLabel();
813  auto const& msg = label + " construction";
814  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
815  }
816 }
817 
819  if (not skipFirstEvent_) {
820  auto mid = desc.id();
821  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
822  global_modules_[mid] = nvtxInvalidRangeId;
823  }
824 }
825 
827  if (not skipFirstEvent_) {
828  auto mid = desc.id();
829  global_modules_.grow_to_at_least(mid + 1);
830  auto const& label = desc.moduleLabel();
831  auto const& msg = label + " destruction";
832  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
833  }
834 }
835 
837  if (not skipFirstEvent_) {
838  auto mid = desc.id();
839  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
840  global_modules_[mid] = nvtxInvalidRangeId;
841  }
842 }
843 
845  if (not skipFirstEvent_) {
846  auto mid = desc.id();
847  auto const& label = desc.moduleLabel();
848  auto const& msg = label + " begin job";
849  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
850  }
851 }
852 
854  if (not skipFirstEvent_) {
855  auto mid = desc.id();
856  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
857  global_modules_[mid] = nvtxInvalidRangeId;
858  }
859 }
860 
862  if (not skipFirstEvent_ or globalFirstEventDone_) {
863  auto mid = desc.id();
864  auto const& label = desc.moduleLabel();
865  auto const& msg = label + " end job";
866  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
867  }
868 }
869 
871  if (not skipFirstEvent_ or globalFirstEventDone_) {
872  auto mid = desc.id();
873  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
874  global_modules_[mid] = nvtxInvalidRangeId;
875  }
876 }
877 
879  auto sid = sc.streamID();
880  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
881  auto mid = mcc.moduleDescription()->id();
882  auto const& label = mcc.moduleDescription()->moduleLabel();
883  auto const& msg = label + " acquire";
884  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
885  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
886  }
887 }
888 
890  auto sid = sc.streamID();
891  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
892  auto mid = mcc.moduleDescription()->id();
893  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
894  stream_modules_[sid][mid] = nvtxInvalidRangeId;
895  }
896 }
897 
899  auto sid = sc.streamID();
900  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
901  auto mid = mcc.moduleDescription()->id();
902  auto const& label = mcc.moduleDescription()->moduleLabel();
903  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
904  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], label.c_str(), labelColor(label));
905  }
906 }
907 
909  auto sid = sc.streamID();
910  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
911  auto mid = mcc.moduleDescription()->id();
912  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
913  stream_modules_[sid][mid] = nvtxInvalidRangeId;
914  }
915 }
916 
918  /* FIXME
919  auto sid = sc.streamID();
920  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
921  auto mid = mcc.moduleDescription()->id();
922  auto const & label = mcc.moduleDescription()->moduleLabel();
923  auto const & msg = label + " delayed get";
924  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
925  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], label.c_str(), labelColorLight(label));
926  }
927  */
928 }
929 
931  /* FIXME
932  auto sid = sc.streamID();
933  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
934  auto mid = mcc.moduleDescription()->id();
935  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
936  stream_modules_[sid][mid] = nvtxInvalidRangeId;
937  }
938  */
939 }
940 
942  /* FIXME
943  auto sid = sc.streamID();
944  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
945  auto mid = mcc.moduleDescription()->id();
946  auto const & label = mcc.moduleDescription()->moduleLabel();
947  auto const & msg = label + " read from source";
948  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
949  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColorLight(label));
950  }
951  */
952 }
953 
955  /* FIXME
956  auto sid = sc.streamID();
957  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
958  auto mid = mcc.moduleDescription()->id();
959  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
960  stream_modules_[sid][mid] = nvtxInvalidRangeId;
961  }
962  */
963 }
964 
966  auto sid = sc.streamID();
967  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
968  auto mid = mcc.moduleDescription()->id();
969  auto const& label = mcc.moduleDescription()->moduleLabel();
970  auto const& msg = label + " stream begin run";
971  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
972  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
973  }
974 }
975 
977  auto sid = sc.streamID();
978  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
979  auto mid = mcc.moduleDescription()->id();
980  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
981  stream_modules_[sid][mid] = nvtxInvalidRangeId;
982  }
983 }
984 
986  auto sid = sc.streamID();
987  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
988  auto mid = mcc.moduleDescription()->id();
989  auto const& label = mcc.moduleDescription()->moduleLabel();
990  auto const& msg = label + " stream end run";
991  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
992  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
993  }
994 }
995 
997  auto sid = sc.streamID();
998  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
999  auto mid = mcc.moduleDescription()->id();
1000  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
1001  stream_modules_[sid][mid] = nvtxInvalidRangeId;
1002  }
1003 }
1004 
1006  auto sid = sc.streamID();
1007  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1008  auto mid = mcc.moduleDescription()->id();
1009  auto const& label = mcc.moduleDescription()->moduleLabel();
1010  auto const& msg = label + " stream begin lumi";
1011  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
1012  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
1013  }
1014 }
1015 
1017  auto sid = sc.streamID();
1018  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1019  auto mid = mcc.moduleDescription()->id();
1020  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
1021  stream_modules_[sid][mid] = nvtxInvalidRangeId;
1022  }
1023 }
1024 
1026  auto sid = sc.streamID();
1027  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1028  auto mid = mcc.moduleDescription()->id();
1029  auto const& label = mcc.moduleDescription()->moduleLabel();
1030  auto const& msg = label + " stream end lumi";
1031  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
1032  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
1033  }
1034 }
1035 
1037  auto sid = sc.streamID();
1038  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1039  auto mid = mcc.moduleDescription()->id();
1040  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
1041  stream_modules_[sid][mid] = nvtxInvalidRangeId;
1042  }
1043 }
1044 
1046  if (not skipFirstEvent_ or globalFirstEventDone_) {
1047  auto mid = mcc.moduleDescription()->id();
1048  auto const& label = mcc.moduleDescription()->moduleLabel();
1049  auto const& msg = label + " global begin run";
1050  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1051  }
1052 }
1053 
1055  if (not skipFirstEvent_ or globalFirstEventDone_) {
1056  auto mid = mcc.moduleDescription()->id();
1057  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1058  global_modules_[mid] = nvtxInvalidRangeId;
1059  }
1060 }
1061 
1063  if (not skipFirstEvent_ or globalFirstEventDone_) {
1064  auto mid = mcc.moduleDescription()->id();
1065  auto const& label = mcc.moduleDescription()->moduleLabel();
1066  auto const& msg = label + " global end run";
1067  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1068  }
1069 }
1070 
1072  if (not skipFirstEvent_ or globalFirstEventDone_) {
1073  auto mid = mcc.moduleDescription()->id();
1074  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1075  global_modules_[mid] = nvtxInvalidRangeId;
1076  }
1077 }
1078 
1080  if (not skipFirstEvent_ or globalFirstEventDone_) {
1081  auto mid = mcc.moduleDescription()->id();
1082  auto const& label = mcc.moduleDescription()->moduleLabel();
1083  auto const& msg = label + " global begin lumi";
1084  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1085  }
1086 }
1087 
1089  if (not skipFirstEvent_ or globalFirstEventDone_) {
1090  auto mid = mcc.moduleDescription()->id();
1091  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1092  global_modules_[mid] = nvtxInvalidRangeId;
1093  }
1094 }
1095 
1097  if (not skipFirstEvent_ or globalFirstEventDone_) {
1098  auto mid = mcc.moduleDescription()->id();
1099  auto const& label = mcc.moduleDescription()->moduleLabel();
1100  auto const& msg = label + " global end lumi";
1101  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1102  }
1103 }
1104 
1106  if (not skipFirstEvent_ or globalFirstEventDone_) {
1107  auto mid = mcc.moduleDescription()->id();
1108  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1109  global_modules_[mid] = nvtxInvalidRangeId;
1110  }
1111 }
1112 
1114  if (not skipFirstEvent_) {
1115  auto mid = desc.id();
1116  global_modules_.grow_to_at_least(mid + 1);
1117  auto const& label = desc.moduleLabel();
1118  auto const& msg = label + " construction";
1119  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1120  }
1121 }
1122 
1124  if (not skipFirstEvent_) {
1125  auto mid = desc.id();
1126  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1127  global_modules_[mid] = nvtxInvalidRangeId;
1128  }
1129 }
1130 
1133 
void watchPostModuleGlobalEndLumi(PostModuleGlobalEndLumi::slot_type const &iSlot)
void watchPostModuleConstruction(PostModuleConstruction::slot_type const &iSlot)
std::string const & pathName() const
Definition: PathContext.h:30
unsigned int maxNumberOfThreads() const
Definition: SystemBounds.h:38
void watchPreModuleGlobalBeginRun(PreModuleGlobalBeginRun::slot_type const &iSlot)
void watchPreEvent(PreEvent::slot_type const &iSlot)
void postStreamEndLumi(edm::StreamContext const &)
uint32_t labelColorLight(std::string const &label) const
void preOpenFile(std::string const &, bool)
void preModuleEventPrefetching(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preGlobalBeginRun(edm::GlobalContext const &)
void postGlobalEndRun(edm::GlobalContext const &)
void preGlobalEndLumi(edm::GlobalContext const &)
void postOpenFile(std::string const &, bool)
void postModuleEventDelayedGet(edm::StreamContext const &, edm::ModuleCallingContext const &)
void postModuleStreamBeginLumi(edm::StreamContext const &, edm::ModuleCallingContext const &)
void watchPrePathEvent(PrePathEvent::slot_type const &iSlot)
void watchPreallocate(Preallocate::slot_type const &iSlot)
void postModuleEvent(edm::StreamContext const &, edm::ModuleCallingContext const &)
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
void watchPreModuleEventAcquire(PreModuleEventAcquire::slot_type const &iSlot)
void watchPostEndJob(PostEndJob::slot_type const &iSlot)
void preModuleEndStream(edm::StreamContext const &, edm::ModuleCallingContext const &)
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
Definition: Activities.doc:12
void preModuleEventAcquire(edm::StreamContext const &, edm::ModuleCallingContext const &)
void watchPostModuleEndStream(PostModuleEndStream::slot_type const &iSlot)
void postCloseFile(std::string const &, bool)
void watchPreModuleEvent(PreModuleEvent::slot_type const &iSlot)
void postModuleEventAcquire(edm::StreamContext const &, edm::ModuleCallingContext const &)
void watchPreModuleConstruction(PreModuleConstruction::slot_type const &iSlot)
void watchPreGlobalEndLumi(PreGlobalEndLumi::slot_type const &iSlot)
void watchPostEvent(PostEvent::slot_type const &iSlot)
void preStreamBeginLumi(edm::StreamContext const &)
void preModuleEvent(edm::StreamContext const &, edm::ModuleCallingContext const &)
void watchPreStreamEndRun(PreStreamEndRun::slot_type const &iSlot)
void watchPreSourceConstruction(PreSourceConstruction::slot_type const &iSlot)
void preSourceRun(edm::RunIndex)
void watchPostSourceConstruction(PostSourceConstruction::slot_type const &iSlot)
void watchPostStreamEndLumi(PostStreamEndLumi::slot_type const &iSlot)
void watchPreGlobalBeginLumi(PreGlobalBeginLumi::slot_type const &iSlot)
void preModuleStreamBeginLumi(edm::StreamContext const &, edm::ModuleCallingContext const &)
void postSourceConstruction(edm::ModuleDescription const &)
void preModuleStreamBeginRun(edm::StreamContext const &, edm::ModuleCallingContext const &)
void watchPreEventReadFromSource(PreEventReadFromSource::slot_type const &iSlot)
void watchPreModuleDestruction(PreModuleDestruction::slot_type const &iSlot)
void watchPostPathEvent(PostPathEvent::slot_type const &iSlot)
void watchPostModuleEvent(PostModuleEvent::slot_type const &iSlot)
void watchPostModuleGlobalBeginLumi(PostModuleGlobalBeginLumi::slot_type const &iSlot)
void preCloseFile(std::string const &, bool)
void watchPostModuleStreamEndLumi(PostModuleStreamEndLumi::slot_type const &iSlot)
void watchPostGlobalBeginLumi(PostGlobalBeginLumi::slot_type const &iSlot)
void watchPostModuleStreamBeginRun(PostModuleStreamBeginRun::slot_type const &iSlot)
void watchPostSourceEvent(PostSourceEvent::slot_type const &iSlot)
void postStreamEndRun(edm::StreamContext const &)
std::vector< std::vector< nvtxRangeId_t > > stream_modules_
void postModuleEndJob(edm::ModuleDescription const &)
void postGlobalEndLumi(edm::GlobalContext const &)
void preModuleEndJob(edm::ModuleDescription const &)
void preModuleGlobalBeginLumi(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void watchPreModuleBeginStream(PreModuleBeginStream::slot_type const &iSlot)
void preGlobalBeginLumi(edm::GlobalContext const &)
void postSourceLumi(edm::LuminosityBlockIndex)
assert(be >=bs)
void watchPreStreamEndLumi(PreStreamEndLumi::slot_type const &iSlot)
std::string const & moduleLabel() const
void watchPreModuleGlobalEndRun(PreModuleGlobalEndRun::slot_type const &iSlot)
void watchPreModuleEventPrefetching(PreModuleEventPrefetching::slot_type const &iSlot)
void preModuleStreamEndLumi(edm::StreamContext const &, edm::ModuleCallingContext const &)
bool highlight(std::string const &label) const
void postModuleConstruction(edm::ModuleDescription const &)
std::vector< ModuleDescription const * > const & allModules() const
void postModuleEventPrefetching(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preModuleGlobalBeginRun(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void preGlobalEndRun(edm::GlobalContext const &)
void postSourceEvent(edm::StreamID)
void watchPostModuleEventPrefetching(PostModuleEventPrefetching::slot_type const &iSlot)
void preStreamEndRun(edm::StreamContext const &)
unsigned int maxNumberOfStreams() const
Definition: SystemBounds.h:35
void postModuleGlobalEndLumi(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void watchPreOpenFile(PreOpenFile::slot_type const &iSlot)
char const * label
void watchPostGlobalBeginRun(PostGlobalBeginRun::slot_type const &iSlot)
void watchPostCloseFile(PostCloseFile::slot_type const &iSlot)
void postModuleDestruction(edm::ModuleDescription const &)
void watchPreGlobalEndRun(PreGlobalEndRun::slot_type const &iSlot)
void preModuleEventDelayedGet(edm::StreamContext const &, edm::ModuleCallingContext const &)
void watchPostSourceRun(PostSourceRun::slot_type const &iSlot)
void watchPostStreamBeginLumi(PostStreamBeginLumi::slot_type const &iSlot)
void preSourceConstruction(edm::ModuleDescription const &)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void watchPreSourceLumi(PreSourceLumi::slot_type const &iSlot)
float __attribute__((vector_size(8))) cms_float32x2_t
Definition: ExtVec.h:12
void postModuleGlobalEndRun(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void watchPreModuleEventDelayedGet(PreModuleEventDelayedGet::slot_type const &iSlot)
def move
Definition: eostools.py:511
ModuleDescription const * moduleDescription() const
void preModuleGlobalEndRun(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void preBeginJob(edm::PathsAndConsumesOfModulesBase const &, edm::ProcessContext const &)
void watchPostModuleEventAcquire(PostModuleEventAcquire::slot_type const &iSlot)
void watchPreModuleEndJob(PreModuleEndJob::slot_type const &iSlot)
void postPathEvent(edm::StreamContext const &, edm::PathContext const &, edm::HLTPathStatus const &)
void postStreamBeginLumi(edm::StreamContext const &)
T identity(T t)
void preStreamEndLumi(edm::StreamContext const &)
uint32_t labelColor(std::string const &label) const
void watchPostGlobalEndLumi(PostGlobalEndLumi::slot_type const &iSlot)
void watchPreSourceRun(PreSourceRun::slot_type const &iSlot)
void preModuleBeginJob(edm::ModuleDescription const &)
void watchPreModuleBeginJob(PreModuleBeginJob::slot_type const &iSlot)
void postGlobalBeginLumi(edm::GlobalContext const &)
void watchPostStreamEndRun(PostStreamEndRun::slot_type const &iSlot)
tbb::concurrent_vector< nvtxRangeId_t > global_modules_
std::vector< nvtxRangeId_t > event_
void postEventReadFromSource(edm::StreamContext const &, edm::ModuleCallingContext const &)
std::vector< nvtxDomainHandle_t > stream_domain_
void postModuleBeginStream(edm::StreamContext const &, edm::ModuleCallingContext const &)
void watchPostModuleStreamEndRun(PostModuleStreamEndRun::slot_type const &iSlot)
void watchPreModuleGlobalBeginLumi(PreModuleGlobalBeginLumi::slot_type const &iSlot)
void postModuleGlobalBeginRun(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void preModuleBeginStream(edm::StreamContext const &, edm::ModuleCallingContext const &)
StreamID const & streamID() const
Definition: StreamContext.h:54
void preSourceEvent(edm::StreamID)
void watchPreGlobalBeginRun(PreGlobalBeginRun::slot_type const &iSlot)
void watchPreModuleStreamBeginLumi(PreModuleStreamBeginLumi::slot_type const &iSlot)
nvtxDomainHandle_t global_domain_
#define DEFINE_FWK_SERVICE(type)
Definition: ServiceMaker.h:96
void setComment(std::string const &value)
void watchPostModuleBeginStream(PostModuleBeginStream::slot_type const &iSlot)
void preModuleConstruction(edm::ModuleDescription const &)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
unsigned int maxNumberOfConcurrentLuminosityBlocks() const
Definition: SystemBounds.h:37
void watchPostSourceLumi(PostSourceLumi::slot_type const &iSlot)
NVProfilerService(const edm::ParameterSet &, edm::ActivityRegistry &)
void watchPreCloseFile(PreCloseFile::slot_type const &iSlot)
void watchPostModuleEventDelayedGet(PostModuleEventDelayedGet::slot_type const &iSlot)
void watchPostModuleGlobalEndRun(PostModuleGlobalEndRun::slot_type const &iSlot)
void watchPostModuleStreamBeginLumi(PostModuleStreamBeginLumi::slot_type const &iSlot)
void preStreamBeginRun(edm::StreamContext const &)
void postModuleStreamBeginRun(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preModuleStreamEndRun(edm::StreamContext const &, edm::ModuleCallingContext const &)
void watchPreModuleStreamEndLumi(PreModuleStreamEndLumi::slot_type const &iSlot)
void watchPreModuleStreamBeginRun(PreModuleStreamBeginRun::slot_type const &iSlot)
void watchPostGlobalEndRun(PostGlobalEndRun::slot_type const &iSlot)
void watchPreStreamBeginLumi(PreStreamBeginLumi::slot_type const &iSlot)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void watchPostOpenFile(PostOpenFile::slot_type const &iSlot)
tuple msg
Definition: mps_check.py:285
void watchPreModuleEndStream(PreModuleEndStream::slot_type const &iSlot)
void postGlobalBeginRun(edm::GlobalContext const &)
void watchPreBeginJob(PreBeginJob::slot_type const &iSlot)
convenience function for attaching to signal
void postModuleStreamEndLumi(edm::StreamContext const &, edm::ModuleCallingContext const &)
void postEvent(edm::StreamContext const &)
void watchPostStreamBeginRun(PostStreamBeginRun::slot_type const &iSlot)
tuple config
parse the configuration file
void postSourceRun(edm::RunIndex)
void watchPreStreamBeginRun(PreStreamBeginRun::slot_type const &iSlot)
void watchPostModuleDestruction(PostModuleDestruction::slot_type const &iSlot)
void preallocate(edm::service::SystemBounds const &)
void watchPreModuleStreamEndRun(PreModuleStreamEndRun::slot_type const &iSlot)
void postModuleEndStream(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preSourceLumi(edm::LuminosityBlockIndex)
void watchPostModuleBeginJob(PostModuleBeginJob::slot_type const &iSlot)
void watchPostEventReadFromSource(PostEventReadFromSource::slot_type const &iSlot)
void watchPostModuleGlobalBeginRun(PostModuleGlobalBeginRun::slot_type const &iSlot)
const bool showModulePrefetching_
void preEventReadFromSource(edm::StreamContext const &, edm::ModuleCallingContext const &)
unsigned int maxNumberOfConcurrentRuns() const
Definition: SystemBounds.h:36
void preEvent(edm::StreamContext const &)
void preModuleGlobalEndLumi(edm::GlobalContext const &, edm::ModuleCallingContext const &)
std::atomic< bool > globalFirstEventDone_
void watchPreSourceEvent(PreSourceEvent::slot_type const &iSlot)
void postStreamBeginRun(edm::StreamContext const &)
std::vector< std::atomic< bool > > streamFirstEventDone_
void prePathEvent(edm::StreamContext const &, edm::PathContext const &)
tmp
align.sh
Definition: createJobs.py:716
void postModuleStreamEndRun(edm::StreamContext const &, edm::ModuleCallingContext const &)
void postModuleGlobalBeginLumi(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void watchPostModuleEndJob(PostModuleEndJob::slot_type const &iSlot)
std::vector< std::string > highlightModules_
void preModuleDestruction(edm::ModuleDescription const &)
void watchPreModuleGlobalEndLumi(PreModuleGlobalEndLumi::slot_type const &iSlot)
unsigned int id() const
void postModuleBeginJob(edm::ModuleDescription const &)
void watchPostBeginJob(PostBeginJob::slot_type const &iSlot)
convenience function for attaching to signal