CMS 3D CMS Logo

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 <oneapi/tbb/concurrent_vector.h>
13 
14 #include <fmt/printf.h>
15 
16 #include <cuda_profiler_api.h>
17 #include <nvToolsExt.h>
18 
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&);
186  void postOpenFile(std::string const&);
187 
188  // these signal pair are guaranteed to be called by the same thread
189  void preCloseFile(std::string const&);
190  void postCloseFile(std::string const&);
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  // build a complete representation of the modules in the whole job
293 
294  std::vector<std::string> highlightModules_;
296  const bool skipFirstEvent_;
297 
298  std::atomic<bool> globalFirstEventDone_ = false;
299  std::vector<std::atomic<bool>> streamFirstEventDone_;
300  std::vector<nvtxRangeId_t> event_; // per-stream event ranges
301  std::vector<std::vector<nvtxRangeId_t>> stream_modules_; // per-stream, per-module ranges
302  // use a tbb::concurrent_vector rather than an std::vector because its final size is not known
303  tbb::concurrent_vector<nvtxRangeId_t> global_modules_; // global per-module events
304 
305  nvtxDomainHandle_t global_domain_; // NVTX domain for global EDM transitions
306  std::vector<nvtxDomainHandle_t> stream_domain_; // NVTX domains for per-EDM-stream transitions
307 };
308 
310  : highlightModules_(config.getUntrackedParameter<std::vector<std::string>>("highlightModules")),
311  showModulePrefetching_(config.getUntrackedParameter<bool>("showModulePrefetching")),
312  skipFirstEvent_(config.getUntrackedParameter<bool>("skipFirstEvent")) {
313  // make sure that CUDA is initialised, and that the CUDAService destructor is called after this service's destructor
314  edm::Service<CUDAService> cudaService;
315 
317 
318  // create the NVTX domain for global EDM transitions
319  global_domain_ = nvtxDomainCreate("EDM Global");
320 
321  // enables profile collection; if profiling is already enabled it has no effect
322  if (not skipFirstEvent_) {
323  cudaProfilerStart();
324  }
325 
327 
328  // these signal pair are NOT guaranteed to be called by the same thread
331 
332  // there is no preEndJob() signal
334 
335  // these signal pair are NOT guaranteed to be called by the same thread
338 
339  // these signal pair are NOT guaranteed to be called by the same thread
342 
343  // these signal pair are NOT guaranteed to be called by the same thread
346 
347  // these signal pair are NOT guaranteed to be called by the same thread
350 
351  // these signal pair are NOT guaranteed to be called by the same thread
354 
355  // these signal pair are NOT guaranteed to be called by the same thread
358 
359  // these signal pair are NOT guaranteed to be called by the same thread
362 
363  // these signal pair are NOT guaranteed to be called by the same thread
366 
367  // these signal pair are NOT guaranteed to be called by the same thread
370 
371  // these signal pair are NOT guaranteed to be called by the same thread
374 
376  // these signal pair are NOT guaranteed to be called by the same thread
379  }
380 
381  // these signal pair are guaranteed to be called by the same thread
384 
385  // these signal pair are guaranteed to be called by the same thread
388 
389  // these signal pair are guaranteed to be called by the same thread
392 
393  // these signal pair are guaranteed to be called by the same thread
396 
397  // these signal pair are guaranteed to be called by the same thread
400 
401  // these signal pair are guaranteed to be called by the same thread
404 
405  // these signal pair are guaranteed to be called by the same thread
408 
409  // these signal pair are guaranteed to be called by the same thread
412 
413  // these signal pair are guaranteed to be called by the same thread
416 
417  // these signal pair are guaranteed to be called by the same thread
420 
421  // these signal pair are guaranteed to be called by the same thread
424 
425  // these signal pair are guaranteed to be called by the same thread
428 
429  // these signal pair are guaranteed to be called by the same thread
432 
433  // these signal pair are guaranteed to be called by the same thread
436 
437  // these signal pair are guaranteed to be called by the same thread
440 
441  // these signal pair are guaranteed to be called by the same thread
444 
445  // these signal pair are guaranteed to be called by the same thread
448 
449  // these signal pair are guaranteed to be called by the same thread
452 
453  // these signal pair are guaranteed to be called by the same thread
456 
457  // these signal pair are guaranteed to be called by the same thread
460 
461  // these signal pair are guaranteed to be called by the same thread
464 
465  // these signal pair are guaranteed to be called by the same thread
468 
469  // these signal pair are guaranteed to be called by the same thread
472 
473  // these signal pair are guaranteed to be called by the same thread
476 }
477 
479  for (unsigned int sid = 0; sid < stream_domain_.size(); ++sid) {
480  nvtxDomainDestroy(stream_domain_[sid]);
481  }
482  nvtxDomainDestroy(global_domain_);
483  cudaProfilerStop();
484 }
485 
488  desc.addUntracked<std::vector<std::string>>("highlightModules", {})->setComment("");
489  desc.addUntracked<bool>("showModulePrefetching", false)
490  ->setComment("Show the stack of dependencies that requested to run a module.");
491  desc.addUntracked<bool>("skipFirstEvent", false)
492  ->setComment(
493  "Start profiling after the first event has completed.\nWith multiple streams, ignore transitions belonging "
494  "to events started in parallel to the first event.\nRequires running nvprof with the '--profile-from-start "
495  "off' option.");
496  descriptions.add("NVProfilerService", desc);
497  descriptions.setComment(R"(This Service provides CMSSW-aware annotations to nvprof/nvvm.
498 
499 Notes on nvprof options:
500  - the option '--profile-from-start off' should be used if skipFirstEvent is True.
501  - the option '--cpu-profiling on' currently results in cmsRun being stuck at the beginning of the job.
502  - the option '--cpu-thread-tracing on' is not compatible with jemalloc, and should only be used with cmsRunGlibC.)");
503 }
504 
506  std::stringstream out;
507  out << "preallocate: " << bounds.maxNumberOfConcurrentRuns() << " concurrent runs, "
508  << bounds.maxNumberOfConcurrentLuminosityBlocks() << " luminosity sections, " << bounds.maxNumberOfStreams()
509  << " streams\nrunning on " << bounds.maxNumberOfThreads() << " threads";
510  nvtxDomainMark(global_domain_, out.str().c_str());
511 
512  auto concurrentStreams = bounds.maxNumberOfStreams();
513  // create the NVTX domains for per-EDM-stream transitions
514  stream_domain_.resize(concurrentStreams);
515  for (unsigned int sid = 0; sid < concurrentStreams; ++sid) {
516  stream_domain_[sid] = nvtxDomainCreate(fmt::sprintf("EDM Stream %d", sid).c_str());
517  }
518 
519  event_.resize(concurrentStreams);
520  stream_modules_.resize(concurrentStreams);
521  if (skipFirstEvent_) {
522  globalFirstEventDone_ = false;
523  std::vector<std::atomic<bool>> tmp(concurrentStreams);
524  for (auto& element : tmp)
525  std::atomic_init(&element, false);
527  }
528 }
529 
531  edm::ProcessContext const& context) {
532  callgraph_.preBeginJob(pathsAndConsumes, context);
533  nvtxDomainMark(global_domain_, "preBeginJob");
534 
535  // this assumes that preBeginJob is not called concurrently with the modules' beginJob method
536  // or the preBeginJob for a subprocess
537  unsigned int modules = callgraph_.size();
538  global_modules_.resize(modules, nvtxInvalidRangeId);
539  for (unsigned int sid = 0; sid < stream_modules_.size(); ++sid) {
540  stream_modules_[sid].resize(modules, nvtxInvalidRangeId);
541  }
542 }
543 
546  nvtxDomainMark(global_domain_, "postBeginJob");
547  }
548 }
549 
552  nvtxDomainMark(global_domain_, "postEndJob");
553  }
554 }
555 
558  nvtxDomainRangePush(stream_domain_[sid], "source");
559  }
560 }
561 
564  nvtxDomainRangePop(stream_domain_[sid]);
565  }
566 }
567 
570  nvtxDomainRangePush(global_domain_, "source lumi");
571  }
572 }
573 
576  nvtxDomainRangePop(global_domain_);
577  }
578 }
579 
582  nvtxDomainRangePush(global_domain_, "source run");
583  }
584 }
585 
588  nvtxDomainRangePop(global_domain_);
589  }
590 }
591 
594  nvtxDomainRangePush(global_domain_, ("open file "s + lfn).c_str());
595  }
596 }
597 
600  nvtxDomainRangePop(global_domain_);
601  }
602 }
603 
606  nvtxDomainRangePush(global_domain_, ("close file "s + lfn).c_str());
607  }
608 }
609 
612  nvtxDomainRangePop(global_domain_);
613  }
614 }
615 
617  auto sid = sc.streamID();
619  auto mid = mcc.moduleDescription()->id();
620  auto const& label = mcc.moduleDescription()->moduleLabel();
621  auto const& msg = label + " begin stream";
622  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
623  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
624  }
625 }
626 
628  auto sid = sc.streamID();
630  auto mid = mcc.moduleDescription()->id();
631  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
632  stream_modules_[sid][mid] = nvtxInvalidRangeId;
633  }
634 }
635 
637  auto sid = sc.streamID();
639  auto mid = mcc.moduleDescription()->id();
640  auto const& label = mcc.moduleDescription()->moduleLabel();
641  auto const& msg = label + " end stream";
642  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
643  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
644  }
645 }
646 
648  auto sid = sc.streamID();
650  auto mid = mcc.moduleDescription()->id();
651  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
652  stream_modules_[sid][mid] = nvtxInvalidRangeId;
653  }
654 }
655 
658  nvtxDomainRangePush(global_domain_, "global begin run");
659  }
660 }
661 
664  nvtxDomainRangePop(global_domain_);
665  }
666 }
667 
670  nvtxDomainRangePush(global_domain_, "global end run");
671  }
672 }
673 
676  nvtxDomainRangePop(global_domain_);
677  }
678 }
679 
681  auto sid = sc.streamID();
683  nvtxDomainRangePush(stream_domain_[sid], "stream begin run");
684  }
685 }
686 
688  auto sid = sc.streamID();
690  nvtxDomainRangePop(stream_domain_[sid]);
691  }
692 }
693 
695  auto sid = sc.streamID();
697  nvtxDomainRangePush(stream_domain_[sid], "stream end run");
698  }
699 }
700 
702  auto sid = sc.streamID();
704  nvtxDomainRangePop(stream_domain_[sid]);
705  }
706 }
707 
710  nvtxDomainRangePush(global_domain_, "global begin lumi");
711  }
712 }
713 
716  nvtxDomainRangePop(global_domain_);
717  }
718 }
719 
722  nvtxDomainRangePush(global_domain_, "global end lumi");
723  }
724 }
725 
728  nvtxDomainRangePop(global_domain_);
729  }
730 }
731 
733  auto sid = sc.streamID();
735  nvtxDomainRangePush(stream_domain_[sid], "stream begin lumi");
736  }
737 }
738 
740  auto sid = sc.streamID();
742  nvtxDomainRangePop(stream_domain_[sid]);
743  }
744 }
745 
747  auto sid = sc.streamID();
748  nvtxDomainRangePush(stream_domain_[sid], "stream end lumi");
749 }
750 
752  auto sid = sc.streamID();
754  nvtxDomainRangePop(stream_domain_[sid]);
755  }
756 }
757 
759  auto sid = sc.streamID();
761  event_[sid] = nvtxDomainRangeStartColor(stream_domain_[sid], "event", nvtxDarkGreen);
762  }
763 }
764 
766  auto sid = sc.streamID();
768  nvtxDomainRangeEnd(stream_domain_[sid], event_[sid]);
769  event_[sid] = nvtxInvalidRangeId;
770  } else {
771  streamFirstEventDone_[sid] = true;
772  auto identity = [](bool x) { return x; };
773  if (std::all_of(streamFirstEventDone_.begin(), streamFirstEventDone_.end(), identity)) {
774  bool expected = false;
775  if (globalFirstEventDone_.compare_exchange_strong(expected, true))
776  cudaProfilerStart();
777  }
778  }
779 }
780 
782  auto sid = sc.streamID();
784  nvtxDomainMark(global_domain_, ("before path "s + pc.pathName()).c_str());
785  }
786 }
787 
789  edm::PathContext const& pc,
790  edm::HLTPathStatus const& hlts) {
791  auto sid = sc.streamID();
793  nvtxDomainMark(global_domain_, ("after path "s + pc.pathName()).c_str());
794  }
795 }
796 
798  auto sid = sc.streamID();
800  auto mid = mcc.moduleDescription()->id();
801  auto const& label = mcc.moduleDescription()->moduleLabel();
802  auto const& msg = label + " prefetching";
803  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
804  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColorLight(label));
805  }
806 }
807 
809  auto sid = sc.streamID();
811  auto mid = mcc.moduleDescription()->id();
812  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
813  stream_modules_[sid][mid] = nvtxInvalidRangeId;
814  }
815 }
816 
818  if (not skipFirstEvent_) {
819  auto mid = desc.id();
820  global_modules_.grow_to_at_least(mid + 1);
821  auto const& label = desc.moduleLabel();
822  auto const& msg = label + " construction";
823  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
824  }
825 }
826 
828  if (not skipFirstEvent_) {
829  auto mid = desc.id();
830  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
831  global_modules_[mid] = nvtxInvalidRangeId;
832  }
833 }
834 
836  if (not skipFirstEvent_) {
837  auto mid = desc.id();
838  global_modules_.grow_to_at_least(mid + 1);
839  auto const& label = desc.moduleLabel();
840  auto const& msg = label + " destruction";
841  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
842  }
843 }
844 
846  if (not skipFirstEvent_) {
847  auto mid = desc.id();
848  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
849  global_modules_[mid] = nvtxInvalidRangeId;
850  }
851 }
852 
854  if (not skipFirstEvent_) {
855  auto mid = desc.id();
856  auto const& label = desc.moduleLabel();
857  auto const& msg = label + " begin job";
858  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
859  }
860 }
861 
863  if (not skipFirstEvent_) {
864  auto mid = desc.id();
865  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
866  global_modules_[mid] = nvtxInvalidRangeId;
867  }
868 }
869 
872  auto mid = desc.id();
873  auto const& label = desc.moduleLabel();
874  auto const& msg = label + " end job";
875  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
876  }
877 }
878 
881  auto mid = desc.id();
882  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
883  global_modules_[mid] = nvtxInvalidRangeId;
884  }
885 }
886 
888  auto sid = sc.streamID();
890  auto mid = mcc.moduleDescription()->id();
891  auto const& label = mcc.moduleDescription()->moduleLabel();
892  auto const& msg = label + " acquire";
893  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
894  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
895  }
896 }
897 
899  auto sid = sc.streamID();
901  auto mid = mcc.moduleDescription()->id();
902  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
903  stream_modules_[sid][mid] = nvtxInvalidRangeId;
904  }
905 }
906 
908  auto sid = sc.streamID();
910  auto mid = mcc.moduleDescription()->id();
911  auto const& label = mcc.moduleDescription()->moduleLabel();
912  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
913  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], label.c_str(), labelColor(label));
914  }
915 }
916 
918  auto sid = sc.streamID();
920  auto mid = mcc.moduleDescription()->id();
921  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
922  stream_modules_[sid][mid] = nvtxInvalidRangeId;
923  }
924 }
925 
927  /* FIXME
928  auto sid = sc.streamID();
929  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
930  auto mid = mcc.moduleDescription()->id();
931  auto const & label = mcc.moduleDescription()->moduleLabel();
932  auto const & msg = label + " delayed get";
933  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
934  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], label.c_str(), labelColorLight(label));
935  }
936  */
937 }
938 
940  /* FIXME
941  auto sid = sc.streamID();
942  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
943  auto mid = mcc.moduleDescription()->id();
944  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
945  stream_modules_[sid][mid] = nvtxInvalidRangeId;
946  }
947  */
948 }
949 
951  /* FIXME
952  auto sid = sc.streamID();
953  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
954  auto mid = mcc.moduleDescription()->id();
955  auto const & label = mcc.moduleDescription()->moduleLabel();
956  auto const & msg = label + " read from source";
957  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
958  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColorLight(label));
959  }
960  */
961 }
962 
964  /* FIXME
965  auto sid = sc.streamID();
966  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
967  auto mid = mcc.moduleDescription()->id();
968  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
969  stream_modules_[sid][mid] = nvtxInvalidRangeId;
970  }
971  */
972 }
973 
975  auto sid = sc.streamID();
977  auto mid = mcc.moduleDescription()->id();
978  auto const& label = mcc.moduleDescription()->moduleLabel();
979  auto const& msg = label + " stream begin run";
980  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
981  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
982  }
983 }
984 
986  auto sid = sc.streamID();
988  auto mid = mcc.moduleDescription()->id();
989  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
990  stream_modules_[sid][mid] = nvtxInvalidRangeId;
991  }
992 }
993 
995  auto sid = sc.streamID();
997  auto mid = mcc.moduleDescription()->id();
998  auto const& label = mcc.moduleDescription()->moduleLabel();
999  auto const& msg = label + " stream end run";
1000  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
1001  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
1002  }
1003 }
1004 
1006  auto sid = sc.streamID();
1007  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1008  auto mid = mcc.moduleDescription()->id();
1009  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
1010  stream_modules_[sid][mid] = nvtxInvalidRangeId;
1011  }
1012 }
1013 
1015  auto sid = sc.streamID();
1016  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1017  auto mid = mcc.moduleDescription()->id();
1018  auto const& label = mcc.moduleDescription()->moduleLabel();
1019  auto const& msg = label + " stream begin lumi";
1020  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
1021  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
1022  }
1023 }
1024 
1026  auto sid = sc.streamID();
1027  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1028  auto mid = mcc.moduleDescription()->id();
1029  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
1030  stream_modules_[sid][mid] = nvtxInvalidRangeId;
1031  }
1032 }
1033 
1035  auto sid = sc.streamID();
1036  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1037  auto mid = mcc.moduleDescription()->id();
1038  auto const& label = mcc.moduleDescription()->moduleLabel();
1039  auto const& msg = label + " stream end lumi";
1040  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
1041  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
1042  }
1043 }
1044 
1046  auto sid = sc.streamID();
1047  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1048  auto mid = mcc.moduleDescription()->id();
1049  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
1050  stream_modules_[sid][mid] = nvtxInvalidRangeId;
1051  }
1052 }
1053 
1056  auto mid = mcc.moduleDescription()->id();
1057  auto const& label = mcc.moduleDescription()->moduleLabel();
1058  auto const& msg = label + " global begin run";
1059  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1060  }
1061 }
1062 
1065  auto mid = mcc.moduleDescription()->id();
1066  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1067  global_modules_[mid] = nvtxInvalidRangeId;
1068  }
1069 }
1070 
1073  auto mid = mcc.moduleDescription()->id();
1074  auto const& label = mcc.moduleDescription()->moduleLabel();
1075  auto const& msg = label + " global end run";
1076  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1077  }
1078 }
1079 
1082  auto mid = mcc.moduleDescription()->id();
1083  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1084  global_modules_[mid] = nvtxInvalidRangeId;
1085  }
1086 }
1087 
1090  auto mid = mcc.moduleDescription()->id();
1091  auto const& label = mcc.moduleDescription()->moduleLabel();
1092  auto const& msg = label + " global begin lumi";
1093  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1094  }
1095 }
1096 
1099  auto mid = mcc.moduleDescription()->id();
1100  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1101  global_modules_[mid] = nvtxInvalidRangeId;
1102  }
1103 }
1104 
1107  auto mid = mcc.moduleDescription()->id();
1108  auto const& label = mcc.moduleDescription()->moduleLabel();
1109  auto const& msg = label + " global end lumi";
1110  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1111  }
1112 }
1113 
1116  auto mid = mcc.moduleDescription()->id();
1117  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1118  global_modules_[mid] = nvtxInvalidRangeId;
1119  }
1120 }
1121 
1124 
1125  if (not skipFirstEvent_) {
1126  auto mid = desc.id();
1127  global_modules_.grow_to_at_least(mid + 1);
1128  auto const& label = desc.moduleLabel();
1129  auto const& msg = label + " construction";
1130  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1131  }
1132 }
1133 
1135  if (not skipFirstEvent_) {
1136  auto mid = desc.id();
1137  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1138  global_modules_[mid] = nvtxInvalidRangeId;
1139  }
1140 }
1141 
void watchPostModuleGlobalEndLumi(PostModuleGlobalEndLumi::slot_type const &iSlot)
void watchPostModuleConstruction(PostModuleConstruction::slot_type const &iSlot)
void watchPreModuleGlobalBeginRun(PreModuleGlobalBeginRun::slot_type const &iSlot)
void watchPreEvent(PreEvent::slot_type const &iSlot)
void postStreamEndLumi(edm::StreamContext const &)
ModuleDescription const * moduleDescription() const
void preModuleEventPrefetching(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preGlobalBeginRun(edm::GlobalContext const &)
void postGlobalEndRun(edm::GlobalContext const &)
void preGlobalEndLumi(edm::GlobalContext const &)
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 &)
void watchPreModuleEventAcquire(PreModuleEventAcquire::slot_type const &iSlot)
void watchPostEndJob(PostEndJob::slot_type const &iSlot)
void preModuleEndStream(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preModuleEventAcquire(edm::StreamContext const &, edm::ModuleCallingContext const &)
void watchPostModuleEndStream(PostModuleEndStream::slot_type const &iSlot)
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 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)
uint32_t labelColorLight(std::string const &label) const
void postStreamEndRun(edm::StreamContext const &)
Definition: config.py:1
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)
void watchPreModuleGlobalEndRun(PreModuleGlobalEndRun::slot_type const &iSlot)
void watchPreModuleEventPrefetching(PreModuleEventPrefetching::slot_type const &iSlot)
void preModuleStreamEndLumi(edm::StreamContext const &, edm::ModuleCallingContext const &)
void postCloseFile(std::string const &)
void postModuleConstruction(edm::ModuleDescription const &)
ProcessCallGraph callgraph_
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 &)
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)
unsigned int id() const
bool highlight(std::string const &label) const
void preModuleEventDelayedGet(edm::StreamContext const &, edm::ModuleCallingContext const &)
uint32_t labelColor(std::string const &label) 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)
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::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
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)
StreamID const & streamID() const
Definition: StreamContext.h:54
void preBeginJob(edm::PathsAndConsumesOfModulesBase const &, edm::ProcessContext 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 preCloseFile(std::string const &)
void postPathEvent(edm::StreamContext const &, edm::PathContext const &, edm::HLTPathStatus const &)
void postStreamBeginLumi(edm::StreamContext const &)
void preSourceConstruction(edm::ModuleDescription const &)
T identity(T t)
void preStreamEndLumi(edm::StreamContext 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 &)
void preSourceEvent(edm::StreamID)
void watchPreGlobalBeginRun(PreGlobalBeginRun::slot_type const &iSlot)
void watchPreModuleStreamBeginLumi(PreModuleStreamBeginLumi::slot_type const &iSlot)
nvtxDomainHandle_t global_domain_
void preOpenFile(std::string const &)
#define DEFINE_FWK_SERVICE(type)
Definition: ServiceMaker.h:97
void setComment(std::string const &value)
void watchPostModuleBeginStream(PostModuleBeginStream::slot_type const &iSlot)
unsigned int size() const
void preModuleConstruction(edm::ModuleDescription const &)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
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)
void postSourceRun(edm::RunIndex)
void watchPreStreamBeginRun(PreStreamBeginRun::slot_type const &iSlot)
void watchPostModuleDestruction(PostModuleDestruction::slot_type const &iSlot)
void postOpenFile(std::string const &)
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 &)
void preEvent(edm::StreamContext const &)
std::string const & pathName() const
Definition: PathContext.h:30
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
std::string const & moduleLabel() const
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_
def move(src, dest)
Definition: eostools.py:511
void preModuleDestruction(edm::ModuleDescription const &)
void watchPreModuleGlobalEndLumi(PreModuleGlobalEndLumi::slot_type const &iSlot)
void postModuleBeginJob(edm::ModuleDescription const &)
void watchPostBeginJob(PostBeginJob::slot_type const &iSlot)
convenience function for attaching to signal