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 = {};
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&, bool);
185  void postOpenFile(std::string const&, bool);
186 
187  // these signal pair are guaranteed to be called by the same thread
188  void preCloseFile(std::string const&, bool);
189  void postCloseFile(std::string const&, bool);
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 preModuleBeginJob(edm::ModuleDescription const&);
213  void postModuleBeginJob(edm::ModuleDescription const&);
214 
215  // these signal pair are guaranteed to be called by the same thread
216  void preModuleEndJob(edm::ModuleDescription const&);
217  void postModuleEndJob(edm::ModuleDescription const&);
218 
219  // these signal pair are guaranteed to be called by the same thread
220  void preModuleBeginStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
221  void postModuleBeginStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
222 
223  // these signal pair are guaranteed to be called by the same thread
224  void preModuleEndStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
225  void postModuleEndStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
226 
227  // these signal pair are guaranteed to be called by the same thread
228  void preModuleGlobalBeginRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
229  void postModuleGlobalBeginRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
230 
231  // these signal pair are guaranteed to be called by the same thread
232  void preModuleGlobalEndRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
233  void postModuleGlobalEndRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
234 
235  // these signal pair are guaranteed to be called by the same thread
236  void preModuleGlobalBeginLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
237  void postModuleGlobalBeginLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
238 
239  // these signal pair are guaranteed to be called by the same thread
240  void preModuleGlobalEndLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
241  void postModuleGlobalEndLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
242 
243  // these signal pair are guaranteed to be called by the same thread
244  void preModuleStreamBeginRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
245  void postModuleStreamBeginRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
246 
247  // these signal pair are guaranteed to be called by the same thread
248  void preModuleStreamEndRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
249  void postModuleStreamEndRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
250 
251  // these signal pair are guaranteed to be called by the same thread
252  void preModuleStreamBeginLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
253  void postModuleStreamBeginLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
254 
255  // these signal pair are guaranteed to be called by the same thread
256  void preModuleStreamEndLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
257  void postModuleStreamEndLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
258 
259  // these signal pair are guaranteed to be called by the same thread
260  void preModuleEventAcquire(edm::StreamContext const&, edm::ModuleCallingContext const&);
261  void postModuleEventAcquire(edm::StreamContext const&, edm::ModuleCallingContext const&);
262 
263  // these signal pair are guaranteed to be called by the same thread
264  void preModuleEvent(edm::StreamContext const&, edm::ModuleCallingContext const&);
265  void postModuleEvent(edm::StreamContext const&, edm::ModuleCallingContext const&);
266 
267  // these signal pair are guaranteed to be called by the same thread
268  void preModuleEventDelayedGet(edm::StreamContext const&, edm::ModuleCallingContext const&);
269  void postModuleEventDelayedGet(edm::StreamContext const&, edm::ModuleCallingContext const&);
270 
271  // these signal pair are guaranteed to be called by the same thread
272  void preEventReadFromSource(edm::StreamContext const&, edm::ModuleCallingContext const&);
273  void postEventReadFromSource(edm::StreamContext const&, edm::ModuleCallingContext const&);
274 
275 private:
276  bool highlight(std::string const& label) const {
277  return (std::binary_search(highlightModules_.begin(), highlightModules_.end(), label));
278  }
279 
280  uint32_t labelColor(std::string const& label) const { return highlight(label) ? nvtxAmber : nvtxGreen; }
281 
282  uint32_t labelColorLight(std::string const& label) const {
283  return highlight(label) ? nvtxLightAmber : nvtxLightGreen;
284  }
285 
286  std::vector<std::string> highlightModules_;
289 
290  unsigned int concurrentStreams_;
291  std::atomic<bool> globalFirstEventDone_ = false;
292  std::vector<std::atomic<bool>> streamFirstEventDone_;
293  std::vector<nvtxRangeId_t> event_; // per-stream event ranges
294  std::vector<std::vector<nvtxRangeId_t>> stream_modules_; // per-stream, per-module ranges
295  // use a tbb::concurrent_vector rather than an std::vector because its final size is not known
296  tbb::concurrent_vector<nvtxRangeId_t> global_modules_; // global per-module events
297 
298 private:
299  struct Domains {
300  nvtxDomainHandle_t global;
301  std::vector<nvtxDomainHandle_t> stream;
302 
304  global = nvtxDomainCreate("EDM Global");
305  allocate_streams(service->concurrentStreams_);
306  }
307 
309  nvtxDomainDestroy(global);
310  for (unsigned int sid = 0; sid < stream.size(); ++sid) {
311  nvtxDomainDestroy(stream[sid]);
312  }
313  }
314 
315  void allocate_streams(unsigned int streams) {
316  stream.resize(streams);
317  for (unsigned int sid = 0; sid < streams; ++sid) {
318  stream[sid] = nvtxDomainCreate((boost::format("EDM Stream %d") % sid).str().c_str());
319  }
320  }
321  };
322 
323  // allow access to concurrentStreams_
324  friend struct Domains;
325 
326  tbb::enumerable_thread_specific<Domains> domains_;
327 
328  nvtxDomainHandle_t global_domain() { return domains_.local().global; }
329 
330  nvtxDomainHandle_t stream_domain(unsigned int sid) { return domains_.local().stream.at(sid); }
331 };
332 
334  : highlightModules_(config.getUntrackedParameter<std::vector<std::string>>("highlightModules")),
335  showModulePrefetching_(config.getUntrackedParameter<bool>("showModulePrefetching")),
336  skipFirstEvent_(config.getUntrackedParameter<bool>("skipFirstEvent")),
337  concurrentStreams_(0),
338  domains_(this) {
339  std::sort(highlightModules_.begin(), highlightModules_.end());
340 
341  // enables profile collection; if profiling is already enabled it has no effect
342  if (not skipFirstEvent_) {
343  cudaProfilerStart();
344  }
345 
347 
348  // these signal pair are NOT guaranteed to be called by the same thread
351 
352  // there is no preEndJob() signal
354 
355  // these signal pair are NOT guaranteed to be called by the same thread
358 
359  // these signal pair are NOT guaranteed to be called by the same thread
362 
363  // these signal pair are NOT guaranteed to be called by the same thread
366 
367  // these signal pair are NOT guaranteed to be called by the same thread
370 
371  // these signal pair are NOT guaranteed to be called by the same thread
374 
375  // these signal pair are NOT guaranteed to be called by the same thread
378 
379  // these signal pair are NOT guaranteed to be called by the same thread
382 
383  // these signal pair are NOT guaranteed to be called by the same thread
386 
387  // these signal pair are NOT guaranteed to be called by the same thread
390 
391  // these signal pair are NOT guaranteed to be called by the same thread
394 
396  // these signal pair are NOT guaranteed to be called by the same thread
399  }
400 
401  // these signal pair are guaranteed to be called by the same thread
404 
405  // these signal pair are guaranteed to be called by the same thread
408 
409  // these signal pair are guaranteed to be called by the same thread
412 
413  // these signal pair are guaranteed to be called by the same thread
416 
417  // these signal pair are guaranteed to be called by the same thread
420 
421  // these signal pair are guaranteed to be called by the same thread
424 
425  // these signal pair are guaranteed to be called by the same thread
428 
429  // these signal pair are guaranteed to be called by the same thread
432 
433  // these signal pair are guaranteed to be called by the same thread
436 
437  // these signal pair are guaranteed to be called by the same thread
440 
441  // these signal pair are guaranteed to be called by the same thread
444 
445  // these signal pair are guaranteed to be called by the same thread
448 
449  // these signal pair are guaranteed to be called by the same thread
452 
453  // these signal pair are guaranteed to be called by the same thread
456 
457  // these signal pair are guaranteed to be called by the same thread
460 
461  // these signal pair are guaranteed to be called by the same thread
464 
465  // these signal pair are guaranteed to be called by the same thread
468 
469  // these signal pair are guaranteed to be called by the same thread
472 
473  // these signal pair are guaranteed to be called by the same thread
476 
477  // these signal pair are guaranteed to be called by the same thread
480 
481  // these signal pair are guaranteed to be called by the same thread
484 
485  // these signal pair are guaranteed to be called by the same thread
488 
489  // these signal pair are guaranteed to be called by the same thread
492 }
493 
494 NVProfilerService::~NVProfilerService() { cudaProfilerStop(); }
495 
498  desc.addUntracked<std::vector<std::string>>("highlightModules", {})->setComment("");
499  desc.addUntracked<bool>("showModulePrefetching", false)
500  ->setComment("Show the stack of dependencies that requested to run a module.");
501  desc.addUntracked<bool>("skipFirstEvent", false)
502  ->setComment(
503  "Start profiling after the first event has completed.\nWith multiple streams, ignore transitions belonging "
504  "to events started in parallel to the first event.\nRequires running nvprof with the '--profile-from-start "
505  "off' option.");
506  descriptions.add("NVProfilerService", desc);
507  descriptions.setComment(R"(This Service provides CMSSW-aware annotations to nvprof/nvvm.
508 
509 Notes on nvprof options:
510  - the option '--profile-from-start off' should be used if skipFirstEvent is True.
511  - the option '--cpu-profiling on' currently results in cmsRun being stuck at the beginning of the job.
512  - the option '--cpu-thread-tracing on' is not compatible with jemalloc, and should only be used with cmsRunGlibC.)");
513 }
514 
516  std::stringstream out;
517  out << "preallocate: " << bounds.maxNumberOfConcurrentRuns() << " concurrent runs, "
518  << bounds.maxNumberOfConcurrentLuminosityBlocks() << " luminosity sections, " << bounds.maxNumberOfStreams()
519  << " streams\nrunning on" << bounds.maxNumberOfThreads() << " threads";
520  nvtxDomainMark(global_domain(), out.str().c_str());
521 
523  for (auto& domain : domains_) {
524  domain.allocate_streams(concurrentStreams_);
525  }
526  event_.resize(concurrentStreams_);
527  stream_modules_.resize(concurrentStreams_);
528  if (skipFirstEvent_) {
529  globalFirstEventDone_ = false;
530  std::vector<std::atomic<bool>> tmp(concurrentStreams_);
531  for (auto& element : tmp)
532  std::atomic_init(&element, false);
534  }
535 }
536 
538  edm::ProcessContext const& pc) {
539  nvtxDomainMark(global_domain(), "preBeginJob");
540 
541  // FIXME this probably works only in the absence of subprocesses
542  // size() + 1 because pathsAndConsumes.allModules() does not include the source
543  unsigned int modules = pathsAndConsumes.allModules().size() + 1;
544  global_modules_.resize(modules, nvtxInvalidRangeId);
545  for (unsigned int sid = 0; sid < concurrentStreams_; ++sid) {
546  stream_modules_[sid].resize(modules, nvtxInvalidRangeId);
547  }
548 }
549 
552  nvtxDomainMark(global_domain(), "postBeginJob");
553  }
554 }
555 
558  nvtxDomainMark(global_domain(), "postEndJob");
559  }
560 }
561 
564  nvtxDomainRangePush(stream_domain(sid), "source");
565  }
566 }
567 
570  nvtxDomainRangePop(stream_domain(sid));
571  }
572 }
573 
576  nvtxDomainRangePush(global_domain(), "source lumi");
577  }
578 }
579 
582  nvtxDomainRangePop(global_domain());
583  }
584 }
585 
588  nvtxDomainRangePush(global_domain(), "source run");
589  }
590 }
591 
594  nvtxDomainRangePop(global_domain());
595  }
596 }
597 
600  nvtxDomainRangePush(global_domain(), ("open file "s + lfn).c_str());
601  }
602 }
603 
606  nvtxDomainRangePop(global_domain());
607  }
608 }
609 
612  nvtxDomainRangePush(global_domain(), ("close file "s + lfn).c_str());
613  }
614 }
615 
618  nvtxDomainRangePop(global_domain());
619  }
620 }
621 
623  auto sid = sc.streamID();
625  auto mid = mcc.moduleDescription()->id();
626  auto const& label = mcc.moduleDescription()->moduleLabel();
627  auto const& msg = label + " begin stream";
628  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
629  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain(sid), msg.c_str(), labelColor(label));
630  }
631 }
632 
634  auto sid = sc.streamID();
636  auto mid = mcc.moduleDescription()->id();
637  nvtxDomainRangeEnd(stream_domain(sid), stream_modules_[sid][mid]);
638  stream_modules_[sid][mid] = nvtxInvalidRangeId;
639  }
640 }
641 
643  auto sid = sc.streamID();
645  auto mid = mcc.moduleDescription()->id();
646  auto const& label = mcc.moduleDescription()->moduleLabel();
647  auto const& msg = label + " end stream";
648  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
649  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain(sid), msg.c_str(), labelColor(label));
650  }
651 }
652 
654  auto sid = sc.streamID();
656  auto mid = mcc.moduleDescription()->id();
657  nvtxDomainRangeEnd(stream_domain(sid), stream_modules_[sid][mid]);
658  stream_modules_[sid][mid] = nvtxInvalidRangeId;
659  }
660 }
661 
664  nvtxDomainRangePush(global_domain(), "global begin run");
665  }
666 }
667 
670  nvtxDomainRangePop(global_domain());
671  }
672 }
673 
676  nvtxDomainRangePush(global_domain(), "global end run");
677  }
678 }
679 
682  nvtxDomainRangePop(global_domain());
683  }
684 }
685 
687  auto sid = sc.streamID();
689  nvtxDomainRangePush(stream_domain(sid), "stream begin run");
690  }
691 }
692 
694  auto sid = sc.streamID();
696  nvtxDomainRangePop(stream_domain(sid));
697  }
698 }
699 
701  auto sid = sc.streamID();
703  nvtxDomainRangePush(stream_domain(sid), "stream end run");
704  }
705 }
706 
708  auto sid = sc.streamID();
710  nvtxDomainRangePop(stream_domain(sid));
711  }
712 }
713 
716  nvtxDomainRangePush(global_domain(), "global begin lumi");
717  }
718 }
719 
722  nvtxDomainRangePop(global_domain());
723  }
724 }
725 
728  nvtxDomainRangePush(global_domain(), "global end lumi");
729  }
730 }
731 
734  nvtxDomainRangePop(global_domain());
735  }
736 }
737 
739  auto sid = sc.streamID();
741  nvtxDomainRangePush(stream_domain(sid), "stream begin lumi");
742  }
743 }
744 
746  auto sid = sc.streamID();
748  nvtxDomainRangePop(stream_domain(sid));
749  }
750 }
751 
753  auto sid = sc.streamID();
754  nvtxDomainRangePush(stream_domain(sid), "stream end lumi");
755 }
756 
758  auto sid = sc.streamID();
760  nvtxDomainRangePop(stream_domain(sid));
761  }
762 }
763 
765  auto sid = sc.streamID();
767  event_[sid] = nvtxDomainRangeStartColor(stream_domain(sid), "event", nvtxDarkGreen);
768  }
769 }
770 
772  auto sid = sc.streamID();
774  nvtxDomainRangeEnd(stream_domain(sid), event_[sid]);
775  event_[sid] = nvtxInvalidRangeId;
776  } else {
777  streamFirstEventDone_[sid] = true;
778  auto identity = [](bool x) { return x; };
779  if (std::all_of(streamFirstEventDone_.begin(), streamFirstEventDone_.end(), identity)) {
780  bool expected = false;
781  if (globalFirstEventDone_.compare_exchange_strong(expected, true))
782  cudaProfilerStart();
783  }
784  }
785 }
786 
788  auto sid = sc.streamID();
790  nvtxDomainMark(global_domain(), ("before path "s + pc.pathName()).c_str());
791  }
792 }
793 
795  edm::PathContext const& pc,
796  edm::HLTPathStatus const& hlts) {
797  auto sid = sc.streamID();
799  nvtxDomainMark(global_domain(), ("after path "s + pc.pathName()).c_str());
800  }
801 }
802 
804  auto sid = sc.streamID();
806  auto mid = mcc.moduleDescription()->id();
807  auto const& label = mcc.moduleDescription()->moduleLabel();
808  auto const& msg = label + " prefetching";
809  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
810  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain(sid), msg.c_str(), labelColorLight(label));
811  }
812 }
813 
815  auto sid = sc.streamID();
817  auto mid = mcc.moduleDescription()->id();
818  nvtxDomainRangeEnd(stream_domain(sid), stream_modules_[sid][mid]);
819  stream_modules_[sid][mid] = nvtxInvalidRangeId;
820  }
821 }
822 
824  if (not skipFirstEvent_) {
825  auto mid = desc.id();
826  global_modules_.grow_to_at_least(mid + 1);
827  auto const& label = desc.moduleLabel();
828  auto const& msg = label + " construction";
829  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain(), msg.c_str(), labelColor(label));
830  }
831 }
832 
834  if (not skipFirstEvent_) {
835  auto mid = desc.id();
836  nvtxDomainRangeEnd(global_domain(), global_modules_[mid]);
837  global_modules_[mid] = nvtxInvalidRangeId;
838  }
839 }
840 
842  if (not skipFirstEvent_) {
843  auto mid = desc.id();
844  auto const& label = desc.moduleLabel();
845  auto const& msg = label + " begin job";
846  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain(), msg.c_str(), labelColor(label));
847  }
848 }
849 
851  if (not skipFirstEvent_) {
852  auto mid = desc.id();
853  nvtxDomainRangeEnd(global_domain(), global_modules_[mid]);
854  global_modules_[mid] = nvtxInvalidRangeId;
855  }
856 }
857 
860  auto mid = desc.id();
861  auto const& label = desc.moduleLabel();
862  auto const& msg = label + " end job";
863  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain(), msg.c_str(), labelColor(label));
864  }
865 }
866 
869  auto mid = desc.id();
870  nvtxDomainRangeEnd(global_domain(), global_modules_[mid]);
871  global_modules_[mid] = nvtxInvalidRangeId;
872  }
873 }
874 
876  auto sid = sc.streamID();
878  auto mid = mcc.moduleDescription()->id();
879  auto const& label = mcc.moduleDescription()->moduleLabel();
880  auto const& msg = label + " acquire";
881  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
882  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain(sid), msg.c_str(), labelColor(label));
883  }
884 }
885 
887  auto sid = sc.streamID();
889  auto mid = mcc.moduleDescription()->id();
890  nvtxDomainRangeEnd(stream_domain(sid), stream_modules_[sid][mid]);
891  stream_modules_[sid][mid] = nvtxInvalidRangeId;
892  }
893 }
894 
896  auto sid = sc.streamID();
898  auto mid = mcc.moduleDescription()->id();
899  auto const& label = mcc.moduleDescription()->moduleLabel();
900  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
901  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain(sid), label.c_str(), labelColor(label));
902  }
903 }
904 
906  auto sid = sc.streamID();
908  auto mid = mcc.moduleDescription()->id();
909  nvtxDomainRangeEnd(stream_domain(sid), stream_modules_[sid][mid]);
910  stream_modules_[sid][mid] = nvtxInvalidRangeId;
911  }
912 }
913 
915  /* FIXME
916  auto sid = sc.streamID();
917  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
918  auto mid = mcc.moduleDescription()->id();
919  auto const & label = mcc.moduleDescription()->moduleLabel();
920  auto const & msg = label + " delayed get";
921  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
922  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain(sid), label.c_str(), labelColorLight(label));
923  }
924  */
925 }
926 
928  /* FIXME
929  auto sid = sc.streamID();
930  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
931  auto mid = mcc.moduleDescription()->id();
932  nvtxDomainRangeEnd(stream_domain(sid), stream_modules_[sid][mid]);
933  stream_modules_[sid][mid] = nvtxInvalidRangeId;
934  }
935  */
936 }
937 
939  /* FIXME
940  auto sid = sc.streamID();
941  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
942  auto mid = mcc.moduleDescription()->id();
943  auto const & label = mcc.moduleDescription()->moduleLabel();
944  auto const & msg = label + " read from source";
945  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
946  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain(sid), msg.c_str(), labelColorLight(label));
947  }
948  */
949 }
950 
952  /* FIXME
953  auto sid = sc.streamID();
954  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
955  auto mid = mcc.moduleDescription()->id();
956  nvtxDomainRangeEnd(stream_domain(sid), stream_modules_[sid][mid]);
957  stream_modules_[sid][mid] = nvtxInvalidRangeId;
958  }
959  */
960 }
961 
963  auto sid = sc.streamID();
965  auto mid = mcc.moduleDescription()->id();
966  auto const& label = mcc.moduleDescription()->moduleLabel();
967  auto const& msg = label + " stream begin run";
968  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
969  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain(sid), msg.c_str(), labelColor(label));
970  }
971 }
972 
974  auto sid = sc.streamID();
976  auto mid = mcc.moduleDescription()->id();
977  nvtxDomainRangeEnd(stream_domain(sid), stream_modules_[sid][mid]);
978  stream_modules_[sid][mid] = nvtxInvalidRangeId;
979  }
980 }
981 
983  auto sid = sc.streamID();
985  auto mid = mcc.moduleDescription()->id();
986  auto const& label = mcc.moduleDescription()->moduleLabel();
987  auto const& msg = label + " stream end run";
988  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
989  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain(sid), msg.c_str(), labelColor(label));
990  }
991 }
992 
994  auto sid = sc.streamID();
996  auto mid = mcc.moduleDescription()->id();
997  nvtxDomainRangeEnd(stream_domain(sid), stream_modules_[sid][mid]);
998  stream_modules_[sid][mid] = nvtxInvalidRangeId;
999  }
1000 }
1001 
1003  auto sid = sc.streamID();
1004  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1005  auto mid = mcc.moduleDescription()->id();
1006  auto const& label = mcc.moduleDescription()->moduleLabel();
1007  auto const& msg = label + " stream begin lumi";
1008  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
1009  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain(sid), msg.c_str(), labelColor(label));
1010  }
1011 }
1012 
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 
1023  auto sid = sc.streamID();
1024  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1025  auto mid = mcc.moduleDescription()->id();
1026  auto const& label = mcc.moduleDescription()->moduleLabel();
1027  auto const& msg = label + " stream end lumi";
1028  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
1029  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain(sid), msg.c_str(), labelColor(label));
1030  }
1031 }
1032 
1034  auto sid = sc.streamID();
1035  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1036  auto mid = mcc.moduleDescription()->id();
1037  nvtxDomainRangeEnd(stream_domain(sid), stream_modules_[sid][mid]);
1038  stream_modules_[sid][mid] = nvtxInvalidRangeId;
1039  }
1040 }
1041 
1044  auto mid = mcc.moduleDescription()->id();
1045  auto const& label = mcc.moduleDescription()->moduleLabel();
1046  auto const& msg = label + " global begin run";
1047  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain(), msg.c_str(), labelColor(label));
1048  }
1049 }
1050 
1053  auto mid = mcc.moduleDescription()->id();
1054  nvtxDomainRangeEnd(global_domain(), global_modules_[mid]);
1055  global_modules_[mid] = nvtxInvalidRangeId;
1056  }
1057 }
1058 
1061  auto mid = mcc.moduleDescription()->id();
1062  auto const& label = mcc.moduleDescription()->moduleLabel();
1063  auto const& msg = label + " global end run";
1064  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain(), msg.c_str(), labelColor(label));
1065  }
1066 }
1067 
1070  auto mid = mcc.moduleDescription()->id();
1071  nvtxDomainRangeEnd(global_domain(), global_modules_[mid]);
1072  global_modules_[mid] = nvtxInvalidRangeId;
1073  }
1074 }
1075 
1078  auto mid = mcc.moduleDescription()->id();
1079  auto const& label = mcc.moduleDescription()->moduleLabel();
1080  auto const& msg = label + " global begin lumi";
1081  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain(), msg.c_str(), labelColor(label));
1082  }
1083 }
1084 
1087  auto mid = mcc.moduleDescription()->id();
1088  nvtxDomainRangeEnd(global_domain(), global_modules_[mid]);
1089  global_modules_[mid] = nvtxInvalidRangeId;
1090  }
1091 }
1092 
1095  auto mid = mcc.moduleDescription()->id();
1096  auto const& label = mcc.moduleDescription()->moduleLabel();
1097  auto const& msg = label + " global end lumi";
1098  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain(), msg.c_str(), labelColor(label));
1099  }
1100 }
1101 
1104  auto mid = mcc.moduleDescription()->id();
1105  nvtxDomainRangeEnd(global_domain(), global_modules_[mid]);
1106  global_modules_[mid] = nvtxInvalidRangeId;
1107  }
1108 }
1109 
1111  if (not skipFirstEvent_) {
1112  auto mid = desc.id();
1113  global_modules_.grow_to_at_least(mid + 1);
1114  auto const& label = desc.moduleLabel();
1115  auto const& msg = label + " construction";
1116  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain(), msg.c_str(), labelColor(label));
1117  }
1118 }
1119 
1121  if (not skipFirstEvent_) {
1122  auto mid = desc.id();
1123  nvtxDomainRangeEnd(global_domain(), global_modules_[mid]);
1124  global_modules_[mid] = nvtxInvalidRangeId;
1125  }
1126 }
1127 
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)
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)
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 &)
#define str(s)
tmp
align.sh
Definition: createJobs.py:716
void postModuleStreamEndRun(edm::StreamContext const &, edm::ModuleCallingContext const &)
void postModuleGlobalBeginLumi(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void watchPostModuleEndJob(PostModuleEndJob::slot_type const &iSlot)
std::vector< std::string > highlightModules_
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