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 <tbb/concurrent_vector.h>
13 #include <tbb/enumerable_thread_specific.h>
14 
15 #include <boost/format.hpp>
16 
17 #include <cuda_profiler_api.h>
18 #include <nvToolsExt.h>
19 
44 
45 using namespace std::string_literals;
46 
47 namespace {
48  int nvtxDomainRangePush(nvtxDomainHandle_t domain, const char* message) {
49  nvtxEventAttributes_t eventAttrib = { 0 };
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))
58  int nvtxDomainRangePushColor(nvtxDomainHandle_t domain, const char* message, uint32_t color) {
59  nvtxEventAttributes_t eventAttrib = { 0 };
60  eventAttrib.version = NVTX_VERSION;
61  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
62  eventAttrib.colorType = NVTX_COLOR_ARGB;
63  eventAttrib.color = color;
64  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
65  eventAttrib.message.ascii = message;
66  return nvtxDomainRangePushEx(domain, &eventAttrib);
67  }
68 
69  __attribute__((unused))
70  nvtxRangeId_t nvtxDomainRangeStart(nvtxDomainHandle_t domain, const char* message) {
71  nvtxEventAttributes_t eventAttrib = { 0 };
72  eventAttrib.version = NVTX_VERSION;
73  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
74  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
75  eventAttrib.message.ascii = message;
76  return nvtxDomainRangeStartEx(domain, &eventAttrib);
77  }
78 
79  nvtxRangeId_t nvtxDomainRangeStartColor(nvtxDomainHandle_t domain, const char* message, uint32_t color) {
80  nvtxEventAttributes_t eventAttrib = { 0 };
81  eventAttrib.version = NVTX_VERSION;
82  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
83  eventAttrib.colorType = NVTX_COLOR_ARGB;
84  eventAttrib.color = color;
85  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
86  eventAttrib.message.ascii = message;
87  return nvtxDomainRangeStartEx(domain, &eventAttrib);
88  }
89 
90  void nvtxDomainMark(nvtxDomainHandle_t domain, const char* message) {
91  nvtxEventAttributes_t eventAttrib = { 0 };
92  eventAttrib.version = NVTX_VERSION;
93  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
94  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
95  eventAttrib.message.ascii = message;
96  nvtxDomainMarkEx(domain, &eventAttrib);
97  }
98 
99  __attribute__((unused))
100  void nvtxDomainMarkColor(nvtxDomainHandle_t domain, const char* message, uint32_t color) {
101  nvtxEventAttributes_t eventAttrib = { 0 };
102  eventAttrib.version = NVTX_VERSION;
103  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
104  eventAttrib.colorType = NVTX_COLOR_ARGB;
105  eventAttrib.color = color;
106  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
107  eventAttrib.message.ascii = message;
108  nvtxDomainMarkEx(domain, &eventAttrib);
109  }
110 
111  enum {
112  nvtxBlack = 0x00000000,
113  nvtxRed = 0x00ff0000,
114  nvtxDarkGreen = 0x00009900,
115  nvtxGreen = 0x0000ff00,
116  nvtxLightGreen = 0x00ccffcc,
117  nvtxBlue = 0x000000ff,
118  nvtxAmber = 0x00ffbf00,
119  nvtxLightAmber = 0x00fff2cc,
120  nvtxWhite = 0x00ffffff
121  };
122 
123  constexpr nvtxRangeId_t nvtxInvalidRangeId = 0xfffffffffffffffful;
124 }
125 
127 public:
130 
131  static void fillDescriptions(edm::ConfigurationDescriptions & descriptions);
132 
133  void preallocate(edm::service::SystemBounds const&);
134 
135  // these signal pair are NOT guaranteed to be called by the same thread
136  void preBeginJob(edm::PathsAndConsumesOfModulesBase const&, edm::ProcessContext const&);
137  void postBeginJob();
138 
139  // there is no preEndJob() signal
140  void postEndJob();
141 
142  // these signal pair are NOT guaranteed to be called by the same thread
143  void preGlobalBeginRun(edm::GlobalContext const&);
144  void postGlobalBeginRun(edm::GlobalContext const&);
145 
146  // these signal pair are NOT guaranteed to be called by the same thread
147  void preGlobalEndRun(edm::GlobalContext const&);
148  void postGlobalEndRun(edm::GlobalContext const&);
149 
150  // these signal pair are NOT guaranteed to be called by the same thread
151  void preStreamBeginRun(edm::StreamContext const&);
152  void postStreamBeginRun(edm::StreamContext const&);
153 
154  // these signal pair are NOT guaranteed to be called by the same thread
155  void preStreamEndRun(edm::StreamContext const&);
156  void postStreamEndRun(edm::StreamContext const&);
157 
158  // these signal pair are NOT guaranteed to be called by the same thread
159  void preGlobalBeginLumi(edm::GlobalContext const&);
160  void postGlobalBeginLumi(edm::GlobalContext const&);
161 
162  // these signal pair are NOT guaranteed to be called by the same thread
163  void preGlobalEndLumi(edm::GlobalContext const&);
164  void postGlobalEndLumi(edm::GlobalContext const&);
165 
166  // these signal pair are NOT guaranteed to be called by the same thread
167  void preStreamBeginLumi(edm::StreamContext const&);
168  void postStreamBeginLumi(edm::StreamContext const&);
169 
170  // these signal pair are NOT guaranteed to be called by the same thread
171  void preStreamEndLumi(edm::StreamContext const&);
172  void postStreamEndLumi(edm::StreamContext const&);
173 
174  // these signal pair are NOT guaranteed to be called by the same thread
175  void preEvent(edm::StreamContext const&);
176  void postEvent(edm::StreamContext const&);
177 
178  // these signal pair are NOT guaranteed to be called by the same thread
179  void prePathEvent(edm::StreamContext const&, edm::PathContext const&);
180  void postPathEvent(edm::StreamContext const&, edm::PathContext const&, edm::HLTPathStatus const&);
181 
182  // these signal pair are NOT guaranteed to be called by the same thread
183  void preModuleEventPrefetching(edm::StreamContext const&, edm::ModuleCallingContext const&);
184  void postModuleEventPrefetching(edm::StreamContext const&, edm::ModuleCallingContext const&);
185 
186  // these signal pair are guaranteed to be called by the same thread
187  void preOpenFile(std::string const&, bool);
188  void postOpenFile(std::string const&, bool);
189 
190  // these signal pair are guaranteed to be called by the same thread
191  void preCloseFile(std::string const&, bool);
192  void postCloseFile(std::string const&, bool);
193 
194  // these signal pair are guaranteed to be called by the same thread
195  void preSourceConstruction(edm::ModuleDescription const&);
196  void postSourceConstruction(edm::ModuleDescription const&);
197 
198  // these signal pair are guaranteed to be called by the same thread
199  void preSourceRun(edm::RunIndex);
200  void postSourceRun(edm::RunIndex);
201 
202  // these signal pair are guaranteed to be called by the same thread
203  void preSourceLumi(edm::LuminosityBlockIndex);
204  void postSourceLumi(edm::LuminosityBlockIndex);
205 
206  // these signal pair are guaranteed to be called by the same thread
207  void preSourceEvent(edm::StreamID);
208  void postSourceEvent(edm::StreamID);
209 
210  // these signal pair are guaranteed to be called by the same thread
211  void preModuleConstruction(edm::ModuleDescription const&);
212  void postModuleConstruction(edm::ModuleDescription const&);
213 
214  // these signal pair are guaranteed to be called by the same thread
215  void preModuleBeginJob(edm::ModuleDescription const&);
216  void postModuleBeginJob(edm::ModuleDescription const&);
217 
218  // these signal pair are guaranteed to be called by the same thread
219  void preModuleEndJob(edm::ModuleDescription const&);
220  void postModuleEndJob(edm::ModuleDescription const&);
221 
222  // these signal pair are guaranteed to be called by the same thread
223  void preModuleBeginStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
224  void postModuleBeginStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
225 
226  // these signal pair are guaranteed to be called by the same thread
227  void preModuleEndStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
228  void postModuleEndStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
229 
230  // these signal pair are guaranteed to be called by the same thread
231  void preModuleGlobalBeginRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
232  void postModuleGlobalBeginRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
233 
234  // these signal pair are guaranteed to be called by the same thread
235  void preModuleGlobalEndRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
236  void postModuleGlobalEndRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
237 
238  // these signal pair are guaranteed to be called by the same thread
239  void preModuleGlobalBeginLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
240  void postModuleGlobalBeginLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
241 
242  // these signal pair are guaranteed to be called by the same thread
243  void preModuleGlobalEndLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
244  void postModuleGlobalEndLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
245 
246  // these signal pair are guaranteed to be called by the same thread
247  void preModuleStreamBeginRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
248  void postModuleStreamBeginRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
249 
250  // these signal pair are guaranteed to be called by the same thread
251  void preModuleStreamEndRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
252  void postModuleStreamEndRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
253 
254  // these signal pair are guaranteed to be called by the same thread
255  void preModuleStreamBeginLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
256  void postModuleStreamBeginLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
257 
258  // these signal pair are guaranteed to be called by the same thread
259  void preModuleStreamEndLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
260  void postModuleStreamEndLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
261 
262  // these signal pair are guaranteed to be called by the same thread
263  void preModuleEventAcquire(edm::StreamContext const&, edm::ModuleCallingContext const&);
264  void postModuleEventAcquire(edm::StreamContext const&, edm::ModuleCallingContext const&);
265 
266  // these signal pair are guaranteed to be called by the same thread
267  void preModuleEvent(edm::StreamContext const&, edm::ModuleCallingContext const&);
268  void postModuleEvent(edm::StreamContext const&, edm::ModuleCallingContext const&);
269 
270  // these signal pair are guaranteed to be called by the same thread
271  void preModuleEventDelayedGet(edm::StreamContext const&, edm::ModuleCallingContext const&);
272  void postModuleEventDelayedGet(edm::StreamContext const&, edm::ModuleCallingContext const&);
273 
274  // these signal pair are guaranteed to be called by the same thread
275  void preEventReadFromSource(edm::StreamContext const&, edm::ModuleCallingContext const&);
276  void postEventReadFromSource(edm::StreamContext const&, edm::ModuleCallingContext const&);
277 
278 private:
279  bool highlight(std::string const& label) const {
280  return (std::binary_search(highlightModules_.begin(), highlightModules_.end(), label));
281  }
282 
283  uint32_t labelColor(std::string const& label) const {
284  return highlight(label) ? nvtxAmber : nvtxGreen;
285  }
286 
287  uint32_t labelColorLight(std::string const& label) const {
288  return highlight(label) ? nvtxLightAmber : nvtxLightGreen;
289  }
290 
291  std::vector<std::string> highlightModules_;
294 
295  unsigned int concurrentStreams_;
296  std::atomic<bool> globalFirstEventDone_ = false;
297  std::vector<std::atomic<bool>> streamFirstEventDone_;
298  std::vector<nvtxRangeId_t> event_; // per-stream event ranges
299  std::vector<std::vector<nvtxRangeId_t>> stream_modules_; // per-stream, per-module ranges
300  // use a tbb::concurrent_vector rather than an std::vector because its final size is not known
301  tbb::concurrent_vector<nvtxRangeId_t> global_modules_; // global per-module events
302 
303 private:
304  struct Domains {
305  nvtxDomainHandle_t global;
306  std::vector<nvtxDomainHandle_t> stream;
307 
309  global = nvtxDomainCreate("EDM Global");
310  allocate_streams(service->concurrentStreams_);
311  }
312 
314  nvtxDomainDestroy(global);
315  for (unsigned int sid = 0; sid < stream.size(); ++sid) {
316  nvtxDomainDestroy(stream[sid]);
317  }
318  }
319 
320  void allocate_streams(unsigned int streams) {
321  stream.resize(streams);
322  for (unsigned int sid = 0; sid < streams; ++sid) {
323  stream[sid] = nvtxDomainCreate((boost::format("EDM Stream %d") % sid).str().c_str());
324  }
325  }
326  };
327 
328  // allow access to concurrentStreams_
329  friend struct Domains;
330 
331  tbb::enumerable_thread_specific<Domains> domains_;
332 
333  nvtxDomainHandle_t global_domain() {
334  return domains_.local().global;
335  }
336 
337  nvtxDomainHandle_t stream_domain(unsigned int sid) {
338  return domains_.local().stream.at(sid);
339  }
340 
341 };
342 
344  highlightModules_(config.getUntrackedParameter<std::vector<std::string>>("highlightModules")),
345  showModulePrefetching_(config.getUntrackedParameter<bool>("showModulePrefetching")),
346  skipFirstEvent_(config.getUntrackedParameter<bool>("skipFirstEvent")),
347  concurrentStreams_(0),
348  domains_(this)
349 {
350  std::sort(highlightModules_.begin(), highlightModules_.end());
351 
352  // enables profile collection; if profiling is already enabled it has no effect
353  if (not skipFirstEvent_) {
354  cudaProfilerStart();
355  }
356 
358 
359  // these signal pair are NOT guaranteed to be called by the same thread
362 
363  // there is no preEndJob() signal
365 
366  // these signal pair are NOT guaranteed to be called by the same thread
369 
370  // these signal pair are NOT guaranteed to be called by the same thread
373 
374  // these signal pair are NOT guaranteed to be called by the same thread
377 
378  // these signal pair are NOT guaranteed to be called by the same thread
381 
382  // these signal pair are NOT guaranteed to be called by the same thread
385 
386  // these signal pair are NOT guaranteed to be called by the same thread
389 
390  // these signal pair are NOT guaranteed to be called by the same thread
393 
394  // these signal pair are NOT guaranteed to be called by the same thread
397 
398  // these signal pair are NOT guaranteed to be called by the same thread
401 
402  // these signal pair are NOT guaranteed to be called by the same thread
405 
407  // these signal pair are NOT guaranteed to be called by the same thread
410  }
411 
412  // these signal pair are guaranteed to be called by the same thread
415 
416  // these signal pair are guaranteed to be called by the same thread
419 
420  // these signal pair are guaranteed to be called by the same thread
423 
424  // these signal pair are guaranteed to be called by the same thread
427 
428  // these signal pair are guaranteed to be called by the same thread
431 
432  // these signal pair are guaranteed to be called by the same thread
435 
436  // these signal pair are guaranteed to be called by the same thread
439 
440  // these signal pair are guaranteed to be called by the same thread
443 
444  // these signal pair are guaranteed to be called by the same thread
447 
448  // these signal pair are guaranteed to be called by the same thread
451 
452  // these signal pair are guaranteed to be called by the same thread
455 
456  // these signal pair are guaranteed to be called by the same thread
459 
460  // these signal pair are guaranteed to be called by the same thread
463 
464  // these signal pair are guaranteed to be called by the same thread
467 
468  // these signal pair are guaranteed to be called by the same thread
471 
472  // these signal pair are guaranteed to be called by the same thread
475 
476  // these signal pair are guaranteed to be called by the same thread
479 
480  // these signal pair are guaranteed to be called by the same thread
483 
484  // these signal pair are guaranteed to be called by the same thread
487 
488  // these signal pair are guaranteed to be called by the same thread
491 
492  // these signal pair are guaranteed to be called by the same thread
495 
496  // these signal pair are guaranteed to be called by the same thread
499 
500  // these signal pair are guaranteed to be called by the same thread
503 }
504 
506  cudaProfilerStop();
507 }
508 
509 void
512  desc.addUntracked<std::vector<std::string>>("highlightModules", {})->setComment("");
513  desc.addUntracked<bool>("showModulePrefetching", false)->setComment("Show the stack of dependencies that requested to run a module.");
514  desc.addUntracked<bool>("skipFirstEvent", false)->setComment("Start profiling after the first event has completed.\nWith multiple streams, ignore transitions belonging to events started in parallel to the first event.\nRequires running nvprof with the '--profile-from-start off' option.");
515  descriptions.add("NVProfilerService", desc);
516  descriptions.setComment(R"(This Service provides CMSSW-aware annotations to nvprof/nvvm.
517 
518 Notes on nvprof options:
519  - the option '--profile-from-start off' should be used if skipFirstEvent is True.
520  - the option '--cpu-profiling on' currently results in cmsRun being stuck at the beginning of the job.
521  - the option '--cpu-thread-tracing on' is not compatible with jemalloc, and should only be used with cmsRunGlibC.)");
522 }
523 
524 void
526  std::stringstream out;
527  out << "preallocate: " << bounds.maxNumberOfConcurrentRuns() << " concurrent runs, "
528  << bounds.maxNumberOfConcurrentLuminosityBlocks() << " luminosity sections, "
529  << bounds.maxNumberOfStreams() << " streams\nrunning on"
530  << bounds.maxNumberOfThreads() << " threads";
531  nvtxDomainMark(global_domain(), out.str().c_str());
532 
534  for (auto& domain: domains_) {
535  domain.allocate_streams(concurrentStreams_);
536  }
537  event_.resize(concurrentStreams_);
538  stream_modules_.resize(concurrentStreams_);
539  if (skipFirstEvent_) {
540  globalFirstEventDone_ = false;
541  std::vector<std::atomic<bool>> tmp(concurrentStreams_);
542  for (auto & element: tmp)
543  std::atomic_init(&element, false);
545  }
546 }
547 
548 void
550  nvtxDomainMark(global_domain(), "preBeginJob");
551 
552  // FIXME this probably works only in the absence of subprocesses
553  // size() + 1 because pathsAndConsumes.allModules() does not include the source
554  unsigned int modules = pathsAndConsumes.allModules().size() + 1;
555  global_modules_.resize(modules, nvtxInvalidRangeId);
556  for (unsigned int sid = 0; sid < concurrentStreams_; ++sid) {
557  stream_modules_[sid].resize(modules, nvtxInvalidRangeId);
558  }
559 }
560 
561 void
564  nvtxDomainMark(global_domain(), "postBeginJob");
565  }
566 }
567 
568 void
571  nvtxDomainMark(global_domain(), "postEndJob");
572  }
573 }
574 
575 void
578  nvtxDomainRangePush(stream_domain(sid), "source");
579  }
580 }
581 
582 void
585  nvtxDomainRangePop(stream_domain(sid));
586  }
587 }
588 
589 void
592  nvtxDomainRangePush(global_domain(), "source lumi");
593  }
594 }
595 
596 void
599  nvtxDomainRangePop(global_domain());
600  }
601 }
602 
603 void
606  nvtxDomainRangePush(global_domain(), "source run");
607  }
608 }
609 
610 void
613  nvtxDomainRangePop(global_domain());
614  }
615 }
616 
617 void
620  nvtxDomainRangePush(global_domain(), ("open file "s + lfn).c_str());
621  }
622 }
623 
624 void
627  nvtxDomainRangePop(global_domain());
628  }
629 }
630 
631 void
634  nvtxDomainRangePush(global_domain(), ("close file "s + lfn).c_str());
635  }
636 }
637 
638 void
641  nvtxDomainRangePop(global_domain());
642  }
643 }
644 
645 void
647  auto sid = sc.streamID();
649  auto mid = mcc.moduleDescription()->id();
650  auto const & label = mcc.moduleDescription()->moduleLabel();
651  auto const & msg = label + " begin stream";
652  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
653  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain(sid), msg.c_str(), labelColor(label));
654  }
655 }
656 
657 void
659  auto sid = sc.streamID();
661  auto mid = mcc.moduleDescription()->id();
662  nvtxDomainRangeEnd(stream_domain(sid), stream_modules_[sid][mid]);
663  stream_modules_[sid][mid] = nvtxInvalidRangeId;
664  }
665 }
666 
667 void
669  auto sid = sc.streamID();
671  auto mid = mcc.moduleDescription()->id();
672  auto const & label = mcc.moduleDescription()->moduleLabel();
673  auto const & msg = label + " end stream";
674  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
675  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain(sid), msg.c_str(), labelColor(label));
676  }
677 }
678 
679 void
681  auto sid = sc.streamID();
683  auto mid = mcc.moduleDescription()->id();
684  nvtxDomainRangeEnd(stream_domain(sid), stream_modules_[sid][mid]);
685  stream_modules_[sid][mid] = nvtxInvalidRangeId;
686  }
687 }
688 
689 void
692  nvtxDomainRangePush(global_domain(), "global begin run");
693  }
694 }
695 
696 void
699  nvtxDomainRangePop(global_domain());
700  }
701 }
702 
703 void
706  nvtxDomainRangePush(global_domain(), "global end run");
707  }
708 }
709 
710 void
713  nvtxDomainRangePop(global_domain());
714  }
715 }
716 
717 void
719  auto sid = sc.streamID();
721  nvtxDomainRangePush(stream_domain(sid), "stream begin run");
722  }
723 }
724 
725 void
727  auto sid = sc.streamID();
729  nvtxDomainRangePop(stream_domain(sid));
730  }
731 }
732 
733 void
735  auto sid = sc.streamID();
737  nvtxDomainRangePush(stream_domain(sid), "stream end run");
738  }
739 }
740 
741 void
743  auto sid = sc.streamID();
745  nvtxDomainRangePop(stream_domain(sid));
746  }
747 }
748 
749 void
752  nvtxDomainRangePush(global_domain(), "global begin lumi");
753  }
754 }
755 
756 void
759  nvtxDomainRangePop(global_domain());
760  }
761 }
762 
763 void
766  nvtxDomainRangePush(global_domain(), "global end lumi");
767  }
768 }
769 
770 void
773  nvtxDomainRangePop(global_domain());
774  }
775 }
776 
777 void
779  auto sid = sc.streamID();
781  nvtxDomainRangePush(stream_domain(sid), "stream begin lumi");
782  }
783 }
784 
785 void
787  auto sid = sc.streamID();
789  nvtxDomainRangePop(stream_domain(sid));
790  }
791 }
792 
793 void
795  auto sid = sc.streamID();
796  nvtxDomainRangePush(stream_domain(sid), "stream end lumi");
797 }
798 
799 void
801  auto sid = sc.streamID();
803  nvtxDomainRangePop(stream_domain(sid));
804  }
805 }
806 
807 void
809  auto sid = sc.streamID();
811  event_[sid] = nvtxDomainRangeStartColor(stream_domain(sid), "event", nvtxDarkGreen);
812  }
813 }
814 
815 void
817  auto sid = sc.streamID();
819  nvtxDomainRangeEnd(stream_domain(sid), event_[sid]);
820  event_[sid] = nvtxInvalidRangeId;
821  } else {
822  streamFirstEventDone_[sid] = true;
823  auto identity = [](bool x){ return x; };
824  if (std::all_of(streamFirstEventDone_.begin(), streamFirstEventDone_.end(), identity)) {
825  bool expected = false;
826  if (globalFirstEventDone_.compare_exchange_strong(expected, true))
827  cudaProfilerStart();
828  }
829  }
830 }
831 
832 void
834  auto sid = sc.streamID();
836  nvtxDomainMark(global_domain(), ("before path "s + pc.pathName()).c_str());
837  }
838 }
839 
840 void
842  auto sid = sc.streamID();
844  nvtxDomainMark(global_domain(), ("after path "s + pc.pathName()).c_str());
845  }
846 }
847 
848 void
850  auto sid = sc.streamID();
852  auto mid = mcc.moduleDescription()->id();
853  auto const & label = mcc.moduleDescription()->moduleLabel();
854  auto const & msg = label + " prefetching";
855  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
856  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain(sid), msg.c_str(), labelColorLight(label));
857  }
858 }
859 
860 void
862  auto sid = sc.streamID();
864  auto mid = mcc.moduleDescription()->id();
865  nvtxDomainRangeEnd(stream_domain(sid), stream_modules_[sid][mid]);
866  stream_modules_[sid][mid] = nvtxInvalidRangeId;
867  }
868 }
869 
870 void
872  if (not skipFirstEvent_) {
873  auto mid = desc.id();
874  global_modules_.grow_to_at_least(mid+1);
875  auto const & label = desc.moduleLabel();
876  auto const & msg = label + " construction";
877  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain(), msg.c_str(), labelColor(label));
878  }
879 }
880 
881 void
883  if (not skipFirstEvent_) {
884  auto mid = desc.id();
885  nvtxDomainRangeEnd(global_domain(), global_modules_[mid]);
886  global_modules_[mid] = nvtxInvalidRangeId;
887  }
888 }
889 
890 void
892  if (not skipFirstEvent_) {
893  auto mid = desc.id();
894  auto const & label = desc.moduleLabel();
895  auto const & msg = label + " begin job";
896  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain(), msg.c_str(), labelColor(label));
897  }
898 }
899 
900 void
902  if (not skipFirstEvent_) {
903  auto mid = desc.id();
904  nvtxDomainRangeEnd(global_domain(), global_modules_[mid]);
905  global_modules_[mid] = nvtxInvalidRangeId;
906  }
907 }
908 
909 void
912  auto mid = desc.id();
913  auto const & label = desc.moduleLabel();
914  auto const & msg = label + " end job";
915  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain(), msg.c_str(), labelColor(label));
916  }
917 }
918 
919 void
922  auto mid = desc.id();
923  nvtxDomainRangeEnd(global_domain(), global_modules_[mid]);
924  global_modules_[mid] = nvtxInvalidRangeId;
925  }
926 }
927 
928 void
930  auto sid = sc.streamID();
932  auto mid = mcc.moduleDescription()->id();
933  auto const & label = mcc.moduleDescription()->moduleLabel();
934  auto const & msg = label + " acquire";
935  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
936  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain(sid), msg.c_str(), labelColor(label));
937  }
938 }
939 
940 void
942  auto sid = sc.streamID();
944  auto mid = mcc.moduleDescription()->id();
945  nvtxDomainRangeEnd(stream_domain(sid), stream_modules_[sid][mid]);
946  stream_modules_[sid][mid] = nvtxInvalidRangeId;
947  }
948 }
949 
950 void
952  auto sid = sc.streamID();
954  auto mid = mcc.moduleDescription()->id();
955  auto const & label = mcc.moduleDescription()->moduleLabel();
956  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
957  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain(sid), label.c_str(), labelColor(label));
958  }
959 }
960 
961 void
963  auto sid = sc.streamID();
965  auto mid = mcc.moduleDescription()->id();
966  nvtxDomainRangeEnd(stream_domain(sid), stream_modules_[sid][mid]);
967  stream_modules_[sid][mid] = nvtxInvalidRangeId;
968  }
969 }
970 
971 void
973  /* FIXME
974  auto sid = sc.streamID();
975  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
976  auto mid = mcc.moduleDescription()->id();
977  auto const & label = mcc.moduleDescription()->moduleLabel();
978  auto const & msg = label + " delayed get";
979  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
980  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain(sid), label.c_str(), labelColorLight(label));
981  }
982  */
983 }
984 
985 void
987  /* FIXME
988  auto sid = sc.streamID();
989  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
990  auto mid = mcc.moduleDescription()->id();
991  nvtxDomainRangeEnd(stream_domain(sid), stream_modules_[sid][mid]);
992  stream_modules_[sid][mid] = nvtxInvalidRangeId;
993  }
994  */
995 }
996 
997 void
999  /* FIXME
1000  auto sid = sc.streamID();
1001  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1002  auto mid = mcc.moduleDescription()->id();
1003  auto const & label = mcc.moduleDescription()->moduleLabel();
1004  auto const & msg = label + " read from source";
1005  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
1006  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain(sid), msg.c_str(), labelColorLight(label));
1007  }
1008  */
1009 }
1010 
1011 void
1013  /* FIXME
1014  auto sid = sc.streamID();
1015  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1016  auto mid = mcc.moduleDescription()->id();
1017  nvtxDomainRangeEnd(stream_domain(sid), stream_modules_[sid][mid]);
1018  stream_modules_[sid][mid] = nvtxInvalidRangeId;
1019  }
1020  */
1021 }
1022 
1023 void
1025  auto sid = sc.streamID();
1026  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1027  auto mid = mcc.moduleDescription()->id();
1028  auto const & label = mcc.moduleDescription()->moduleLabel();
1029  auto const & msg = label + " stream begin run";
1030  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
1031  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain(sid), msg.c_str(), labelColor(label));
1032  }
1033 }
1034 
1035 void
1037  auto sid = sc.streamID();
1038  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1039  auto mid = mcc.moduleDescription()->id();
1040  nvtxDomainRangeEnd(stream_domain(sid), stream_modules_[sid][mid]);
1041  stream_modules_[sid][mid] = nvtxInvalidRangeId;
1042  }
1043 }
1044 
1045 void
1047  auto sid = sc.streamID();
1048  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1049  auto mid = mcc.moduleDescription()->id();
1050  auto const & label = mcc.moduleDescription()->moduleLabel();
1051  auto const & msg = label + " stream end run";
1052  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
1053  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain(sid), msg.c_str(), labelColor(label));
1054  }
1055 }
1056 
1057 void
1059  auto sid = sc.streamID();
1060  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1061  auto mid = mcc.moduleDescription()->id();
1062  nvtxDomainRangeEnd(stream_domain(sid), stream_modules_[sid][mid]);
1063  stream_modules_[sid][mid] = nvtxInvalidRangeId;
1064  }
1065 }
1066 
1067 void
1069  auto sid = sc.streamID();
1070  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1071  auto mid = mcc.moduleDescription()->id();
1072  auto const & label = mcc.moduleDescription()->moduleLabel();
1073  auto const & msg = label + " stream begin lumi";
1074  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
1075  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain(sid), msg.c_str(), labelColor(label));
1076  }
1077 }
1078 
1079 void
1081  auto sid = sc.streamID();
1082  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1083  auto mid = mcc.moduleDescription()->id();
1084  nvtxDomainRangeEnd(stream_domain(sid), stream_modules_[sid][mid]);
1085  stream_modules_[sid][mid] = nvtxInvalidRangeId;
1086  }
1087 }
1088 
1089 void
1091  auto sid = sc.streamID();
1092  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1093  auto mid = mcc.moduleDescription()->id();
1094  auto const & label = mcc.moduleDescription()->moduleLabel();
1095  auto const & msg = label + " stream end lumi";
1096  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
1097  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain(sid), msg.c_str(), labelColor(label));
1098  }
1099 }
1100 
1101 void
1103  auto sid = sc.streamID();
1104  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1105  auto mid = mcc.moduleDescription()->id();
1106  nvtxDomainRangeEnd(stream_domain(sid), stream_modules_[sid][mid]);
1107  stream_modules_[sid][mid] = nvtxInvalidRangeId;
1108  }
1109 }
1110 
1111 void
1114  auto mid = mcc.moduleDescription()->id();
1115  auto const & label = mcc.moduleDescription()->moduleLabel();
1116  auto const & msg = label + " global begin run";
1117  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain(), msg.c_str(), labelColor(label));
1118  }
1119 }
1120 
1121 void
1124  auto mid = mcc.moduleDescription()->id();
1125  nvtxDomainRangeEnd(global_domain(), global_modules_[mid]);
1126  global_modules_[mid] = nvtxInvalidRangeId;
1127  }
1128 }
1129 
1130 void
1133  auto mid = mcc.moduleDescription()->id();
1134  auto const & label = mcc.moduleDescription()->moduleLabel();
1135  auto const & msg = label + " global end run";
1136  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain(), msg.c_str(), labelColor(label));
1137  }
1138 }
1139 
1140 void
1143  auto mid = mcc.moduleDescription()->id();
1144  nvtxDomainRangeEnd(global_domain(), global_modules_[mid]);
1145  global_modules_[mid] = nvtxInvalidRangeId;
1146  }
1147 }
1148 
1149 void
1152  auto mid = mcc.moduleDescription()->id();
1153  auto const & label = mcc.moduleDescription()->moduleLabel();
1154  auto const & msg = label + " global begin lumi";
1155  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain(), msg.c_str(), labelColor(label));
1156  }
1157 }
1158 
1159 void
1162  auto mid = mcc.moduleDescription()->id();
1163  nvtxDomainRangeEnd(global_domain(), global_modules_[mid]);
1164  global_modules_[mid] = nvtxInvalidRangeId;
1165  }
1166 }
1167 
1168 void
1171  auto mid = mcc.moduleDescription()->id();
1172  auto const & label = mcc.moduleDescription()->moduleLabel();
1173  auto const & msg = label + " global end lumi";
1174  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain(), msg.c_str(), labelColor(label));
1175  }
1176 }
1177 
1178 void
1181  auto mid = mcc.moduleDescription()->id();
1182  nvtxDomainRangeEnd(global_domain(), global_modules_[mid]);
1183  global_modules_[mid] = nvtxInvalidRangeId;
1184  }
1185 }
1186 
1187 void
1189  if (not skipFirstEvent_) {
1190  auto mid = desc.id();
1191  global_modules_.grow_to_at_least(mid+1);
1192  auto const & label = desc.moduleLabel();
1193  auto const & msg = label + " construction";
1194  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain(), msg.c_str(), labelColor(label));
1195  }
1196 }
1197 
1198 void
1200  if (not skipFirstEvent_) {
1201  auto mid = desc.id();
1202  nvtxDomainRangeEnd(global_domain(), global_modules_[mid]);
1203  global_modules_[mid] = nvtxInvalidRangeId;
1204  }
1205 }
1206 
void watchPostModuleGlobalEndLumi(PostModuleGlobalEndLumi::slot_type const &iSlot)
void watchPostModuleConstruction(PostModuleConstruction::slot_type const &iSlot)
std::string const & pathName() const
Definition: PathContext.h:30
unsigned int maxNumberOfThreads() const
Definition: SystemBounds.h:38
void watchPreModuleGlobalBeginRun(PreModuleGlobalBeginRun::slot_type const &iSlot)
void watchPreEvent(PreEvent::slot_type const &iSlot)
void postStreamEndLumi(edm::StreamContext const &)
uint32_t labelColorLight(std::string const &label) const
void preOpenFile(std::string const &, bool)
void preModuleEventPrefetching(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preGlobalBeginRun(edm::GlobalContext const &)
void postGlobalEndRun(edm::GlobalContext const &)
void preGlobalEndLumi(edm::GlobalContext const &)
void postOpenFile(std::string const &, bool)
void postModuleEventDelayedGet(edm::StreamContext const &, edm::ModuleCallingContext const &)
void postModuleStreamBeginLumi(edm::StreamContext const &, edm::ModuleCallingContext const &)
void watchPrePathEvent(PrePathEvent::slot_type const &iSlot)
void watchPreallocate(Preallocate::slot_type const &iSlot)
void postModuleEvent(edm::StreamContext const &, edm::ModuleCallingContext const &)
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
tbb::enumerable_thread_specific< Domains > domains_
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 postCloseFile(std::string const &, bool)
void watchPreModuleEvent(PreModuleEvent::slot_type const &iSlot)
void postModuleEventAcquire(edm::StreamContext const &, edm::ModuleCallingContext const &)
void watchPreModuleConstruction(PreModuleConstruction::slot_type const &iSlot)
void watchPreGlobalEndLumi(PreGlobalEndLumi::slot_type const &iSlot)
void watchPostEvent(PostEvent::slot_type const &iSlot)
void preStreamBeginLumi(edm::StreamContext const &)
void preModuleEvent(edm::StreamContext const &, edm::ModuleCallingContext const &)
Domains(NVProfilerService *service)
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 watchPostPathEvent(PostPathEvent::slot_type const &iSlot)
float __attribute__((vector_size(8))) cms_float32x2_t
Definition: ExtVec.h:12
void watchPostModuleEvent(PostModuleEvent::slot_type const &iSlot)
void watchPostModuleGlobalBeginLumi(PostModuleGlobalBeginLumi::slot_type const &iSlot)
void preCloseFile(std::string const &, bool)
void watchPostModuleStreamEndLumi(PostModuleStreamEndLumi::slot_type const &iSlot)
void watchPostGlobalBeginLumi(PostGlobalBeginLumi::slot_type const &iSlot)
void watchPostModuleStreamBeginRun(PostModuleStreamBeginRun::slot_type const &iSlot)
void watchPostSourceEvent(PostSourceEvent::slot_type const &iSlot)
nvtxDomainHandle_t global_domain()
void postStreamEndRun(edm::StreamContext const &)
std::vector< nvtxDomainHandle_t > stream
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)
void watchPreStreamEndLumi(PreStreamEndLumi::slot_type const &iSlot)
std::string const & moduleLabel() const
void watchPreModuleGlobalEndRun(PreModuleGlobalEndRun::slot_type const &iSlot)
void watchPreModuleEventPrefetching(PreModuleEventPrefetching::slot_type const &iSlot)
void preModuleStreamEndLumi(edm::StreamContext const &, edm::ModuleCallingContext const &)
bool highlight(std::string const &label) const
void postModuleConstruction(edm::ModuleDescription const &)
std::vector< ModuleDescription const * > const & allModules() const
void postModuleEventPrefetching(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preModuleGlobalBeginRun(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void preGlobalEndRun(edm::GlobalContext const &)
void postSourceEvent(edm::StreamID)
void watchPostModuleEventPrefetching(PostModuleEventPrefetching::slot_type const &iSlot)
void preStreamEndRun(edm::StreamContext const &)
unsigned int maxNumberOfStreams() const
Definition: SystemBounds.h:35
void postModuleGlobalEndLumi(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void watchPreOpenFile(PreOpenFile::slot_type const &iSlot)
char const * label
void watchPostGlobalBeginRun(PostGlobalBeginRun::slot_type const &iSlot)
void watchPostCloseFile(PostCloseFile::slot_type const &iSlot)
void watchPreGlobalEndRun(PreGlobalEndRun::slot_type const &iSlot)
void preModuleEventDelayedGet(edm::StreamContext const &, edm::ModuleCallingContext const &)
void watchPostSourceRun(PostSourceRun::slot_type const &iSlot)
void watchPostStreamBeginLumi(PostStreamBeginLumi::slot_type const &iSlot)
void preSourceConstruction(edm::ModuleDescription const &)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void watchPreSourceLumi(PreSourceLumi::slot_type const &iSlot)
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
void postModuleGlobalEndRun(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void watchPreModuleEventDelayedGet(PreModuleEventDelayedGet::slot_type const &iSlot)
ModuleDescription const * moduleDescription() const
void preModuleGlobalEndRun(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void preBeginJob(edm::PathsAndConsumesOfModulesBase const &, edm::ProcessContext const &)
void watchPostModuleEventAcquire(PostModuleEventAcquire::slot_type const &iSlot)
void watchPreModuleEndJob(PreModuleEndJob::slot_type const &iSlot)
void postPathEvent(edm::StreamContext const &, edm::PathContext const &, edm::HLTPathStatus const &)
void postStreamBeginLumi(edm::StreamContext const &)
T identity(T t)
void preStreamEndLumi(edm::StreamContext const &)
uint32_t labelColor(std::string const &label) const
void watchPostGlobalEndLumi(PostGlobalEndLumi::slot_type const &iSlot)
format
Some error handling for the usage.
void watchPreSourceRun(PreSourceRun::slot_type const &iSlot)
void preModuleBeginJob(edm::ModuleDescription const &)
#define DEFINE_FWK_SERVICE(type)
Definition: ServiceMaker.h:105
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 &)
void postModuleBeginStream(edm::StreamContext const &, edm::ModuleCallingContext const &)
void watchPostModuleStreamEndRun(PostModuleStreamEndRun::slot_type const &iSlot)
void watchPreModuleGlobalBeginLumi(PreModuleGlobalBeginLumi::slot_type const &iSlot)
void postModuleGlobalBeginRun(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void preModuleBeginStream(edm::StreamContext const &, edm::ModuleCallingContext const &)
StreamID const & streamID() const
Definition: StreamContext.h:54
void preSourceEvent(edm::StreamID)
void watchPreGlobalBeginRun(PreGlobalBeginRun::slot_type const &iSlot)
void watchPreModuleStreamBeginLumi(PreModuleStreamBeginLumi::slot_type const &iSlot)
void setComment(std::string const &value)
void watchPostModuleBeginStream(PostModuleBeginStream::slot_type const &iSlot)
void allocate_streams(unsigned int streams)
void preModuleConstruction(edm::ModuleDescription const &)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
unsigned int maxNumberOfConcurrentLuminosityBlocks() const
Definition: SystemBounds.h:37
void watchPostSourceLumi(PostSourceLumi::slot_type const &iSlot)
NVProfilerService(const edm::ParameterSet &, edm::ActivityRegistry &)
unsigned int concurrentStreams_
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)
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
void postSourceRun(edm::RunIndex)
void watchPreStreamBeginRun(PreStreamBeginRun::slot_type const &iSlot)
void preallocate(edm::service::SystemBounds const &)
void watchPreModuleStreamEndRun(PreModuleStreamEndRun::slot_type const &iSlot)
void postModuleEndStream(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preSourceLumi(edm::LuminosityBlockIndex)
void watchPostModuleBeginJob(PostModuleBeginJob::slot_type const &iSlot)
void watchPostEventReadFromSource(PostEventReadFromSource::slot_type const &iSlot)
void watchPostModuleGlobalBeginRun(PostModuleGlobalBeginRun::slot_type const &iSlot)
const bool showModulePrefetching_
void preEventReadFromSource(edm::StreamContext const &, edm::ModuleCallingContext const &)
unsigned int maxNumberOfConcurrentRuns() const
Definition: SystemBounds.h:36
nvtxDomainHandle_t stream_domain(unsigned int sid)
void preEvent(edm::StreamContext const &)
void preModuleGlobalEndLumi(edm::GlobalContext const &, edm::ModuleCallingContext const &)
std::atomic< bool > globalFirstEventDone_
void watchPreSourceEvent(PreSourceEvent::slot_type const &iSlot)
void postStreamBeginRun(edm::StreamContext const &)
std::vector< std::atomic< bool > > streamFirstEventDone_
void prePathEvent(edm::StreamContext const &, edm::PathContext const &)
static Interceptor::Registry registry("Interceptor")
#define str(s)
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
#define constexpr
void watchPreModuleGlobalEndLumi(PreModuleGlobalEndLumi::slot_type const &iSlot)
unsigned int id() const
void postModuleBeginJob(edm::ModuleDescription const &)
void watchPostBeginJob(PostBeginJob::slot_type const &iSlot)
convenience function for attaching to signal