CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
NVProfilerService.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: HeterogeneousCore/CUDAServices
4 // Class : NVProfilerService
5 
6 #include <algorithm>
7 #include <iostream>
8 #include <sstream>
9 #include <string>
10 #include <vector>
11 
12 #include <oneapi/tbb/concurrent_vector.h>
13 
14 #include <fmt/printf.h>
15 
16 #include <cuda_profiler_api.h>
17 #include <nvToolsExt.h>
18 
44 
45 using namespace std::string_literals;
46 
47 namespace {
48  int nvtxDomainRangePush(nvtxDomainHandle_t domain, const char* message) {
49  nvtxEventAttributes_t eventAttrib = {};
50  eventAttrib.version = NVTX_VERSION;
51  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
52  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
53  eventAttrib.message.ascii = message;
54  return nvtxDomainRangePushEx(domain, &eventAttrib);
55  }
56 
57  __attribute__((unused)) int nvtxDomainRangePushColor(nvtxDomainHandle_t domain, const char* message, uint32_t color) {
58  nvtxEventAttributes_t eventAttrib = {};
59  eventAttrib.version = NVTX_VERSION;
60  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
61  eventAttrib.colorType = NVTX_COLOR_ARGB;
62  eventAttrib.color = color;
63  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
64  eventAttrib.message.ascii = message;
65  return nvtxDomainRangePushEx(domain, &eventAttrib);
66  }
67 
68  __attribute__((unused)) nvtxRangeId_t nvtxDomainRangeStart(nvtxDomainHandle_t domain, const char* message) {
69  nvtxEventAttributes_t eventAttrib = {};
70  eventAttrib.version = NVTX_VERSION;
71  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
72  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
73  eventAttrib.message.ascii = message;
74  return nvtxDomainRangeStartEx(domain, &eventAttrib);
75  }
76 
77  nvtxRangeId_t nvtxDomainRangeStartColor(nvtxDomainHandle_t domain, const char* message, uint32_t color) {
78  nvtxEventAttributes_t eventAttrib = {};
79  eventAttrib.version = NVTX_VERSION;
80  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
81  eventAttrib.colorType = NVTX_COLOR_ARGB;
82  eventAttrib.color = color;
83  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
84  eventAttrib.message.ascii = message;
85  return nvtxDomainRangeStartEx(domain, &eventAttrib);
86  }
87 
88  void nvtxDomainMark(nvtxDomainHandle_t domain, const char* message) {
89  nvtxEventAttributes_t eventAttrib = {};
90  eventAttrib.version = NVTX_VERSION;
91  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
92  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
93  eventAttrib.message.ascii = message;
94  nvtxDomainMarkEx(domain, &eventAttrib);
95  }
96 
97  __attribute__((unused)) void nvtxDomainMarkColor(nvtxDomainHandle_t domain, const char* message, uint32_t color) {
98  nvtxEventAttributes_t eventAttrib = {};
99  eventAttrib.version = NVTX_VERSION;
100  eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
101  eventAttrib.colorType = NVTX_COLOR_ARGB;
102  eventAttrib.color = color;
103  eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
104  eventAttrib.message.ascii = message;
105  nvtxDomainMarkEx(domain, &eventAttrib);
106  }
107 
108  enum {
109  nvtxBlack = 0x00000000,
110  nvtxRed = 0x00ff0000,
111  nvtxDarkGreen = 0x00009900,
112  nvtxGreen = 0x0000ff00,
113  nvtxLightGreen = 0x00ccffcc,
114  nvtxBlue = 0x000000ff,
115  nvtxAmber = 0x00ffbf00,
116  nvtxLightAmber = 0x00fff2cc,
117  nvtxWhite = 0x00ffffff
118  };
119 
120  constexpr nvtxRangeId_t nvtxInvalidRangeId = 0xfffffffffffffffful;
121 } // namespace
122 
124 public:
127 
128  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
129 
130  void preallocate(edm::service::SystemBounds const&);
131 
132  // these signal pair are NOT guaranteed to be called by the same thread
133  void preBeginJob(edm::PathsAndConsumesOfModulesBase const&, edm::ProcessContext const&);
134  void postBeginJob();
135 
136  // there is no preEndJob() signal
137  void postEndJob();
138 
139  // these signal pair are NOT guaranteed to be called by the same thread
140  void preGlobalBeginRun(edm::GlobalContext const&);
141  void postGlobalBeginRun(edm::GlobalContext const&);
142 
143  // these signal pair are NOT guaranteed to be called by the same thread
144  void preGlobalEndRun(edm::GlobalContext const&);
145  void postGlobalEndRun(edm::GlobalContext const&);
146 
147  // these signal pair are NOT guaranteed to be called by the same thread
148  void preStreamBeginRun(edm::StreamContext const&);
149  void postStreamBeginRun(edm::StreamContext const&);
150 
151  // these signal pair are NOT guaranteed to be called by the same thread
152  void preStreamEndRun(edm::StreamContext const&);
153  void postStreamEndRun(edm::StreamContext const&);
154 
155  // these signal pair are NOT guaranteed to be called by the same thread
156  void preGlobalBeginLumi(edm::GlobalContext const&);
157  void postGlobalBeginLumi(edm::GlobalContext const&);
158 
159  // these signal pair are NOT guaranteed to be called by the same thread
160  void preGlobalEndLumi(edm::GlobalContext const&);
161  void postGlobalEndLumi(edm::GlobalContext const&);
162 
163  // these signal pair are NOT guaranteed to be called by the same thread
164  void preStreamBeginLumi(edm::StreamContext const&);
165  void postStreamBeginLumi(edm::StreamContext const&);
166 
167  // these signal pair are NOT guaranteed to be called by the same thread
168  void preStreamEndLumi(edm::StreamContext const&);
169  void postStreamEndLumi(edm::StreamContext const&);
170 
171  // these signal pair are NOT guaranteed to be called by the same thread
172  void preEvent(edm::StreamContext const&);
173  void postEvent(edm::StreamContext const&);
174 
175  // these signal pair are NOT guaranteed to be called by the same thread
176  void prePathEvent(edm::StreamContext const&, edm::PathContext const&);
177  void postPathEvent(edm::StreamContext const&, edm::PathContext const&, edm::HLTPathStatus const&);
178 
179  // these signal pair are NOT guaranteed to be called by the same thread
180  void preModuleEventPrefetching(edm::StreamContext const&, edm::ModuleCallingContext const&);
181  void postModuleEventPrefetching(edm::StreamContext const&, edm::ModuleCallingContext const&);
182 
183  // these signal pair are guaranteed to be called by the same thread
184  void preOpenFile(std::string const&);
185  void postOpenFile(std::string const&);
186 
187  // these signal pair are guaranteed to be called by the same thread
188  void preCloseFile(std::string const&);
189  void postCloseFile(std::string const&);
190 
191  // these signal pair are guaranteed to be called by the same thread
192  void preSourceConstruction(edm::ModuleDescription const&);
193  void postSourceConstruction(edm::ModuleDescription const&);
194 
195  // these signal pair are guaranteed to be called by the same thread
196  void preSourceRun(edm::RunIndex);
197  void postSourceRun(edm::RunIndex);
198 
199  // these signal pair are guaranteed to be called by the same thread
200  void preSourceLumi(edm::LuminosityBlockIndex);
201  void postSourceLumi(edm::LuminosityBlockIndex);
202 
203  // these signal pair are guaranteed to be called by the same thread
204  void preSourceEvent(edm::StreamID);
205  void postSourceEvent(edm::StreamID);
206 
207  // these signal pair are guaranteed to be called by the same thread
208  void preModuleConstruction(edm::ModuleDescription const&);
209  void postModuleConstruction(edm::ModuleDescription const&);
210 
211  // these signal pair are guaranteed to be called by the same thread
212  void preModuleDestruction(edm::ModuleDescription const&);
213  void postModuleDestruction(edm::ModuleDescription const&);
214 
215  // these signal pair are guaranteed to be called by the same thread
216  void preModuleBeginJob(edm::ModuleDescription const&);
217  void postModuleBeginJob(edm::ModuleDescription const&);
218 
219  // these signal pair are guaranteed to be called by the same thread
220  void preModuleEndJob(edm::ModuleDescription const&);
221  void postModuleEndJob(edm::ModuleDescription const&);
222 
223  // these signal pair are guaranteed to be called by the same thread
224  void preModuleBeginStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
225  void postModuleBeginStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
226 
227  // these signal pair are guaranteed to be called by the same thread
228  void preModuleEndStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
229  void postModuleEndStream(edm::StreamContext const&, edm::ModuleCallingContext const&);
230 
231  // these signal pair are guaranteed to be called by the same thread
232  void preModuleGlobalBeginRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
233  void postModuleGlobalBeginRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
234 
235  // these signal pair are guaranteed to be called by the same thread
236  void preModuleGlobalEndRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
237  void postModuleGlobalEndRun(edm::GlobalContext const&, edm::ModuleCallingContext const&);
238 
239  // these signal pair are guaranteed to be called by the same thread
240  void preModuleGlobalBeginLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
241  void postModuleGlobalBeginLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
242 
243  // these signal pair are guaranteed to be called by the same thread
244  void preModuleGlobalEndLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
245  void postModuleGlobalEndLumi(edm::GlobalContext const&, edm::ModuleCallingContext const&);
246 
247  // these signal pair are guaranteed to be called by the same thread
248  void preModuleStreamBeginRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
249  void postModuleStreamBeginRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
250 
251  // these signal pair are guaranteed to be called by the same thread
252  void preModuleStreamEndRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
253  void postModuleStreamEndRun(edm::StreamContext const&, edm::ModuleCallingContext const&);
254 
255  // these signal pair are guaranteed to be called by the same thread
256  void preModuleStreamBeginLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
257  void postModuleStreamBeginLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
258 
259  // these signal pair are guaranteed to be called by the same thread
260  void preModuleStreamEndLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
261  void postModuleStreamEndLumi(edm::StreamContext const&, edm::ModuleCallingContext const&);
262 
263  // these signal pair are guaranteed to be called by the same thread
264  void preModuleEventAcquire(edm::StreamContext const&, edm::ModuleCallingContext const&);
265  void postModuleEventAcquire(edm::StreamContext const&, edm::ModuleCallingContext const&);
266 
267  // these signal pair are guaranteed to be called by the same thread
268  void preModuleEvent(edm::StreamContext const&, edm::ModuleCallingContext const&);
269  void postModuleEvent(edm::StreamContext const&, edm::ModuleCallingContext const&);
270 
271  // these signal pair are guaranteed to be called by the same thread
272  void preModuleEventDelayedGet(edm::StreamContext const&, edm::ModuleCallingContext const&);
273  void postModuleEventDelayedGet(edm::StreamContext const&, edm::ModuleCallingContext const&);
274 
275  // these signal pair are guaranteed to be called by the same thread
276  void preEventReadFromSource(edm::StreamContext const&, edm::ModuleCallingContext const&);
277  void postEventReadFromSource(edm::StreamContext const&, edm::ModuleCallingContext const&);
278 
279 private:
280  bool highlight(std::string const& label) const {
281  return (std::binary_search(highlightModules_.begin(), highlightModules_.end(), label));
282  }
283 
284  uint32_t labelColor(std::string const& label) const { return highlight(label) ? nvtxAmber : nvtxGreen; }
285 
286  uint32_t labelColorLight(std::string const& label) const {
287  return highlight(label) ? nvtxLightAmber : nvtxLightGreen;
288  }
289 
290  std::vector<std::string> highlightModules_;
292  const bool skipFirstEvent_;
293 
294  std::atomic<bool> globalFirstEventDone_ = false;
295  std::vector<std::atomic<bool>> streamFirstEventDone_;
296  std::vector<nvtxRangeId_t> event_; // per-stream event ranges
297  std::vector<std::vector<nvtxRangeId_t>> stream_modules_; // per-stream, per-module ranges
298  // use a tbb::concurrent_vector rather than an std::vector because its final size is not known
299  tbb::concurrent_vector<nvtxRangeId_t> global_modules_; // global per-module events
300 
301  nvtxDomainHandle_t global_domain_; // NVTX domain for global EDM transitions
302  std::vector<nvtxDomainHandle_t> stream_domain_; // NVTX domains for per-EDM-stream transitions
303 };
304 
306  : highlightModules_(config.getUntrackedParameter<std::vector<std::string>>("highlightModules")),
307  showModulePrefetching_(config.getUntrackedParameter<bool>("showModulePrefetching")),
308  skipFirstEvent_(config.getUntrackedParameter<bool>("skipFirstEvent")) {
309  // make sure that CUDA is initialised, and that the CUDAService destructor is called after this service's destructor
310  edm::Service<CUDAService> cudaService;
311 
312  std::sort(highlightModules_.begin(), highlightModules_.end());
313 
314  // create the NVTX domain for global EDM transitions
315  global_domain_ = nvtxDomainCreate("EDM Global");
316 
317  // enables profile collection; if profiling is already enabled it has no effect
318  if (not skipFirstEvent_) {
319  cudaProfilerStart();
320  }
321 
323 
324  // these signal pair are NOT guaranteed to be called by the same thread
327 
328  // there is no preEndJob() signal
330 
331  // these signal pair are NOT guaranteed to be called by the same thread
334 
335  // these signal pair are NOT guaranteed to be called by the same thread
338 
339  // these signal pair are NOT guaranteed to be called by the same thread
342 
343  // these signal pair are NOT guaranteed to be called by the same thread
346 
347  // these signal pair are NOT guaranteed to be called by the same thread
350 
351  // these signal pair are NOT guaranteed to be called by the same thread
354 
355  // these signal pair are NOT guaranteed to be called by the same thread
358 
359  // these signal pair are NOT guaranteed to be called by the same thread
362 
363  // these signal pair are NOT guaranteed to be called by the same thread
366 
367  // these signal pair are NOT guaranteed to be called by the same thread
370 
372  // these signal pair are NOT guaranteed to be called by the same thread
375  }
376 
377  // these signal pair are guaranteed to be called by the same thread
380 
381  // these signal pair are guaranteed to be called by the same thread
384 
385  // these signal pair are guaranteed to be called by the same thread
388 
389  // these signal pair are guaranteed to be called by the same thread
392 
393  // these signal pair are guaranteed to be called by the same thread
396 
397  // these signal pair are guaranteed to be called by the same thread
400 
401  // these signal pair are guaranteed to be called by the same thread
404 
405  // these signal pair are guaranteed to be called by the same thread
408 
409  // these signal pair are guaranteed to be called by the same thread
412 
413  // these signal pair are guaranteed to be called by the same thread
416 
417  // these signal pair are guaranteed to be called by the same thread
420 
421  // these signal pair are guaranteed to be called by the same thread
424 
425  // these signal pair are guaranteed to be called by the same thread
428 
429  // these signal pair are guaranteed to be called by the same thread
432 
433  // these signal pair are guaranteed to be called by the same thread
436 
437  // these signal pair are guaranteed to be called by the same thread
440 
441  // these signal pair are guaranteed to be called by the same thread
444 
445  // these signal pair are guaranteed to be called by the same thread
448 
449  // these signal pair are guaranteed to be called by the same thread
452 
453  // these signal pair are guaranteed to be called by the same thread
456 
457  // these signal pair are guaranteed to be called by the same thread
460 
461  // these signal pair are guaranteed to be called by the same thread
464 
465  // these signal pair are guaranteed to be called by the same thread
468 
469  // these signal pair are guaranteed to be called by the same thread
472 }
473 
475  for (unsigned int sid = 0; sid < stream_domain_.size(); ++sid) {
476  nvtxDomainDestroy(stream_domain_[sid]);
477  }
478  nvtxDomainDestroy(global_domain_);
479  cudaProfilerStop();
480 }
481 
484  desc.addUntracked<std::vector<std::string>>("highlightModules", {})->setComment("");
485  desc.addUntracked<bool>("showModulePrefetching", false)
486  ->setComment("Show the stack of dependencies that requested to run a module.");
487  desc.addUntracked<bool>("skipFirstEvent", false)
488  ->setComment(
489  "Start profiling after the first event has completed.\nWith multiple streams, ignore transitions belonging "
490  "to events started in parallel to the first event.\nRequires running nvprof with the '--profile-from-start "
491  "off' option.");
492  descriptions.add("NVProfilerService", desc);
493  descriptions.setComment(R"(This Service provides CMSSW-aware annotations to nvprof/nvvm. Notes on nvprof options: - the option '--profile-from-start off' should be used if skipFirstEvent is True. - the option '--cpu-profiling on' currently results in cmsRun being stuck at the beginning of the job. - the option '--cpu-thread-tracing on' is not compatible with jemalloc, and should only be used with cmsRunGlibC.)");
494 }
495 
497  std::stringstream out;
498  out << "preallocate: " << bounds.maxNumberOfConcurrentRuns() << " concurrent runs, "
499  << bounds.maxNumberOfConcurrentLuminosityBlocks() << " luminosity sections, " << bounds.maxNumberOfStreams()
500  << " streams\nrunning on" << bounds.maxNumberOfThreads() << " threads";
501  nvtxDomainMark(global_domain_, out.str().c_str());
502 
503  auto concurrentStreams = bounds.maxNumberOfStreams();
504  // create the NVTX domains for per-EDM-stream transitions
505  stream_domain_.resize(concurrentStreams);
506  for (unsigned int sid = 0; sid < concurrentStreams; ++sid) {
507  stream_domain_[sid] = nvtxDomainCreate(fmt::sprintf("EDM Stream %d", sid).c_str());
508  }
509 
510  event_.resize(concurrentStreams);
511  stream_modules_.resize(concurrentStreams);
512  if (skipFirstEvent_) {
513  globalFirstEventDone_ = false;
514  std::vector<std::atomic<bool>> tmp(concurrentStreams);
515  for (auto& element : tmp)
516  std::atomic_init(&element, false);
518  }
519 }
520 
522  edm::ProcessContext const& pc) {
523  nvtxDomainMark(global_domain_, "preBeginJob");
524 
525  // FIXME this probably works only in the absence of subprocesses
526  // size() + 1 because pathsAndConsumes.allModules() does not include the source
527  unsigned int modules = pathsAndConsumes.allModules().size() + 1;
528  global_modules_.resize(modules, nvtxInvalidRangeId);
529  for (unsigned int sid = 0; sid < stream_modules_.size(); ++sid) {
530  stream_modules_[sid].resize(modules, nvtxInvalidRangeId);
531  }
532 }
533 
536  nvtxDomainMark(global_domain_, "postBeginJob");
537  }
538 }
542  nvtxDomainMark(global_domain_, "postEndJob");
543  }
544 }
548  nvtxDomainRangePush(stream_domain_[sid], "source");
549  }
550 }
554  nvtxDomainRangePop(stream_domain_[sid]);
555  }
556 }
560  nvtxDomainRangePush(global_domain_, "source lumi");
561  }
562 }
566  nvtxDomainRangePop(global_domain_);
567  }
568 }
572  nvtxDomainRangePush(global_domain_, "source run");
573  }
574 }
578  nvtxDomainRangePop(global_domain_);
579  }
580 }
584  nvtxDomainRangePush(global_domain_, ("open file "s + lfn).c_str());
585  }
586 }
590  nvtxDomainRangePop(global_domain_);
591  }
592 }
596  nvtxDomainRangePush(global_domain_, ("close file "s + lfn).c_str());
597  }
598 }
602  nvtxDomainRangePop(global_domain_);
603  }
604 }
607  auto sid = sc.streamID();
609  auto mid = mcc.moduleDescription()->id();
610  auto const& label = mcc.moduleDescription()->moduleLabel();
611  auto const& msg = label + " begin stream";
612  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
613  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
614  }
615 }
616 
618  auto sid = sc.streamID();
620  auto mid = mcc.moduleDescription()->id();
621  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
622  stream_modules_[sid][mid] = nvtxInvalidRangeId;
623  }
624 }
625 
627  auto sid = sc.streamID();
629  auto mid = mcc.moduleDescription()->id();
630  auto const& label = mcc.moduleDescription()->moduleLabel();
631  auto const& msg = label + " end stream";
632  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
633  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
634  }
635 }
636 
638  auto sid = sc.streamID();
640  auto mid = mcc.moduleDescription()->id();
641  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
642  stream_modules_[sid][mid] = nvtxInvalidRangeId;
643  }
644 }
645 
648  nvtxDomainRangePush(global_domain_, "global begin run");
649  }
650 }
654  nvtxDomainRangePop(global_domain_);
655  }
656 }
660  nvtxDomainRangePush(global_domain_, "global end run");
661  }
662 }
666  nvtxDomainRangePop(global_domain_);
667  }
668 }
671  auto sid = sc.streamID();
673  nvtxDomainRangePush(stream_domain_[sid], "stream begin run");
674  }
675 }
676 
678  auto sid = sc.streamID();
680  nvtxDomainRangePop(stream_domain_[sid]);
681  }
682 }
683 
685  auto sid = sc.streamID();
687  nvtxDomainRangePush(stream_domain_[sid], "stream end run");
688  }
689 }
690 
692  auto sid = sc.streamID();
694  nvtxDomainRangePop(stream_domain_[sid]);
695  }
696 }
697 
700  nvtxDomainRangePush(global_domain_, "global begin lumi");
701  }
702 }
706  nvtxDomainRangePop(global_domain_);
707  }
708 }
712  nvtxDomainRangePush(global_domain_, "global end lumi");
713  }
714 }
718  nvtxDomainRangePop(global_domain_);
719  }
720 }
723  auto sid = sc.streamID();
725  nvtxDomainRangePush(stream_domain_[sid], "stream begin lumi");
726  }
727 }
728 
730  auto sid = sc.streamID();
732  nvtxDomainRangePop(stream_domain_[sid]);
733  }
734 }
735 
737  auto sid = sc.streamID();
738  nvtxDomainRangePush(stream_domain_[sid], "stream end lumi");
739 }
740 
742  auto sid = sc.streamID();
744  nvtxDomainRangePop(stream_domain_[sid]);
745  }
746 }
747 
749  auto sid = sc.streamID();
751  event_[sid] = nvtxDomainRangeStartColor(stream_domain_[sid], "event", nvtxDarkGreen);
752  }
753 }
754 
756  auto sid = sc.streamID();
758  nvtxDomainRangeEnd(stream_domain_[sid], event_[sid]);
759  event_[sid] = nvtxInvalidRangeId;
760  } else {
761  streamFirstEventDone_[sid] = true;
762  auto identity = [](bool x) { return x; };
763  if (std::all_of(streamFirstEventDone_.begin(), streamFirstEventDone_.end(), identity)) {
764  bool expected = false;
765  if (globalFirstEventDone_.compare_exchange_strong(expected, true))
766  cudaProfilerStart();
767  }
768  }
769 }
770 
772  auto sid = sc.streamID();
774  nvtxDomainMark(global_domain_, ("before path "s + pc.pathName()).c_str());
775  }
776 }
777 
779  edm::PathContext const& pc,
780  edm::HLTPathStatus const& hlts) {
781  auto sid = sc.streamID();
783  nvtxDomainMark(global_domain_, ("after path "s + pc.pathName()).c_str());
784  }
785 }
786 
788  auto sid = sc.streamID();
790  auto mid = mcc.moduleDescription()->id();
791  auto const& label = mcc.moduleDescription()->moduleLabel();
792  auto const& msg = label + " prefetching";
793  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
794  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColorLight(label));
795  }
796 }
797 
799  auto sid = sc.streamID();
801  auto mid = mcc.moduleDescription()->id();
802  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
803  stream_modules_[sid][mid] = nvtxInvalidRangeId;
804  }
805 }
806 
808  if (not skipFirstEvent_) {
809  auto mid = desc.id();
810  global_modules_.grow_to_at_least(mid + 1);
811  auto const& label = desc.moduleLabel();
812  auto const& msg = label + " construction";
813  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
814  }
815 }
816 
818  if (not skipFirstEvent_) {
819  auto mid = desc.id();
820  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
821  global_modules_[mid] = nvtxInvalidRangeId;
822  }
823 }
824 
826  if (not skipFirstEvent_) {
827  auto mid = desc.id();
828  global_modules_.grow_to_at_least(mid + 1);
829  auto const& label = desc.moduleLabel();
830  auto const& msg = label + " destruction";
831  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
832  }
833 }
834 
836  if (not skipFirstEvent_) {
837  auto mid = desc.id();
838  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
839  global_modules_[mid] = nvtxInvalidRangeId;
840  }
841 }
842 
844  if (not skipFirstEvent_) {
845  auto mid = desc.id();
846  auto const& label = desc.moduleLabel();
847  auto const& msg = label + " begin job";
848  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
849  }
850 }
851 
853  if (not skipFirstEvent_) {
854  auto mid = desc.id();
855  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
856  global_modules_[mid] = nvtxInvalidRangeId;
857  }
858 }
859 
861  if (not skipFirstEvent_ or globalFirstEventDone_) {
862  auto mid = desc.id();
863  auto const& label = desc.moduleLabel();
864  auto const& msg = label + " end job";
865  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
866  }
867 }
868 
870  if (not skipFirstEvent_ or globalFirstEventDone_) {
871  auto mid = desc.id();
872  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
873  global_modules_[mid] = nvtxInvalidRangeId;
874  }
875 }
876 
878  auto sid = sc.streamID();
879  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
880  auto mid = mcc.moduleDescription()->id();
881  auto const& label = mcc.moduleDescription()->moduleLabel();
882  auto const& msg = label + " acquire";
883  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
884  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
885  }
886 }
887 
889  auto sid = sc.streamID();
890  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
891  auto mid = mcc.moduleDescription()->id();
892  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
893  stream_modules_[sid][mid] = nvtxInvalidRangeId;
894  }
895 }
896 
898  auto sid = sc.streamID();
899  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
900  auto mid = mcc.moduleDescription()->id();
901  auto const& label = mcc.moduleDescription()->moduleLabel();
902  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
903  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], label.c_str(), labelColor(label));
904  }
905 }
906 
908  auto sid = sc.streamID();
909  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
910  auto mid = mcc.moduleDescription()->id();
911  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
912  stream_modules_[sid][mid] = nvtxInvalidRangeId;
913  }
914 }
915 
917  /* FIXME
918  auto sid = sc.streamID();
919  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
920  auto mid = mcc.moduleDescription()->id();
921  auto const & label = mcc.moduleDescription()->moduleLabel();
922  auto const & msg = label + " delayed get";
923  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
924  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], label.c_str(), labelColorLight(label));
925  }
926  */
927 }
928 
930  /* FIXME
931  auto sid = sc.streamID();
932  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
933  auto mid = mcc.moduleDescription()->id();
934  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
935  stream_modules_[sid][mid] = nvtxInvalidRangeId;
936  }
937  */
938 }
939 
941  /* FIXME
942  auto sid = sc.streamID();
943  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
944  auto mid = mcc.moduleDescription()->id();
945  auto const & label = mcc.moduleDescription()->moduleLabel();
946  auto const & msg = label + " read from source";
947  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
948  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColorLight(label));
949  }
950  */
951 }
952 
954  /* FIXME
955  auto sid = sc.streamID();
956  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
957  auto mid = mcc.moduleDescription()->id();
958  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
959  stream_modules_[sid][mid] = nvtxInvalidRangeId;
960  }
961  */
962 }
963 
965  auto sid = sc.streamID();
966  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
967  auto mid = mcc.moduleDescription()->id();
968  auto const& label = mcc.moduleDescription()->moduleLabel();
969  auto const& msg = label + " stream begin run";
970  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
971  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
972  }
973 }
974 
976  auto sid = sc.streamID();
977  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
978  auto mid = mcc.moduleDescription()->id();
979  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
980  stream_modules_[sid][mid] = nvtxInvalidRangeId;
981  }
982 }
983 
985  auto sid = sc.streamID();
986  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
987  auto mid = mcc.moduleDescription()->id();
988  auto const& label = mcc.moduleDescription()->moduleLabel();
989  auto const& msg = label + " stream end run";
990  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
991  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
992  }
993 }
994 
996  auto sid = sc.streamID();
997  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
998  auto mid = mcc.moduleDescription()->id();
999  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
1000  stream_modules_[sid][mid] = nvtxInvalidRangeId;
1001  }
1002 }
1003 
1005  auto sid = sc.streamID();
1006  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1007  auto mid = mcc.moduleDescription()->id();
1008  auto const& label = mcc.moduleDescription()->moduleLabel();
1009  auto const& msg = label + " stream begin lumi";
1010  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
1011  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
1012  }
1013 }
1014 
1016  auto sid = sc.streamID();
1017  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1018  auto mid = mcc.moduleDescription()->id();
1019  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
1020  stream_modules_[sid][mid] = nvtxInvalidRangeId;
1021  }
1022 }
1023 
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 end lumi";
1030  assert(stream_modules_[sid][mid] == nvtxInvalidRangeId);
1031  stream_modules_[sid][mid] = nvtxDomainRangeStartColor(stream_domain_[sid], msg.c_str(), labelColor(label));
1032  }
1033 }
1034 
1036  auto sid = sc.streamID();
1037  if (not skipFirstEvent_ or streamFirstEventDone_[sid]) {
1038  auto mid = mcc.moduleDescription()->id();
1039  nvtxDomainRangeEnd(stream_domain_[sid], stream_modules_[sid][mid]);
1040  stream_modules_[sid][mid] = nvtxInvalidRangeId;
1041  }
1042 }
1043 
1045  if (not skipFirstEvent_ or globalFirstEventDone_) {
1046  auto mid = mcc.moduleDescription()->id();
1047  auto const& label = mcc.moduleDescription()->moduleLabel();
1048  auto const& msg = label + " global begin run";
1049  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1050  }
1051 }
1052 
1054  if (not skipFirstEvent_ or globalFirstEventDone_) {
1055  auto mid = mcc.moduleDescription()->id();
1056  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1057  global_modules_[mid] = nvtxInvalidRangeId;
1058  }
1059 }
1060 
1062  if (not skipFirstEvent_ or globalFirstEventDone_) {
1063  auto mid = mcc.moduleDescription()->id();
1064  auto const& label = mcc.moduleDescription()->moduleLabel();
1065  auto const& msg = label + " global end run";
1066  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1067  }
1068 }
1069 
1071  if (not skipFirstEvent_ or globalFirstEventDone_) {
1072  auto mid = mcc.moduleDescription()->id();
1073  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1074  global_modules_[mid] = nvtxInvalidRangeId;
1075  }
1076 }
1077 
1079  if (not skipFirstEvent_ or globalFirstEventDone_) {
1080  auto mid = mcc.moduleDescription()->id();
1081  auto const& label = mcc.moduleDescription()->moduleLabel();
1082  auto const& msg = label + " global begin lumi";
1083  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1084  }
1085 }
1086 
1088  if (not skipFirstEvent_ or globalFirstEventDone_) {
1089  auto mid = mcc.moduleDescription()->id();
1090  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1091  global_modules_[mid] = nvtxInvalidRangeId;
1092  }
1093 }
1094 
1096  if (not skipFirstEvent_ or globalFirstEventDone_) {
1097  auto mid = mcc.moduleDescription()->id();
1098  auto const& label = mcc.moduleDescription()->moduleLabel();
1099  auto const& msg = label + " global end lumi";
1100  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1101  }
1102 }
1103 
1105  if (not skipFirstEvent_ or globalFirstEventDone_) {
1106  auto mid = mcc.moduleDescription()->id();
1107  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1108  global_modules_[mid] = nvtxInvalidRangeId;
1109  }
1110 }
1111 
1113  if (not skipFirstEvent_) {
1114  auto mid = desc.id();
1115  global_modules_.grow_to_at_least(mid + 1);
1116  auto const& label = desc.moduleLabel();
1117  auto const& msg = label + " construction";
1118  global_modules_[mid] = nvtxDomainRangeStartColor(global_domain_, msg.c_str(), labelColor(label));
1119  }
1120 }
1121 
1123  if (not skipFirstEvent_) {
1124  auto mid = desc.id();
1125  nvtxDomainRangeEnd(global_domain_, global_modules_[mid]);
1126  global_modules_[mid] = nvtxInvalidRangeId;
1127  }
1128 }
1129 
1132 
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 preModuleEventPrefetching(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preGlobalBeginRun(edm::GlobalContext const &)
void postGlobalEndRun(edm::GlobalContext const &)
void preGlobalEndLumi(edm::GlobalContext const &)
void postModuleEventDelayedGet(edm::StreamContext const &, edm::ModuleCallingContext const &)
void postModuleStreamBeginLumi(edm::StreamContext const &, edm::ModuleCallingContext const &)
void watchPrePathEvent(PrePathEvent::slot_type const &iSlot)
void watchPreallocate(Preallocate::slot_type const &iSlot)
void postModuleEvent(edm::StreamContext const &, edm::ModuleCallingContext const &)
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
void watchPreModuleEventAcquire(PreModuleEventAcquire::slot_type const &iSlot)
void watchPostEndJob(PostEndJob::slot_type const &iSlot)
void preModuleEndStream(edm::StreamContext const &, edm::ModuleCallingContext const &)
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::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
void preModuleEventAcquire(edm::StreamContext const &, edm::ModuleCallingContext const &)
void watchPostModuleEndStream(PostModuleEndStream::slot_type const &iSlot)
void watchPreModuleEvent(PreModuleEvent::slot_type const &iSlot)
void postModuleEventAcquire(edm::StreamContext const &, edm::ModuleCallingContext const &)
void watchPreModuleConstruction(PreModuleConstruction::slot_type const &iSlot)
void watchPreGlobalEndLumi(PreGlobalEndLumi::slot_type const &iSlot)
void watchPostEvent(PostEvent::slot_type const &iSlot)
void preStreamBeginLumi(edm::StreamContext const &)
void preModuleEvent(edm::StreamContext const &, edm::ModuleCallingContext const &)
void watchPreStreamEndRun(PreStreamEndRun::slot_type const &iSlot)
void watchPreSourceConstruction(PreSourceConstruction::slot_type const &iSlot)
void preSourceRun(edm::RunIndex)
void watchPostSourceConstruction(PostSourceConstruction::slot_type const &iSlot)
void watchPostStreamEndLumi(PostStreamEndLumi::slot_type const &iSlot)
void watchPreGlobalBeginLumi(PreGlobalBeginLumi::slot_type const &iSlot)
void preModuleStreamBeginLumi(edm::StreamContext const &, edm::ModuleCallingContext const &)
void postSourceConstruction(edm::ModuleDescription const &)
void preModuleStreamBeginRun(edm::StreamContext const &, edm::ModuleCallingContext const &)
void watchPreEventReadFromSource(PreEventReadFromSource::slot_type const &iSlot)
void watchPreModuleDestruction(PreModuleDestruction::slot_type const &iSlot)
void watchPostPathEvent(PostPathEvent::slot_type const &iSlot)
void watchPostModuleEvent(PostModuleEvent::slot_type const &iSlot)
void watchPostModuleGlobalBeginLumi(PostModuleGlobalBeginLumi::slot_type const &iSlot)
void watchPostModuleStreamEndLumi(PostModuleStreamEndLumi::slot_type const &iSlot)
void watchPostGlobalBeginLumi(PostGlobalBeginLumi::slot_type const &iSlot)
void watchPostModuleStreamBeginRun(PostModuleStreamBeginRun::slot_type const &iSlot)
void watchPostSourceEvent(PostSourceEvent::slot_type const &iSlot)
void postStreamEndRun(edm::StreamContext const &)
std::vector< std::vector< nvtxRangeId_t > > stream_modules_
void postModuleEndJob(edm::ModuleDescription const &)
void postGlobalEndLumi(edm::GlobalContext const &)
void preModuleEndJob(edm::ModuleDescription const &)
void preModuleGlobalBeginLumi(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void watchPreModuleBeginStream(PreModuleBeginStream::slot_type const &iSlot)
void preGlobalBeginLumi(edm::GlobalContext const &)
void postSourceLumi(edm::LuminosityBlockIndex)
assert(be >=bs)
void watchPreStreamEndLumi(PreStreamEndLumi::slot_type const &iSlot)
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 postCloseFile(std::string 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 postModuleDestruction(edm::ModuleDescription const &)
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)
float __attribute__((vector_size(8))) cms_float32x2_t
Definition: ExtVec.h:12
void postModuleGlobalEndRun(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void watchPreModuleEventDelayedGet(PreModuleEventDelayedGet::slot_type const &iSlot)
def move
Definition: eostools.py:511
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 preCloseFile(std::string const &)
void postPathEvent(edm::StreamContext const &, edm::PathContext const &, edm::HLTPathStatus const &)
void postStreamBeginLumi(edm::StreamContext const &)
T identity(T t)
void preStreamEndLumi(edm::StreamContext const &)
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 &)
void watchPreModuleBeginJob(PreModuleBeginJob::slot_type const &iSlot)
void postGlobalBeginLumi(edm::GlobalContext const &)
void watchPostStreamEndRun(PostStreamEndRun::slot_type const &iSlot)
tbb::concurrent_vector< nvtxRangeId_t > global_modules_
std::vector< nvtxRangeId_t > event_
void postEventReadFromSource(edm::StreamContext const &, edm::ModuleCallingContext const &)
std::vector< nvtxDomainHandle_t > stream_domain_
void postModuleBeginStream(edm::StreamContext const &, edm::ModuleCallingContext const &)
void watchPostModuleStreamEndRun(PostModuleStreamEndRun::slot_type const &iSlot)
void watchPreModuleGlobalBeginLumi(PreModuleGlobalBeginLumi::slot_type const &iSlot)
void postModuleGlobalBeginRun(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void preModuleBeginStream(edm::StreamContext const &, edm::ModuleCallingContext const &)
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)
nvtxDomainHandle_t global_domain_
void preOpenFile(std::string const &)
#define DEFINE_FWK_SERVICE(type)
Definition: ServiceMaker.h:96
void setComment(std::string const &value)
void watchPostModuleBeginStream(PostModuleBeginStream::slot_type const &iSlot)
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 &)
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)
tuple config
parse the configuration file
void postSourceRun(edm::RunIndex)
void watchPreStreamBeginRun(PreStreamBeginRun::slot_type const &iSlot)
void watchPostModuleDestruction(PostModuleDestruction::slot_type const &iSlot)
void postOpenFile(std::string const &)
void preallocate(edm::service::SystemBounds const &)
void watchPreModuleStreamEndRun(PreModuleStreamEndRun::slot_type const &iSlot)
void postModuleEndStream(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preSourceLumi(edm::LuminosityBlockIndex)
void watchPostModuleBeginJob(PostModuleBeginJob::slot_type const &iSlot)
void watchPostEventReadFromSource(PostEventReadFromSource::slot_type const &iSlot)
void watchPostModuleGlobalBeginRun(PostModuleGlobalBeginRun::slot_type const &iSlot)
const bool showModulePrefetching_
void preEventReadFromSource(edm::StreamContext const &, edm::ModuleCallingContext const &)
unsigned int maxNumberOfConcurrentRuns() const
Definition: SystemBounds.h:36
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 &)
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_
void preModuleDestruction(edm::ModuleDescription const &)
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