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 
44 
45 using namespace std::string_literals;
46 
47 namespace {
48  int nvtxDomainRangePush(nvtxDomainHandle_t domain, const char* message) {
49  nvtxEventAttributes_t eventAttrib = {};
50  eventAttrib.version = NVTX_VERSION;
51  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
52  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
53  eventAttrib.message.ascii = message;
54  return nvtxDomainRangePushEx(domain, &eventAttrib);
55  }
56 
57  __attribute__((unused)) int nvtxDomainRangePushColor(nvtxDomainHandle_t domain, const char* message, uint32_t color) {
58  nvtxEventAttributes_t eventAttrib = {};
59  eventAttrib.version = NVTX_VERSION;
60  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
61  eventAttrib.colorType = NVTX_COLOR_ARGB;
62  eventAttrib.color = color;
63  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
64  eventAttrib.message.ascii = message;
65  return nvtxDomainRangePushEx(domain, &eventAttrib);
66  }
67 
68  __attribute__((unused)) nvtxRangeId_t nvtxDomainRangeStart(nvtxDomainHandle_t domain, const char* message) {
69  nvtxEventAttributes_t eventAttrib = {};
70  eventAttrib.version = NVTX_VERSION;
71  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
72  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
73  eventAttrib.message.ascii = message;
74  return nvtxDomainRangeStartEx(domain, &eventAttrib);
75  }
76 
77  nvtxRangeId_t nvtxDomainRangeStartColor(nvtxDomainHandle_t domain, const char* message, uint32_t color) {
78  nvtxEventAttributes_t eventAttrib = {};
79  eventAttrib.version = NVTX_VERSION;
80  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
81  eventAttrib.colorType = NVTX_COLOR_ARGB;
82  eventAttrib.color = color;
83  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
84  eventAttrib.message.ascii = message;
85  return nvtxDomainRangeStartEx(domain, &eventAttrib);
86  }
87 
88  void nvtxDomainMark(nvtxDomainHandle_t domain, const char* message) {
89  nvtxEventAttributes_t eventAttrib = {};
90  eventAttrib.version = NVTX_VERSION;
91  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
92  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
93  eventAttrib.message.ascii = message;
94  nvtxDomainMarkEx(domain, &eventAttrib);
95  }
96 
97  __attribute__((unused)) void nvtxDomainMarkColor(nvtxDomainHandle_t domain, const char* message, uint32_t color) {
98  nvtxEventAttributes_t eventAttrib = {};
99  eventAttrib.version = NVTX_VERSION;
100  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
101  eventAttrib.colorType = NVTX_COLOR_ARGB;
102  eventAttrib.color = color;
103  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
104  eventAttrib.message.ascii = message;
105  nvtxDomainMarkEx(domain, &eventAttrib);
106  }
107 
108  enum {
109  nvtxBlack = 0x00000000,
110  nvtxRed = 0x00ff0000,
111  nvtxDarkGreen = 0x00009900,
112  nvtxGreen = 0x0000ff00,
113  nvtxLightGreen = 0x00ccffcc,
114  nvtxBlue = 0x000000ff,
115  nvtxAmber = 0x00ffbf00,
116  nvtxLightAmber = 0x00fff2cc,
117  nvtxWhite = 0x00ffffff
118  };
119 
120  constexpr nvtxRangeId_t nvtxInvalidRangeId = 0xfffffffffffffffful;
121 } // namespace
122 
124 public:
127 
128  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
129 
130  void preallocate(edm::service::SystemBounds const&);
131 
132  // these signal pair are NOT guaranteed to be called by the same thread
133  void preBeginJob(edm::PathsAndConsumesOfModulesBase const&, edm::ProcessContext const&);
134  void postBeginJob();
135 
136  // there is no preEndJob() signal
137  void postEndJob();
138 
139  // these signal pair are NOT guaranteed to be called by the same thread
140  void preGlobalBeginRun(edm::GlobalContext const&);
141  void postGlobalBeginRun(edm::GlobalContext const&);
142 
143  // these signal pair are NOT guaranteed to be called by the same thread
144  void preGlobalEndRun(edm::GlobalContext const&);
145  void postGlobalEndRun(edm::GlobalContext const&);
146 
147  // these signal pair are NOT guaranteed to be called by the same thread
148  void preStreamBeginRun(edm::StreamContext const&);
149  void postStreamBeginRun(edm::StreamContext const&);
150 
151  // these signal pair are NOT guaranteed to be called by the same thread
152  void preStreamEndRun(edm::StreamContext const&);
153  void postStreamEndRun(edm::StreamContext const&);
154 
155  // these signal pair are NOT guaranteed to be called by the same thread
156  void preGlobalBeginLumi(edm::GlobalContext const&);
157  void postGlobalBeginLumi(edm::GlobalContext const&);
158 
159  // these signal pair are NOT guaranteed to be called by the same thread
160  void preGlobalEndLumi(edm::GlobalContext const&);
161  void postGlobalEndLumi(edm::GlobalContext const&);
162 
163  // these signal pair are NOT guaranteed to be called by the same thread
164  void preStreamBeginLumi(edm::StreamContext const&);
165  void postStreamBeginLumi(edm::StreamContext const&);
166 
167  // these signal pair are NOT guaranteed to be called by the same thread
168  void preStreamEndLumi(edm::StreamContext const&);
169  void postStreamEndLumi(edm::StreamContext const&);
170 
171  // these signal pair are NOT guaranteed to be called by the same thread
172  void preEvent(edm::StreamContext const&);
173  void postEvent(edm::StreamContext const&);
174 
175  // these signal pair are NOT guaranteed to be called by the same thread
176  void prePathEvent(edm::StreamContext const&, edm::PathContext const&);
177  void postPathEvent(edm::StreamContext const&, edm::PathContext const&, edm::HLTPathStatus const&);
178 
179  // these signal pair are NOT guaranteed to be called by the same thread
180  void preModuleEventPrefetching(edm::StreamContext const&, edm::ModuleCallingContext const&);
181  void postModuleEventPrefetching(edm::StreamContext const&, edm::ModuleCallingContext const&);
182 
183  // these signal pair are guaranteed to be called by the same thread
184  void preOpenFile(std::string const&);
185  void postOpenFile(std::string const&);
186 
187  // these signal pair are guaranteed to be called by the same thread
188  void preCloseFile(std::string const&);
189  void postCloseFile(std::string const&);
190 
191  // these signal pair are guaranteed to be called by the same thread
192  void preSourceConstruction(edm::ModuleDescription const&);
193  void postSourceConstruction(edm::ModuleDescription const&);
194 
195  // these signal pair are guaranteed to be called by the same thread
196  void preSourceRun(edm::RunIndex);
197  void postSourceRun(edm::RunIndex);
198 
199  // these signal pair are guaranteed to be called by the same thread
200  void preSourceLumi(edm::LuminosityBlockIndex);
201  void postSourceLumi(edm::LuminosityBlockIndex);
202 
203  // these signal pair are guaranteed to be called by the same thread
204  void preSourceEvent(edm::StreamID);
205  void postSourceEvent(edm::StreamID);
206 
207  // these signal pair are guaranteed to be called by the same thread
208  void preModuleConstruction(edm::ModuleDescription const&);
209  void postModuleConstruction(edm::ModuleDescription const&);
210 
211  // these signal pair are guaranteed to be called by the same thread
212  void preModuleDestruction(edm::ModuleDescription const&);
213  void postModuleDestruction(edm::ModuleDescription const&);
214 
215  // these signal pair are guaranteed to be called by the same thread
216  void preModuleBeginJob(edm::ModuleDescription const&);
217  void postModuleBeginJob(edm::ModuleDescription const&);
218 
219  // these signal pair are guaranteed to be called by the same thread
220  void preModuleEndJob(edm::ModuleDescription const&);
221  void postModuleEndJob(edm::ModuleDescription const&);
222 
223  // these signal pair are guaranteed to be called by the same thread
224  void preModuleBeginStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
225  void postModuleBeginStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
226 
227  // these signal pair are guaranteed to be called by the same thread
228  void preModuleEndStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
229  void postModuleEndStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
230 
231  // these signal pair are guaranteed to be called by the same thread
232  void preModuleGlobalBeginRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
233  void postModuleGlobalBeginRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
234 
235  // these signal pair are guaranteed to be called by the same thread
236  void preModuleGlobalEndRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
237  void postModuleGlobalEndRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
238 
239  // these signal pair are guaranteed to be called by the same thread
240  void preModuleGlobalBeginLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
241  void postModuleGlobalBeginLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
242 
243  // these signal pair are guaranteed to be called by the same thread
244  void preModuleGlobalEndLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
245  void postModuleGlobalEndLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
246 
247  // these signal pair are guaranteed to be called by the same thread
248  void preModuleStreamBeginRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
249  void postModuleStreamBeginRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
250 
251  // these signal pair are guaranteed to be called by the same thread
252  void preModuleStreamEndRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
253  void postModuleStreamEndRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
254 
255  // these signal pair are guaranteed to be called by the same thread
256  void preModuleStreamBeginLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
257  void postModuleStreamBeginLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
258 
259  // these signal pair are guaranteed to be called by the same thread
260  void preModuleStreamEndLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
261  void postModuleStreamEndLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
262 
263  // these signal pair are guaranteed to be called by the same thread
264  void preModuleEventAcquire(edm::StreamContext const&, edm::ModuleCallingContext const&);
265  void postModuleEventAcquire(edm::StreamContext const&, edm::ModuleCallingContext const&);
266 
267  // these signal pair are guaranteed to be called by the same thread
268  void preModuleEvent(edm::StreamContext const&, edm::ModuleCallingContext const&);
269  void postModuleEvent(edm::StreamContext const&, edm::ModuleCallingContext const&);
270 
271  // these signal pair are guaranteed to be called by the same thread
272  void preModuleEventDelayedGet(edm::StreamContext const&, edm::ModuleCallingContext const&);
273  void postModuleEventDelayedGet(edm::StreamContext const&, edm::ModuleCallingContext const&);
274 
275  // these signal pair are guaranteed to be called by the same thread
276  void preEventReadFromSource(edm::StreamContext const&, edm::ModuleCallingContext const&);
277  void postEventReadFromSource(edm::StreamContext const&, edm::ModuleCallingContext const&);
278 
279 private:
280  bool highlight(std::string const& label) const {
281  return (std::binary_search(highlightModules_.begin(), highlightModules_.end(), label));
282  }
283 
284  uint32_t labelColor(std::string const& label) const { return highlight(label) ? nvtxAmber : nvtxGreen; }
285 
286  uint32_t labelColorLight(std::string const& label) const {
287  return highlight(label) ? nvtxLightAmber : nvtxLightGreen;
288  }
289 
290  std::vector<std::string> highlightModules_;
292  const bool skipFirstEvent_;
293 
294  std::atomic<bool> globalFirstEventDone_ = false;
295  std::vector<std::atomic<bool>> streamFirstEventDone_;
296  std::vector<nvtxRangeId_t> event_; // per-stream event ranges
297  std::vector<std::vector<nvtxRangeId_t>> stream_modules_; // per-stream, per-module ranges
298  // use a tbb::concurrent_vector rather than an std::vector because its final size is not known
299  tbb::concurrent_vector<nvtxRangeId_t> global_modules_; // global per-module events
300 
301  nvtxDomainHandle_t global_domain_; // NVTX domain for global EDM transitions
302  std::vector<nvtxDomainHandle_t> stream_domain_; // NVTX domains for per-EDM-stream transitions
303 };
304 
306  : highlightModules_(config.getUntrackedParameter<std::vector<std::string>>("highlightModules")),
307  showModulePrefetching_(config.getUntrackedParameter<bool>("showModulePrefetching")),
308  skipFirstEvent_(config.getUntrackedParameter<bool>("skipFirstEvent")) {
309  // make sure that CUDA is initialised, and that the CUDAService destructor is called after this service's destructor
310  edm::Service<CUDAService> cudaService;
311 
313 
314  // create the NVTX domain for global EDM transitions
315  global_domain_ = nvtxDomainCreate("EDM Global");
316 
317  // enables profile collection; if profiling is already enabled it has no effect
318  if (not skipFirstEvent_) {
319  cudaProfilerStart();
320  }
321 
323 
324  // these signal pair are NOT guaranteed to be called by the same thread
327 
328  // there is no preEndJob() signal
330 
331  // these signal pair are NOT guaranteed to be called by the same thread
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 
372  // these signal pair are NOT guaranteed to be called by the same thread
375  }
376 
377  // these signal pair are guaranteed to be called by the same thread
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 
475  for (unsigned int sid = 0; sid < stream_domain_.size(); ++sid) {
476  nvtxDomainDestroy(stream_domain_[sid]);
477  }
478  nvtxDomainDestroy(global_domain_);
479  cudaProfilerStop();
480 }
481 
484  desc.addUntracked<std::vector<std::string>>("highlightModules", {})->setComment("");
485  desc.addUntracked<bool>("showModulePrefetching", false)
486  ->setComment("Show the stack of dependencies that requested to run a module.");
487  desc.addUntracked<bool>("skipFirstEvent", false)
488  ->setComment(
489  "Start profiling after the first event has completed.\nWith multiple streams, ignore transitions belonging "
490  "to events started in parallel to the first event.\nRequires running nvprof with the '--profile-from-start "
491  "off' option.");
492  descriptions.add("NVProfilerService", desc);
493  descriptions.setComment(R"(This Service provides CMSSW-aware annotations to nvprof/nvvm.
494 
495 Notes on nvprof options:
496  - the option '--profile-from-start off' should be used if skipFirstEvent is True.
497  - the option '--cpu-profiling on' currently results in cmsRun being stuck at the beginning of the job.
498  - the option '--cpu-thread-tracing on' is not compatible with jemalloc, and should only be used with cmsRunGlibC.)");
499 }
500 
502  std::stringstream out;
503  out << "preallocate: " << bounds.maxNumberOfConcurrentRuns() << " concurrent runs, "
504  << bounds.maxNumberOfConcurrentLuminosityBlocks() << " luminosity sections, " << bounds.maxNumberOfStreams()
505  << " streams\nrunning on" << bounds.maxNumberOfThreads() << " threads";
506  nvtxDomainMark(global_domain_, out.str().c_str());
507 
508  auto concurrentStreams = bounds.maxNumberOfStreams();
509  // create the NVTX domains for per-EDM-stream transitions
510  stream_domain_.resize(concurrentStreams);
511  for (unsigned int sid = 0; sid < concurrentStreams; ++sid) {
512  stream_domain_[sid] = nvtxDomainCreate(fmt::sprintf("EDM Stream %d", sid).c_str());
513  }
514 
515  event_.resize(concurrentStreams);
516  stream_modules_.resize(concurrentStreams);
517  if (skipFirstEvent_) {
518  globalFirstEventDone_ = false;
519  std::vector<std::atomic<bool>> tmp(concurrentStreams);
520  for (auto& element : tmp)
521  std::atomic_init(&element, false);
523  }
524 }
525 
527  edm::ProcessContext const& pc) {
528  nvtxDomainMark(global_domain_, "preBeginJob");
529 
530  // FIXME this probably works only in the absence of subprocesses
531  // size() + 1 because pathsAndConsumes.allModules() does not include the source
532  unsigned int modules = pathsAndConsumes.allModules().size() + 1;
533  global_modules_.resize(modules, nvtxInvalidRangeId);
534  for (unsigned int sid = 0; sid < stream_modules_.size(); ++sid) {
535  stream_modules_[sid].resize(modules, nvtxInvalidRangeId);
536  }
537 }
538 
541  nvtxDomainMark(global_domain_, "postBeginJob");
542  }
543 }
544 
547  nvtxDomainMark(global_domain_, "postEndJob");
548  }
549 }
550 
553  nvtxDomainRangePush(stream_domain_[sid], "source");
554  }
555 }
556 
559  nvtxDomainRangePop(stream_domain_[sid]);
560  }
561 }
562 
565  nvtxDomainRangePush(global_domain_, "source lumi");
566  }
567 }
568 
571  nvtxDomainRangePop(global_domain_);
572  }
573 }
574 
577  nvtxDomainRangePush(global_domain_, "source run");
578  }
579 }
580 
583  nvtxDomainRangePop(global_domain_);
584  }
585 }
586 
589  nvtxDomainRangePush(global_domain_, ("open file "s + lfn).c_str());
590  }
591 }
592 
595  nvtxDomainRangePop(global_domain_);
596  }
597 }
598 
601  nvtxDomainRangePush(global_domain_, ("close file "s + lfn).c_str());
602  }
603 }
604 
607  nvtxDomainRangePop(global_domain_);
608  }
609 }
610 
612  auto sid = sc.streamID();
614  auto mid = mcc.moduleDescription()->id();
615  auto const& label = mcc.moduleDescription()->moduleLabel();
616  auto const& msg = label + " begin stream";
617  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
618  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
619  }
620 }
621 
623  auto sid = sc.streamID();
625  auto mid = mcc.moduleDescription()->id();
626  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
627  stream_modules_[sid][mid] = nvtxInvalidRangeId;
628  }
629 }
630 
632  auto sid = sc.streamID();
634  auto mid = mcc.moduleDescription()->id();
635  auto const& label = mcc.moduleDescription()->moduleLabel();
636  auto const& msg = label + " end stream";
637  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
638  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
639  }
640 }
641 
643  auto sid = sc.streamID();
645  auto mid = mcc.moduleDescription()->id();
646  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
647  stream_modules_[sid][mid] = nvtxInvalidRangeId;
648  }
649 }
650 
653  nvtxDomainRangePush(global_domain_, "global begin run");
654  }
655 }
656 
659  nvtxDomainRangePop(global_domain_);
660  }
661 }
662 
665  nvtxDomainRangePush(global_domain_, "global end run");
666  }
667 }
668 
671  nvtxDomainRangePop(global_domain_);
672  }
673 }
674 
676  auto sid = sc.streamID();
678  nvtxDomainRangePush(stream_domain_[sid], "stream begin run");
679  }
680 }
681 
683  auto sid = sc.streamID();
685  nvtxDomainRangePop(stream_domain_[sid]);
686  }
687 }
688 
690  auto sid = sc.streamID();
692  nvtxDomainRangePush(stream_domain_[sid], "stream end run");
693  }
694 }
695 
697  auto sid = sc.streamID();
699  nvtxDomainRangePop(stream_domain_[sid]);
700  }
701 }
702 
705  nvtxDomainRangePush(global_domain_, "global begin lumi");
706  }
707 }
708 
711  nvtxDomainRangePop(global_domain_);
712  }
713 }
714 
717  nvtxDomainRangePush(global_domain_, "global end lumi");
718  }
719 }
720 
723  nvtxDomainRangePop(global_domain_);
724  }
725 }
726 
728  auto sid = sc.streamID();
730  nvtxDomainRangePush(stream_domain_[sid], "stream begin lumi");
731  }
732 }
733 
735  auto sid = sc.streamID();
737  nvtxDomainRangePop(stream_domain_[sid]);
738  }
739 }
740 
742  auto sid = sc.streamID();
743  nvtxDomainRangePush(stream_domain_[sid], "stream end lumi");
744 }
745 
747  auto sid = sc.streamID();
749  nvtxDomainRangePop(stream_domain_[sid]);
750  }
751 }
752 
754  auto sid = sc.streamID();
756  event_[sid] = nvtxDomainRangeStartColor(stream_domain_[sid], "event", nvtxDarkGreen);
757  }
758 }
759 
761  auto sid = sc.streamID();
763  nvtxDomainRangeEnd(stream_domain_[sid], event_[sid]);
764  event_[sid] = nvtxInvalidRangeId;
765  } else {
766  streamFirstEventDone_[sid] = true;
767  auto identity = [](bool x) { return x; };
768  if (std::all_of(streamFirstEventDone_.begin(), streamFirstEventDone_.end(), identity)) {
769  bool expected = false;
770  if (globalFirstEventDone_.compare_exchange_strong(expected, true))
771  cudaProfilerStart();
772  }
773  }
774 }
775 
777  auto sid = sc.streamID();
779  nvtxDomainMark(global_domain_, ("before path "s + pc.pathName()).c_str());
780  }
781 }
782 
784  edm::PathContext const& pc,
785  edm::HLTPathStatus const& hlts) {
786  auto sid = sc.streamID();
788  nvtxDomainMark(global_domain_, ("after path "s + pc.pathName()).c_str());
789  }
790 }
791 
793  auto sid = sc.streamID();
795  auto mid = mcc.moduleDescription()->id();
796  auto const& label = mcc.moduleDescription()->moduleLabel();
797  auto const& msg = label + " prefetching";
798  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
799  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColorLight(label));
800  }
801 }
802 
804  auto sid = sc.streamID();
806  auto mid = mcc.moduleDescription()->id();
807  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
808  stream_modules_[sid][mid] = nvtxInvalidRangeId;
809  }
810 }
811 
813  if (not skipFirstEvent_) {
814  auto mid = desc.id();
815  global_modules_.grow_to_at_least(mid + 1);
816  auto const& label = desc.moduleLabel();
817  auto const& msg = label + " construction";
818  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
819  }
820 }
821 
823  if (not skipFirstEvent_) {
824  auto mid = desc.id();
825  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
826  global_modules_[mid] = nvtxInvalidRangeId;
827  }
828 }
829 
831  if (not skipFirstEvent_) {
832  auto mid = desc.id();
833  global_modules_.grow_to_at_least(mid + 1);
834  auto const& label = desc.moduleLabel();
835  auto const& msg = label + " destruction";
836  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
837  }
838 }
839 
841  if (not skipFirstEvent_) {
842  auto mid = desc.id();
843  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
844  global_modules_[mid] = nvtxInvalidRangeId;
845  }
846 }
847 
849  if (not skipFirstEvent_) {
850  auto mid = desc.id();
851  auto const& label = desc.moduleLabel();
852  auto const& msg = label + " begin job";
853  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
854  }
855 }
856 
858  if (not skipFirstEvent_) {
859  auto mid = desc.id();
860  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
861  global_modules_[mid] = nvtxInvalidRangeId;
862  }
863 }
864 
867  auto mid = desc.id();
868  auto const& label = desc.moduleLabel();
869  auto const& msg = label + " end job";
870  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
871  }
872 }
873 
876  auto mid = desc.id();
877  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
878  global_modules_[mid] = nvtxInvalidRangeId;
879  }
880 }
881 
883  auto sid = sc.streamID();
885  auto mid = mcc.moduleDescription()->id();
886  auto const& label = mcc.moduleDescription()->moduleLabel();
887  auto const& msg = label + " acquire";
888  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
889  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
890  }
891 }
892 
894  auto sid = sc.streamID();
896  auto mid = mcc.moduleDescription()->id();
897  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
898  stream_modules_[sid][mid] = nvtxInvalidRangeId;
899  }
900 }
901 
903  auto sid = sc.streamID();
905  auto mid = mcc.moduleDescription()->id();
906  auto const& label = mcc.moduleDescription()->moduleLabel();
907  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
908  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], label.c_str(), labelColor(label));
909  }
910 }
911 
913  auto sid = sc.streamID();
915  auto mid = mcc.moduleDescription()->id();
916  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
917  stream_modules_[sid][mid] = nvtxInvalidRangeId;
918  }
919 }
920 
922  /* FIXME
923  auto sid = sc.streamID();
924  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
925  auto mid = mcc.moduleDescription()->id();
926  auto const & label = mcc.moduleDescription()->moduleLabel();
927  auto const & msg = label + " delayed get";
928  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
929  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], label.c_str(), labelColorLight(label));
930  }
931  */
932 }
933 
935  /* FIXME
936  auto sid = sc.streamID();
937  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
938  auto mid = mcc.moduleDescription()->id();
939  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
940  stream_modules_[sid][mid] = nvtxInvalidRangeId;
941  }
942  */
943 }
944 
946  /* FIXME
947  auto sid = sc.streamID();
948  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
949  auto mid = mcc.moduleDescription()->id();
950  auto const & label = mcc.moduleDescription()->moduleLabel();
951  auto const & msg = label + " read from source";
952  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
953  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColorLight(label));
954  }
955  */
956 }
957 
959  /* FIXME
960  auto sid = sc.streamID();
961  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
962  auto mid = mcc.moduleDescription()->id();
963  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
964  stream_modules_[sid][mid] = nvtxInvalidRangeId;
965  }
966  */
967 }
968 
970  auto sid = sc.streamID();
972  auto mid = mcc.moduleDescription()->id();
973  auto const& label = mcc.moduleDescription()->moduleLabel();
974  auto const& msg = label + " stream begin run";
975  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
976  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
977  }
978 }
979 
981  auto sid = sc.streamID();
983  auto mid = mcc.moduleDescription()->id();
984  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
985  stream_modules_[sid][mid] = nvtxInvalidRangeId;
986  }
987 }
988 
990  auto sid = sc.streamID();
992  auto mid = mcc.moduleDescription()->id();
993  auto const& label = mcc.moduleDescription()->moduleLabel();
994  auto const& msg = label + " stream end run";
995  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
996  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
997  }
998 }
999 
1001  auto sid = sc.streamID();
1002  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1003  auto mid = mcc.moduleDescription()->id();
1004  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
1005  stream_modules_[sid][mid] = nvtxInvalidRangeId;
1006  }
1007 }
1008 
1010  auto sid = sc.streamID();
1011  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1012  auto mid = mcc.moduleDescription()->id();
1013  auto const& label = mcc.moduleDescription()->moduleLabel();
1014  auto const& msg = label + " stream begin lumi";
1015  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
1016  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
1017  }
1018 }
1019 
1021  auto sid = sc.streamID();
1022  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1023  auto mid = mcc.moduleDescription()->id();
1024  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
1025  stream_modules_[sid][mid] = nvtxInvalidRangeId;
1026  }
1027 }
1028 
1030  auto sid = sc.streamID();
1031  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1032  auto mid = mcc.moduleDescription()->id();
1033  auto const& label = mcc.moduleDescription()->moduleLabel();
1034  auto const& msg = label + " stream end lumi";
1035  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
1036  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
1037  }
1038 }
1039 
1041  auto sid = sc.streamID();
1042  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1043  auto mid = mcc.moduleDescription()->id();
1044  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
1045  stream_modules_[sid][mid] = nvtxInvalidRangeId;
1046  }
1047 }
1048 
1051  auto mid = mcc.moduleDescription()->id();
1052  auto const& label = mcc.moduleDescription()->moduleLabel();
1053  auto const& msg = label + " global begin run";
1054  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1055  }
1056 }
1057 
1060  auto mid = mcc.moduleDescription()->id();
1061  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1062  global_modules_[mid] = nvtxInvalidRangeId;
1063  }
1064 }
1065 
1068  auto mid = mcc.moduleDescription()->id();
1069  auto const& label = mcc.moduleDescription()->moduleLabel();
1070  auto const& msg = label + " global end run";
1071  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1072  }
1073 }
1074 
1077  auto mid = mcc.moduleDescription()->id();
1078  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1079  global_modules_[mid] = nvtxInvalidRangeId;
1080  }
1081 }
1082 
1085  auto mid = mcc.moduleDescription()->id();
1086  auto const& label = mcc.moduleDescription()->moduleLabel();
1087  auto const& msg = label + " global begin lumi";
1088  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1089  }
1090 }
1091 
1094  auto mid = mcc.moduleDescription()->id();
1095  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1096  global_modules_[mid] = nvtxInvalidRangeId;
1097  }
1098 }
1099 
1102  auto mid = mcc.moduleDescription()->id();
1103  auto const& label = mcc.moduleDescription()->moduleLabel();
1104  auto const& msg = label + " global end lumi";
1105  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1106  }
1107 }
1108 
1111  auto mid = mcc.moduleDescription()->id();
1112  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1113  global_modules_[mid] = nvtxInvalidRangeId;
1114  }
1115 }
1116 
1118  if (not skipFirstEvent_) {
1119  auto mid = desc.id();
1120  global_modules_.grow_to_at_least(mid + 1);
1121  auto const& label = desc.moduleLabel();
1122  auto const& msg = label + " construction";
1123  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1124  }
1125 }
1126 
1128  if (not skipFirstEvent_) {
1129  auto mid = desc.id();
1130  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1131  global_modules_[mid] = nvtxInvalidRangeId;
1132  }
1133 }
1134 
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)
std::vector< ModuleDescription const * > const & allModules() const
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 &)
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 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 &)
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)
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