CMS 3D CMS Logo

NVProfilerService.cc
Go to the documentation of this file.
1 #include <algorithm>
2 #include <iostream>
3 #include <sstream>
4 #include <string>
5 #include <vector>
6 
7 #include <oneapi/tbb/concurrent_vector.h>
8 
9 #include <fmt/printf.h>
10 
11 #include <cuda_profiler_api.h>
12 #include <nvToolsExt.h>
13 
40 
41 using namespace std::string_literals;
42 
43 namespace {
44  int nvtxDomainRangePush(nvtxDomainHandle_t domain, const char* message) {
45  nvtxEventAttributes_t eventAttrib = {};
46  eventAttrib.version = NVTX_VERSION;
47  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
48  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
49  eventAttrib.message.ascii = message;
50  return nvtxDomainRangePushEx(domain, &eventAttrib);
51  }
52 
53  __attribute__((unused)) int nvtxDomainRangePushColor(nvtxDomainHandle_t domain, const char* message, uint32_t color) {
54  nvtxEventAttributes_t eventAttrib = {};
55  eventAttrib.version = NVTX_VERSION;
56  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
57  eventAttrib.colorType = NVTX_COLOR_ARGB;
58  eventAttrib.color = color;
59  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
60  eventAttrib.message.ascii = message;
61  return nvtxDomainRangePushEx(domain, &eventAttrib);
62  }
63 
64  __attribute__((unused)) nvtxRangeId_t nvtxDomainRangeStart(nvtxDomainHandle_t domain, const char* message) {
65  nvtxEventAttributes_t eventAttrib = {};
66  eventAttrib.version = NVTX_VERSION;
67  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
68  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
69  eventAttrib.message.ascii = message;
70  return nvtxDomainRangeStartEx(domain, &eventAttrib);
71  }
72 
73  nvtxRangeId_t nvtxDomainRangeStartColor(nvtxDomainHandle_t domain, const char* message, uint32_t color) {
74  nvtxEventAttributes_t eventAttrib = {};
75  eventAttrib.version = NVTX_VERSION;
76  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
77  eventAttrib.colorType = NVTX_COLOR_ARGB;
78  eventAttrib.color = color;
79  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
80  eventAttrib.message.ascii = message;
81  return nvtxDomainRangeStartEx(domain, &eventAttrib);
82  }
83 
84  void nvtxDomainMark(nvtxDomainHandle_t domain, const char* message) {
85  nvtxEventAttributes_t eventAttrib = {};
86  eventAttrib.version = NVTX_VERSION;
87  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
88  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
89  eventAttrib.message.ascii = message;
90  nvtxDomainMarkEx(domain, &eventAttrib);
91  }
92 
93  __attribute__((unused)) void nvtxDomainMarkColor(nvtxDomainHandle_t domain, const char* message, uint32_t color) {
94  nvtxEventAttributes_t eventAttrib = {};
95  eventAttrib.version = NVTX_VERSION;
96  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
97  eventAttrib.colorType = NVTX_COLOR_ARGB;
98  eventAttrib.color = color;
99  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
100  eventAttrib.message.ascii = message;
101  nvtxDomainMarkEx(domain, &eventAttrib);
102  }
103 
104  enum {
105  nvtxBlack = 0x00000000,
106  nvtxRed = 0x00ff0000,
107  nvtxDarkGreen = 0x00009900,
108  nvtxGreen = 0x0000ff00,
109  nvtxLightGreen = 0x00ccffcc,
110  nvtxBlue = 0x000000ff,
111  nvtxAmber = 0x00ffbf00,
112  nvtxLightAmber = 0x00fff2cc,
113  nvtxWhite = 0x00ffffff
114  };
115 
116  constexpr nvtxRangeId_t nvtxInvalidRangeId = 0xfffffffffffffffful;
117 } // namespace
118 
120 public:
123 
124  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
125 
126  void preallocate(edm::service::SystemBounds const&);
127 
128  // these signal pair are NOT guaranteed to be called by the same thread
129  void preBeginJob(edm::PathsAndConsumesOfModulesBase const&, edm::ProcessContext const&);
130  void postBeginJob();
131 
132  // there is no preEndJob() signal
133  void postEndJob();
134 
135  // these signal pair are NOT guaranteed to be called by the same thread
136  void preGlobalBeginRun(edm::GlobalContext const&);
137  void postGlobalBeginRun(edm::GlobalContext const&);
138 
139  // these signal pair are NOT guaranteed to be called by the same thread
140  void preGlobalEndRun(edm::GlobalContext const&);
141  void postGlobalEndRun(edm::GlobalContext const&);
142 
143  // these signal pair are NOT guaranteed to be called by the same thread
144  void preStreamBeginRun(edm::StreamContext const&);
145  void postStreamBeginRun(edm::StreamContext const&);
146 
147  // these signal pair are NOT guaranteed to be called by the same thread
148  void preStreamEndRun(edm::StreamContext const&);
149  void postStreamEndRun(edm::StreamContext const&);
150 
151  // these signal pair are NOT guaranteed to be called by the same thread
152  void preGlobalBeginLumi(edm::GlobalContext const&);
153  void postGlobalBeginLumi(edm::GlobalContext const&);
154 
155  // these signal pair are NOT guaranteed to be called by the same thread
156  void preGlobalEndLumi(edm::GlobalContext const&);
157  void postGlobalEndLumi(edm::GlobalContext const&);
158 
159  // these signal pair are NOT guaranteed to be called by the same thread
160  void preStreamBeginLumi(edm::StreamContext const&);
161  void postStreamBeginLumi(edm::StreamContext const&);
162 
163  // these signal pair are NOT guaranteed to be called by the same thread
164  void preStreamEndLumi(edm::StreamContext const&);
165  void postStreamEndLumi(edm::StreamContext const&);
166 
167  // these signal pair are NOT guaranteed to be called by the same thread
168  void preEvent(edm::StreamContext const&);
169  void postEvent(edm::StreamContext const&);
170 
171  // these signal pair are NOT guaranteed to be called by the same thread
172  void prePathEvent(edm::StreamContext const&, edm::PathContext const&);
173  void postPathEvent(edm::StreamContext const&, edm::PathContext const&, edm::HLTPathStatus const&);
174 
175  // these signal pair are NOT guaranteed to be called by the same thread
176  void preModuleEventPrefetching(edm::StreamContext const&, edm::ModuleCallingContext const&);
177  void postModuleEventPrefetching(edm::StreamContext const&, edm::ModuleCallingContext const&);
178 
179  // these signal pair are guaranteed to be called by the same thread
180  void preOpenFile(std::string const&);
181  void postOpenFile(std::string const&);
182 
183  // these signal pair are guaranteed to be called by the same thread
184  void preCloseFile(std::string const&);
185  void postCloseFile(std::string const&);
186 
187  // these signal pair are guaranteed to be called by the same thread
188  void preSourceConstruction(edm::ModuleDescription const&);
189  void postSourceConstruction(edm::ModuleDescription const&);
190 
191  // these signal pair are guaranteed to be called by the same thread
192  void preSourceRun(edm::RunIndex);
193  void postSourceRun(edm::RunIndex);
194 
195  // these signal pair are guaranteed to be called by the same thread
196  void preSourceLumi(edm::LuminosityBlockIndex);
197  void postSourceLumi(edm::LuminosityBlockIndex);
198 
199  // these signal pair are guaranteed to be called by the same thread
200  void preSourceEvent(edm::StreamID);
201  void postSourceEvent(edm::StreamID);
202 
203  // these signal pair are guaranteed to be called by the same thread
204  void preModuleConstruction(edm::ModuleDescription const&);
205  void postModuleConstruction(edm::ModuleDescription const&);
206 
207  // these signal pair are guaranteed to be called by the same thread
208  void preModuleDestruction(edm::ModuleDescription const&);
209  void postModuleDestruction(edm::ModuleDescription const&);
210 
211  // these signal pair are guaranteed to be called by the same thread
212  void preModuleBeginJob(edm::ModuleDescription const&);
213  void postModuleBeginJob(edm::ModuleDescription const&);
214 
215  // these signal pair are guaranteed to be called by the same thread
216  void preModuleEndJob(edm::ModuleDescription const&);
217  void postModuleEndJob(edm::ModuleDescription const&);
218 
219  // these signal pair are guaranteed to be called by the same thread
220  void preModuleBeginStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
221  void postModuleBeginStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
222 
223  // these signal pair are guaranteed to be called by the same thread
224  void preModuleEndStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
225  void postModuleEndStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
226 
227  // these signal pair are guaranteed to be called by the same thread
228  void preModuleGlobalBeginRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
229  void postModuleGlobalBeginRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
230 
231  // these signal pair are guaranteed to be called by the same thread
232  void preModuleGlobalEndRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
233  void postModuleGlobalEndRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
234 
235  // these signal pair are guaranteed to be called by the same thread
236  void preModuleGlobalBeginLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
237  void postModuleGlobalBeginLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
238 
239  // these signal pair are guaranteed to be called by the same thread
240  void preModuleGlobalEndLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
241  void postModuleGlobalEndLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
242 
243  // these signal pair are guaranteed to be called by the same thread
244  void preModuleStreamBeginRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
245  void postModuleStreamBeginRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
246 
247  // these signal pair are guaranteed to be called by the same thread
248  void preModuleStreamEndRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
249  void postModuleStreamEndRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
250 
251  // these signal pair are guaranteed to be called by the same thread
252  void preModuleStreamBeginLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
253  void postModuleStreamBeginLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
254 
255  // these signal pair are guaranteed to be called by the same thread
256  void preModuleStreamEndLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
257  void postModuleStreamEndLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
258 
259  // these signal pair are guaranteed to be called by the same thread
260  void preModuleEventAcquire(edm::StreamContext const&, edm::ModuleCallingContext const&);
261  void postModuleEventAcquire(edm::StreamContext const&, edm::ModuleCallingContext const&);
262 
263  // these signal pair are guaranteed to be called by the same thread
264  void preModuleEvent(edm::StreamContext const&, edm::ModuleCallingContext const&);
265  void postModuleEvent(edm::StreamContext const&, edm::ModuleCallingContext const&);
266 
267  // these signal pair are guaranteed to be called by the same thread
268  void preModuleEventDelayedGet(edm::StreamContext const&, edm::ModuleCallingContext const&);
269  void postModuleEventDelayedGet(edm::StreamContext const&, edm::ModuleCallingContext const&);
270 
271  // these signal pair are guaranteed to be called by the same thread
272  void preEventReadFromSource(edm::StreamContext const&, edm::ModuleCallingContext const&);
273  void postEventReadFromSource(edm::StreamContext const&, edm::ModuleCallingContext const&);
274 
275 private:
276  bool highlight(std::string const& label) const {
277  return (std::binary_search(highlightModules_.begin(), highlightModules_.end(), label));
278  }
279 
280  uint32_t labelColor(std::string const& label) const { return highlight(label) ? nvtxAmber : nvtxGreen; }
281 
282  uint32_t labelColorLight(std::string const& label) const {
283  return highlight(label) ? nvtxLightAmber : nvtxLightGreen;
284  }
285 
286  // build a complete representation of the modules in the whole job
288 
289  std::vector<std::string> highlightModules_;
291  const bool skipFirstEvent_;
292 
293  std::atomic<bool> globalFirstEventDone_ = false;
294  std::vector<std::atomic<bool>> streamFirstEventDone_;
295  std::vector<nvtxRangeId_t> event_; // per-stream event ranges
296  std::vector<std::vector<nvtxRangeId_t>> stream_modules_; // per-stream, per-module ranges
297  // use a tbb::concurrent_vector rather than an std::vector because its final size is not known
298  tbb::concurrent_vector<nvtxRangeId_t> global_modules_; // global per-module events
299 
300  nvtxDomainHandle_t global_domain_; // NVTX domain for global EDM transitions
301  std::vector<nvtxDomainHandle_t> stream_domain_; // NVTX domains for per-EDM-stream transitions
302 };
303 
305  : highlightModules_(config.getUntrackedParameter<std::vector<std::string>>("highlightModules")),
306  showModulePrefetching_(config.getUntrackedParameter<bool>("showModulePrefetching")),
307  skipFirstEvent_(config.getUntrackedParameter<bool>("skipFirstEvent")) {
308  // make sure that CUDA is initialised, and that the CUDAInterface destructor is called after this service's destructor
310  if (not cuda or not cuda->enabled())
311  return;
312 
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.
495 
496 Notes on nvprof options:
497  - the option '--profile-from-start off' should be used if skipFirstEvent is True.
498  - the option '--cpu-profiling on' currently results in cmsRun being stuck at the beginning of the job.
499  - the option '--cpu-thread-tracing on' is not compatible with jemalloc, and should only be used with cmsRunGlibC.)");
500 }
501 
503  std::stringstream out;
504  out << "preallocate: " << bounds.maxNumberOfConcurrentRuns() << " concurrent runs, "
505  << bounds.maxNumberOfConcurrentLuminosityBlocks() << " luminosity sections, " << bounds.maxNumberOfStreams()
506  << " streams\nrunning on " << bounds.maxNumberOfThreads() << " threads";
507  nvtxDomainMark(global_domain_, out.str().c_str());
508 
509  auto concurrentStreams = bounds.maxNumberOfStreams();
510  // create the NVTX domains for per-EDM-stream transitions
511  stream_domain_.resize(concurrentStreams);
512  for (unsigned int sid = 0; sid < concurrentStreams; ++sid) {
513  stream_domain_[sid] = nvtxDomainCreate(fmt::sprintf("EDM Stream %d", sid).c_str());
514  }
515 
516  event_.resize(concurrentStreams);
517  stream_modules_.resize(concurrentStreams);
518  if (skipFirstEvent_) {
519  globalFirstEventDone_ = false;
520  std::vector<std::atomic<bool>> tmp(concurrentStreams);
521  for (auto& element : tmp)
522  std::atomic_init(&element, false);
524  }
525 }
526 
528  edm::ProcessContext const& context) {
529  callgraph_.preBeginJob(pathsAndConsumes, context);
530  nvtxDomainMark(global_domain_, "preBeginJob");
531 
532  // this assumes that preBeginJob is not called concurrently with the modules' beginJob method
533  // or the preBeginJob for a subprocess
534  unsigned int modules = callgraph_.size();
535  global_modules_.resize(modules, nvtxInvalidRangeId);
536  for (unsigned int sid = 0; sid < stream_modules_.size(); ++sid) {
537  stream_modules_[sid].resize(modules, nvtxInvalidRangeId);
538  }
539 }
540 
543  nvtxDomainMark(global_domain_, "postBeginJob");
544  }
545 }
546 
549  nvtxDomainMark(global_domain_, "postEndJob");
550  }
551 }
552 
555  nvtxDomainRangePush(stream_domain_[sid], "source");
556  }
557 }
558 
561  nvtxDomainRangePop(stream_domain_[sid]);
562  }
563 }
564 
567  nvtxDomainRangePush(global_domain_, "source lumi");
568  }
569 }
570 
573  nvtxDomainRangePop(global_domain_);
574  }
575 }
576 
579  nvtxDomainRangePush(global_domain_, "source run");
580  }
581 }
582 
585  nvtxDomainRangePop(global_domain_);
586  }
587 }
588 
591  nvtxDomainRangePush(global_domain_, ("open file "s + lfn).c_str());
592  }
593 }
594 
597  nvtxDomainRangePop(global_domain_);
598  }
599 }
600 
603  nvtxDomainRangePush(global_domain_, ("close file "s + lfn).c_str());
604  }
605 }
606 
609  nvtxDomainRangePop(global_domain_);
610  }
611 }
612 
614  auto sid = sc.streamID();
616  auto mid = mcc.moduleDescription()->id();
617  auto const& label = mcc.moduleDescription()->moduleLabel();
618  auto const& msg = label + " begin stream";
619  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
620  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
621  }
622 }
623 
625  auto sid = sc.streamID();
627  auto mid = mcc.moduleDescription()->id();
628  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
629  stream_modules_[sid][mid] = nvtxInvalidRangeId;
630  }
631 }
632 
634  auto sid = sc.streamID();
636  auto mid = mcc.moduleDescription()->id();
637  auto const& label = mcc.moduleDescription()->moduleLabel();
638  auto const& msg = label + " end stream";
639  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
640  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
641  }
642 }
643 
645  auto sid = sc.streamID();
647  auto mid = mcc.moduleDescription()->id();
648  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
649  stream_modules_[sid][mid] = nvtxInvalidRangeId;
650  }
651 }
652 
655  nvtxDomainRangePush(global_domain_, "global begin run");
656  }
657 }
658 
661  nvtxDomainRangePop(global_domain_);
662  }
663 }
664 
667  nvtxDomainRangePush(global_domain_, "global end run");
668  }
669 }
670 
673  nvtxDomainRangePop(global_domain_);
674  }
675 }
676 
678  auto sid = sc.streamID();
680  nvtxDomainRangePush(stream_domain_[sid], "stream begin run");
681  }
682 }
683 
685  auto sid = sc.streamID();
687  nvtxDomainRangePop(stream_domain_[sid]);
688  }
689 }
690 
692  auto sid = sc.streamID();
694  nvtxDomainRangePush(stream_domain_[sid], "stream end run");
695  }
696 }
697 
699  auto sid = sc.streamID();
701  nvtxDomainRangePop(stream_domain_[sid]);
702  }
703 }
704 
707  nvtxDomainRangePush(global_domain_, "global begin lumi");
708  }
709 }
710 
713  nvtxDomainRangePop(global_domain_);
714  }
715 }
716 
719  nvtxDomainRangePush(global_domain_, "global end lumi");
720  }
721 }
722 
725  nvtxDomainRangePop(global_domain_);
726  }
727 }
728 
730  auto sid = sc.streamID();
732  nvtxDomainRangePush(stream_domain_[sid], "stream begin lumi");
733  }
734 }
735 
737  auto sid = sc.streamID();
739  nvtxDomainRangePop(stream_domain_[sid]);
740  }
741 }
742 
744  auto sid = sc.streamID();
745  nvtxDomainRangePush(stream_domain_[sid], "stream end lumi");
746 }
747 
749  auto sid = sc.streamID();
751  nvtxDomainRangePop(stream_domain_[sid]);
752  }
753 }
754 
756  auto sid = sc.streamID();
758  event_[sid] = nvtxDomainRangeStartColor(stream_domain_[sid], "event", nvtxDarkGreen);
759  }
760 }
761 
763  auto sid = sc.streamID();
765  nvtxDomainRangeEnd(stream_domain_[sid], event_[sid]);
766  event_[sid] = nvtxInvalidRangeId;
767  } else {
768  streamFirstEventDone_[sid] = true;
769  auto identity = [](bool x) { return x; };
770  if (std::all_of(streamFirstEventDone_.begin(), streamFirstEventDone_.end(), identity)) {
771  bool expected = false;
772  if (globalFirstEventDone_.compare_exchange_strong(expected, true))
773  cudaProfilerStart();
774  }
775  }
776 }
777 
779  auto sid = sc.streamID();
781  nvtxDomainMark(global_domain_, ("before path "s + pc.pathName()).c_str());
782  }
783 }
784 
786  edm::PathContext const& pc,
787  edm::HLTPathStatus const& hlts) {
788  auto sid = sc.streamID();
790  nvtxDomainMark(global_domain_, ("after path "s + pc.pathName()).c_str());
791  }
792 }
793 
795  auto sid = sc.streamID();
797  auto mid = mcc.moduleDescription()->id();
798  auto const& label = mcc.moduleDescription()->moduleLabel();
799  auto const& msg = label + " prefetching";
800  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
801  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColorLight(label));
802  }
803 }
804 
806  auto sid = sc.streamID();
808  auto mid = mcc.moduleDescription()->id();
809  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
810  stream_modules_[sid][mid] = nvtxInvalidRangeId;
811  }
812 }
813 
815  if (not skipFirstEvent_) {
816  auto mid = desc.id();
817  global_modules_.grow_to_at_least(mid + 1);
818  auto const& label = desc.moduleLabel();
819  auto const& msg = label + " construction";
820  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
821  }
822 }
823 
825  if (not skipFirstEvent_) {
826  auto mid = desc.id();
827  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
828  global_modules_[mid] = nvtxInvalidRangeId;
829  }
830 }
831 
833  if (not skipFirstEvent_) {
834  auto mid = desc.id();
835  global_modules_.grow_to_at_least(mid + 1);
836  auto const& label = desc.moduleLabel();
837  auto const& msg = label + " destruction";
838  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
839  }
840 }
841 
843  if (not skipFirstEvent_) {
844  auto mid = desc.id();
845  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
846  global_modules_[mid] = nvtxInvalidRangeId;
847  }
848 }
849 
851  if (not skipFirstEvent_) {
852  auto mid = desc.id();
853  auto const& label = desc.moduleLabel();
854  auto const& msg = label + " begin job";
855  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
856  }
857 }
858 
860  if (not skipFirstEvent_) {
861  auto mid = desc.id();
862  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
863  global_modules_[mid] = nvtxInvalidRangeId;
864  }
865 }
866 
869  auto mid = desc.id();
870  auto const& label = desc.moduleLabel();
871  auto const& msg = label + " end job";
872  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
873  }
874 }
875 
878  auto mid = desc.id();
879  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
880  global_modules_[mid] = nvtxInvalidRangeId;
881  }
882 }
883 
885  auto sid = sc.streamID();
887  auto mid = mcc.moduleDescription()->id();
888  auto const& label = mcc.moduleDescription()->moduleLabel();
889  auto const& msg = label + " acquire";
890  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
891  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
892  }
893 }
894 
896  auto sid = sc.streamID();
898  auto mid = mcc.moduleDescription()->id();
899  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
900  stream_modules_[sid][mid] = nvtxInvalidRangeId;
901  }
902 }
903 
905  auto sid = sc.streamID();
907  auto mid = mcc.moduleDescription()->id();
908  auto const& label = mcc.moduleDescription()->moduleLabel();
909  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
910  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], label.c_str(), labelColor(label));
911  }
912 }
913 
915  auto sid = sc.streamID();
917  auto mid = mcc.moduleDescription()->id();
918  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
919  stream_modules_[sid][mid] = nvtxInvalidRangeId;
920  }
921 }
922 
924  /* FIXME
925  auto sid = sc.streamID();
926  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
927  auto mid = mcc.moduleDescription()->id();
928  auto const & label = mcc.moduleDescription()->moduleLabel();
929  auto const & msg = label + " delayed get";
930  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
931  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], label.c_str(), labelColorLight(label));
932  }
933  */
934 }
935 
937  /* FIXME
938  auto sid = sc.streamID();
939  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
940  auto mid = mcc.moduleDescription()->id();
941  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
942  stream_modules_[sid][mid] = nvtxInvalidRangeId;
943  }
944  */
945 }
946 
948  /* FIXME
949  auto sid = sc.streamID();
950  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
951  auto mid = mcc.moduleDescription()->id();
952  auto const & label = mcc.moduleDescription()->moduleLabel();
953  auto const & msg = label + " read from source";
954  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
955  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColorLight(label));
956  }
957  */
958 }
959 
961  /* FIXME
962  auto sid = sc.streamID();
963  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
964  auto mid = mcc.moduleDescription()->id();
965  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
966  stream_modules_[sid][mid] = nvtxInvalidRangeId;
967  }
968  */
969 }
970 
972  auto sid = sc.streamID();
974  auto mid = mcc.moduleDescription()->id();
975  auto const& label = mcc.moduleDescription()->moduleLabel();
976  auto const& msg = label + " stream begin run";
977  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
978  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
979  }
980 }
981 
983  auto sid = sc.streamID();
985  auto mid = mcc.moduleDescription()->id();
986  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
987  stream_modules_[sid][mid] = nvtxInvalidRangeId;
988  }
989 }
990 
992  auto sid = sc.streamID();
994  auto mid = mcc.moduleDescription()->id();
995  auto const& label = mcc.moduleDescription()->moduleLabel();
996  auto const& msg = label + " stream end run";
997  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
998  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
999  }
1000 }
1001 
1003  auto sid = sc.streamID();
1004  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1005  auto mid = mcc.moduleDescription()->id();
1006  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
1007  stream_modules_[sid][mid] = nvtxInvalidRangeId;
1008  }
1009 }
1010 
1012  auto sid = sc.streamID();
1013  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1014  auto mid = mcc.moduleDescription()->id();
1015  auto const& label = mcc.moduleDescription()->moduleLabel();
1016  auto const& msg = label + " stream begin lumi";
1017  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
1018  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
1019  }
1020 }
1021 
1023  auto sid = sc.streamID();
1024  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1025  auto mid = mcc.moduleDescription()->id();
1026  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
1027  stream_modules_[sid][mid] = nvtxInvalidRangeId;
1028  }
1029 }
1030 
1032  auto sid = sc.streamID();
1033  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1034  auto mid = mcc.moduleDescription()->id();
1035  auto const& label = mcc.moduleDescription()->moduleLabel();
1036  auto const& msg = label + " stream end lumi";
1037  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
1038  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
1039  }
1040 }
1041 
1043  auto sid = sc.streamID();
1044  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1045  auto mid = mcc.moduleDescription()->id();
1046  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
1047  stream_modules_[sid][mid] = nvtxInvalidRangeId;
1048  }
1049 }
1050 
1053  auto mid = mcc.moduleDescription()->id();
1054  auto const& label = mcc.moduleDescription()->moduleLabel();
1055  auto const& msg = label + " global begin run";
1056  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1057  }
1058 }
1059 
1062  auto mid = mcc.moduleDescription()->id();
1063  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1064  global_modules_[mid] = nvtxInvalidRangeId;
1065  }
1066 }
1067 
1070  auto mid = mcc.moduleDescription()->id();
1071  auto const& label = mcc.moduleDescription()->moduleLabel();
1072  auto const& msg = label + " global end run";
1073  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1074  }
1075 }
1076 
1079  auto mid = mcc.moduleDescription()->id();
1080  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1081  global_modules_[mid] = nvtxInvalidRangeId;
1082  }
1083 }
1084 
1087  auto mid = mcc.moduleDescription()->id();
1088  auto const& label = mcc.moduleDescription()->moduleLabel();
1089  auto const& msg = label + " global begin lumi";
1090  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1091  }
1092 }
1093 
1096  auto mid = mcc.moduleDescription()->id();
1097  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1098  global_modules_[mid] = nvtxInvalidRangeId;
1099  }
1100 }
1101 
1104  auto mid = mcc.moduleDescription()->id();
1105  auto const& label = mcc.moduleDescription()->moduleLabel();
1106  auto const& msg = label + " global end lumi";
1107  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1108  }
1109 }
1110 
1113  auto mid = mcc.moduleDescription()->id();
1114  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1115  global_modules_[mid] = nvtxInvalidRangeId;
1116  }
1117 }
1118 
1121 
1122  if (not skipFirstEvent_) {
1123  auto mid = desc.id();
1124  global_modules_.grow_to_at_least(mid + 1);
1125  auto const& label = desc.moduleLabel();
1126  auto const& msg = label + " construction";
1127  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1128  }
1129 }
1130 
1132  if (not skipFirstEvent_) {
1133  auto mid = desc.id();
1134  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1135  global_modules_[mid] = nvtxInvalidRangeId;
1136  }
1137 }
1138 
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:8
void postModuleGlobalEndRun(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void watchPreModuleEventDelayedGet(PreModuleEventDelayedGet::slot_type const &iSlot)
StreamID const & streamID() const
Definition: StreamContext.h:55
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:286
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