CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes
edm::SystemTimeKeeper Class Reference

#include <SystemTimeKeeper.h>

Classes

struct  ModuleInPathTiming
 
struct  ModuleTiming
 
struct  PathTiming
 

Public Member Functions

void fillTriggerTimingReport (TriggerTimingReport &rep) const
 
SystemTimeKeeperoperator= (const SystemTimeKeeper &)=delete
 
void pauseModuleEvent (StreamContext const &, ModuleCallingContext const &)
 
void removeModuleIfExists (ModuleDescription const &module)
 
void restartModuleEvent (StreamContext const &, ModuleCallingContext const &)
 
void startEvent (StreamID)
 
void startModuleEvent (StreamContext const &, ModuleCallingContext const &)
 
void startPath (StreamContext const &, PathContext const &)
 
void startProcessingLoop ()
 
void stopEvent (StreamContext const &)
 
void stopModuleEvent (StreamContext const &, ModuleCallingContext const &)
 
void stopPath (StreamContext const &, PathContext const &, HLTPathStatus const &)
 
void stopProcessingLoop ()
 
 SystemTimeKeeper (const SystemTimeKeeper &)=delete
 
 SystemTimeKeeper (unsigned int iNumStreams, std::vector< const ModuleDescription * > const &iModules, service::TriggerNamesService const &iNameService, ProcessContext const *iProcessContext)
 

Private Member Functions

bool checkBounds (unsigned int id) const
 
PathTimingpathTiming (StreamContext const &, PathContext const &)
 

Private Attributes

unsigned int m_endPathOffset
 
unsigned int m_minModuleID
 
std::vector< const ModuleDescription * > m_modules
 
std::vector< std::vector< std::string > > m_modulesOnPaths
 
std::atomic< unsigned int > m_numberOfEvents
 
std::vector< std::string > m_pathNames
 
ProcessContext const * m_processContext
 
CPUTimer m_processingLoopTimer
 
std::vector< WallclockTimerm_streamEventTimer
 
std::vector< std::vector< ModuleTiming > > m_streamModuleTiming
 
std::vector< std::vector< PathTiming > > m_streamPathTiming
 

Detailed Description

Definition at line 46 of file SystemTimeKeeper.h.

Constructor & Destructor Documentation

◆ SystemTimeKeeper() [1/2]

SystemTimeKeeper::SystemTimeKeeper ( unsigned int  iNumStreams,
std::vector< const ModuleDescription * > const &  iModules,
service::TriggerNamesService const &  iNameService,
ProcessContext const *  iProcessContext 
)

Definition at line 47 of file SystemTimeKeeper.cc.

51  : m_streamEventTimer(iNumStreams),
52  m_streamPathTiming(iNumStreams),
53  m_modules(iModules),
54  m_processContext(iProcessContext),
55  m_minModuleID(0),
56  m_numberOfEvents(0) {
57  std::sort(m_modules.begin(), m_modules.end(), lessModuleDescription);
58  if (not m_modules.empty()) {
59  m_minModuleID = m_modules.front()->id();
60  unsigned int numModuleSlots = m_modules.back()->id() - m_minModuleID + 1;
61  m_streamModuleTiming.resize(iNumStreams);
62  for (auto& stream : m_streamModuleTiming) {
63  stream.resize(numModuleSlots);
64  }
65  }
66 
67  std::vector<unsigned int> numModulesInPath;
68  std::vector<unsigned int> numModulesInEndPath;
69 
70  const unsigned int numPaths = iNamesService.getTrigPaths().size();
71  const unsigned int numEndPaths = iNamesService.getEndPaths().size();
72  m_pathNames.reserve(numPaths + numEndPaths);
73  std::copy(iNamesService.getTrigPaths().begin(), iNamesService.getTrigPaths().end(), std::back_inserter(m_pathNames));
74  std::copy(iNamesService.getEndPaths().begin(), iNamesService.getEndPaths().end(), std::back_inserter(m_pathNames));
75 
76  numModulesInPath.reserve(numPaths);
77  numModulesInEndPath.reserve(numEndPaths);
78 
79  m_modulesOnPaths.reserve(numPaths + numEndPaths);
80 
81  for (unsigned int i = 0; i < numPaths; ++i) {
82  numModulesInPath.push_back(iNamesService.getTrigPathModules(i).size());
83  m_modulesOnPaths.push_back(iNamesService.getTrigPathModules(i));
84  }
85  for (unsigned int i = 0; i < numEndPaths; ++i) {
86  numModulesInEndPath.push_back(iNamesService.getEndPathModules(i).size());
87  m_modulesOnPaths.push_back(iNamesService.getEndPathModules(i));
88  }
89 
90  m_endPathOffset = numModulesInPath.size();
91 
92  for (auto& stream : m_streamPathTiming) {
93  unsigned int index = 0;
94  stream.resize(numModulesInPath.size() + numModulesInEndPath.size());
95  for (unsigned int numMods : numModulesInPath) {
96  stream[index].m_moduleTiming.resize(numMods);
97  ++index;
98  }
99  for (unsigned int numMods : numModulesInEndPath) {
100  stream[index].m_moduleTiming.resize(numMods);
101  ++index;
102  }
103  }
104 }

References filterCSVwithJSON::copy, edm::service::TriggerNamesService::getEndPathModules(), edm::service::TriggerNamesService::getEndPaths(), edm::service::TriggerNamesService::getTrigPathModules(), edm::service::TriggerNamesService::getTrigPaths(), mps_fire::i, m_endPathOffset, m_minModuleID, m_modules, m_modulesOnPaths, m_pathNames, m_streamModuleTiming, m_streamPathTiming, jetUpdater_cfi::sort, and cms::cuda::stream.

◆ SystemTimeKeeper() [2/2]

edm::SystemTimeKeeper::SystemTimeKeeper ( const SystemTimeKeeper )
delete

Member Function Documentation

◆ checkBounds()

bool SystemTimeKeeper::checkBounds ( unsigned int  id) const
inlineprivate

Definition at line 132 of file SystemTimeKeeper.cc.

132  {
133  return id >= m_minModuleID and id < m_streamModuleTiming.front().size() + m_minModuleID;
134 }

References m_minModuleID, and m_streamModuleTiming.

Referenced by pauseModuleEvent(), restartModuleEvent(), startModuleEvent(), and stopModuleEvent().

◆ fillTriggerTimingReport()

void SystemTimeKeeper::fillTriggerTimingReport ( TriggerTimingReport rep) const

Definition at line 243 of file SystemTimeKeeper.cc.

243  {
244  {
245  rep.eventSummary.totalEvents = m_numberOfEvents;
246  double sumEventTime = 0.;
247  for (auto const& stream : m_streamEventTimer) {
248  sumEventTime += stream.realTime();
249  }
250  rep.eventSummary.realTime = m_processingLoopTimer.realTime();
251  rep.eventSummary.cpuTime = m_processingLoopTimer.cpuTime();
252  rep.eventSummary.sumStreamRealTime = sumEventTime;
253  }
254 
255  //Per module summary
256  {
257  auto& summary = rep.workerSummaries;
258  summary.resize(m_modules.size());
259  //Figure out how often a module was visited
260  std::map<std::string, unsigned int> visited;
261  for (auto const& stream : m_streamPathTiming) {
262  unsigned int pathIndex = 0;
263  for (auto const& path : stream) {
264  unsigned int modIndex = 0;
265  for (auto const& mod : path.m_moduleTiming) {
266  visited[m_modulesOnPaths[pathIndex][modIndex]] += mod.m_timesVisited;
267  ++modIndex;
268  }
269  ++pathIndex;
270  }
271  }
272 
273  unsigned int modIndex = 0;
274  for (auto const& mod : m_modules) {
275  auto& outMod = summary[modIndex];
276  outMod.moduleLabel = mod->moduleLabel();
277  outMod.realTime = 0.;
278 
279  auto moduleId = mod->id() - m_minModuleID;
280  for (auto const& stream : m_streamModuleTiming) {
281  auto const& timing = stream[moduleId];
282  outMod.realTime += timing.m_timer.realTime();
283  outMod.timesRun += timing.m_timesRun;
284  }
285  outMod.timesVisited = visited[mod->moduleLabel()];
286  if (0 == outMod.timesVisited) {
287  outMod.timesVisited = outMod.timesRun;
288  }
289  ++modIndex;
290  }
291  }
292  sort_all(rep.workerSummaries);
293 
294  //Per path summary
295  {
299  m_pathNames,
302  rep.endPathSummaries);
303  }
304 }

References edm::CPUTimer::cpuTime(), edm::fillPathSummary(), m_endPathOffset, m_minModuleID, m_modules, m_modulesOnPaths, m_numberOfEvents, m_pathNames, m_processingLoopTimer, m_streamEventTimer, m_streamModuleTiming, m_streamPathTiming, mod(), gpuClustering::moduleId, castor_dqm_sourceclient_file_cfg::path, edm::CPUTimer::realTime(), cuy::rep, findQualityFiles::size, edm::sort_all(), cms::cuda::stream, edmLumisInFiles::summary, ecalMatacq_cfi::timing, and class-composition::visited.

◆ operator=()

SystemTimeKeeper& edm::SystemTimeKeeper::operator= ( const SystemTimeKeeper )
delete

◆ pathTiming()

SystemTimeKeeper::PathTiming & SystemTimeKeeper::pathTiming ( StreamContext const &  iStream,
PathContext const &  iPath 
)
private

Definition at line 118 of file SystemTimeKeeper.cc.

118  {
119  unsigned int offset = 0;
120  if (iPath.isEndPath()) {
122  }
123  assert(iPath.pathID() + offset < m_streamPathTiming[iStream.streamID().value()].size());
124  return m_streamPathTiming[iStream.streamID().value()][iPath.pathID() + offset];
125 }

References cms::cuda::assert(), edm::PathContext::isEndPath(), m_endPathOffset, m_streamPathTiming, hltrates_dqm_sourceclient-live_cfg::offset, edm::PathContext::pathID(), edm::StreamContext::streamID(), and edm::StreamID::value().

Referenced by pauseModuleEvent(), startPath(), stopModuleEvent(), and stopPath().

◆ pauseModuleEvent()

void SystemTimeKeeper::pauseModuleEvent ( StreamContext const &  iStream,
ModuleCallingContext const &  iModule 
)

Definition at line 185 of file SystemTimeKeeper.cc.

185  {
186  if (checkBounds(iModule.moduleDescription()->id())) {
187  auto& mod = m_streamModuleTiming[iStream.streamID().value()][iModule.moduleDescription()->id() - m_minModuleID];
188  auto times = mod.m_timer.stop();
189 
190  if (iModule.type() == ParentContext::Type::kPlaceInPath) {
191  auto place = iModule.placeInPathContext();
192 
193  auto& modTiming = pathTiming(iStream, *(place->pathContext())).m_moduleTiming[place->placeInPath()];
194  modTiming.m_realTime += times;
195  }
196  }
197 }

References checkBounds(), edm::ModuleDescription::id(), edm::ParentContext::kPlaceInPath, m_minModuleID, edm::SystemTimeKeeper::PathTiming::m_moduleTiming, m_streamModuleTiming, mod(), edm::ModuleCallingContext::moduleDescription(), pathTiming(), edm::ModuleCallingContext::placeInPathContext(), edm::StreamContext::streamID(), edm::ModuleCallingContext::type(), and edm::StreamID::value().

◆ removeModuleIfExists()

void SystemTimeKeeper::removeModuleIfExists ( ModuleDescription const &  module)

Definition at line 109 of file SystemTimeKeeper.cc.

109  {
110  // The deletion of a module is signaled to all (Sub)Processes, even
111  // though the module exists in only one of them.
112  auto found = std::lower_bound(m_modules.begin(), m_modules.end(), &module, lessModuleDescription);
113  if (*found == &module) {
114  m_modules.erase(found);
115  }
116 }

References newFWLiteAna::found, pfDeepBoostedJetPreprocessParams_cfi::lower_bound, m_modules, and callgraph::module.

◆ restartModuleEvent()

void SystemTimeKeeper::restartModuleEvent ( StreamContext const &  iStream,
ModuleCallingContext const &  iModule 
)

Definition at line 198 of file SystemTimeKeeper.cc.

198  {
199  if (checkBounds(iModule.moduleDescription()->id())) {
200  auto& mod = m_streamModuleTiming[iStream.streamID().value()][iModule.moduleDescription()->id() - m_minModuleID];
201  mod.m_timer.start();
202  }
203 }

References checkBounds(), edm::ModuleDescription::id(), m_minModuleID, m_streamModuleTiming, mod(), edm::ModuleCallingContext::moduleDescription(), edm::StreamContext::streamID(), and edm::StreamID::value().

◆ startEvent()

void SystemTimeKeeper::startEvent ( StreamID  iID)

Definition at line 136 of file SystemTimeKeeper.cc.

136  {
138  m_streamEventTimer[iID.value()].start();
139 }

References m_numberOfEvents, m_streamEventTimer, and edm::StreamID::value().

◆ startModuleEvent()

void SystemTimeKeeper::startModuleEvent ( StreamContext const &  iStream,
ModuleCallingContext const &  iModule 
)

Definition at line 165 of file SystemTimeKeeper.cc.

165  {
166  if (checkBounds(iModule.moduleDescription()->id())) {
167  auto& mod = m_streamModuleTiming[iStream.streamID().value()][iModule.moduleDescription()->id() - m_minModuleID];
168  mod.m_timer.start();
169  ++(mod.m_timesRun);
170  }
171 }

References checkBounds(), edm::ModuleDescription::id(), m_minModuleID, m_streamModuleTiming, mod(), edm::ModuleCallingContext::moduleDescription(), edm::StreamContext::streamID(), and edm::StreamID::value().

◆ startPath()

void SystemTimeKeeper::startPath ( StreamContext const &  iStream,
PathContext const &  iPath 
)

Definition at line 145 of file SystemTimeKeeper.cc.

145  {
146  if (m_processContext == iStream.processContext()) {
147  auto& timing = pathTiming(iStream, iPath);
148  timing.m_timer.start();
149  }
150 }

References m_processContext, pathTiming(), edm::StreamContext::processContext(), and ecalMatacq_cfi::timing.

◆ startProcessingLoop()

void SystemTimeKeeper::startProcessingLoop ( )

Definition at line 205 of file SystemTimeKeeper.cc.

References m_processingLoopTimer, and edm::CPUTimer::start().

◆ stopEvent()

void SystemTimeKeeper::stopEvent ( StreamContext const &  iContext)

Definition at line 141 of file SystemTimeKeeper.cc.

141  {
142  m_streamEventTimer[iContext.streamID().value()].stop();
143 }

References m_streamEventTimer, edm::StreamContext::streamID(), and edm::StreamID::value().

◆ stopModuleEvent()

void SystemTimeKeeper::stopModuleEvent ( StreamContext const &  iStream,
ModuleCallingContext const &  iModule 
)

Definition at line 172 of file SystemTimeKeeper.cc.

172  {
173  if (checkBounds(iModule.moduleDescription()->id())) {
174  auto& mod = m_streamModuleTiming[iStream.streamID().value()][iModule.moduleDescription()->id() - m_minModuleID];
175  auto times = mod.m_timer.stop();
176 
177  if (iModule.type() == ParentContext::Type::kPlaceInPath) {
178  auto place = iModule.placeInPathContext();
179 
180  auto& modTiming = pathTiming(iStream, *(place->pathContext())).m_moduleTiming[place->placeInPath()];
181  modTiming.m_realTime += times;
182  }
183  }
184 }

References checkBounds(), edm::ModuleDescription::id(), edm::ParentContext::kPlaceInPath, m_minModuleID, edm::SystemTimeKeeper::PathTiming::m_moduleTiming, m_streamModuleTiming, mod(), edm::ModuleCallingContext::moduleDescription(), pathTiming(), edm::ModuleCallingContext::placeInPathContext(), edm::StreamContext::streamID(), edm::ModuleCallingContext::type(), and edm::StreamID::value().

◆ stopPath()

void SystemTimeKeeper::stopPath ( StreamContext const &  iStream,
PathContext const &  iPath,
HLTPathStatus const &  iStatus 
)

Definition at line 152 of file SystemTimeKeeper.cc.

152  {
153  if (m_processContext == iStream.processContext()) {
154  auto& timing = pathTiming(iStream, iPath);
155  timing.m_timer.stop();
156 
157  //mark all modules up to and including the decision module as being visited
158  auto& modsOnPath = timing.m_moduleTiming;
159  for (unsigned int i = 0; i < iStatus.index() + 1; ++i) {
160  ++modsOnPath[i].m_timesVisited;
161  }
162  }
163 }

References mps_fire::i, edm::HLTPathStatus::index(), m_processContext, pathTiming(), edm::StreamContext::processContext(), and ecalMatacq_cfi::timing.

◆ stopProcessingLoop()

void SystemTimeKeeper::stopProcessingLoop ( )

Definition at line 207 of file SystemTimeKeeper.cc.

References m_processingLoopTimer, and edm::CPUTimer::stop().

Member Data Documentation

◆ m_endPathOffset

unsigned int edm::SystemTimeKeeper::m_endPathOffset
private

Definition at line 112 of file SystemTimeKeeper.h.

Referenced by fillTriggerTimingReport(), pathTiming(), and SystemTimeKeeper().

◆ m_minModuleID

unsigned int edm::SystemTimeKeeper::m_minModuleID
private

◆ m_modules

std::vector<const ModuleDescription*> edm::SystemTimeKeeper::m_modules
private

◆ m_modulesOnPaths

std::vector<std::vector<std::string> > edm::SystemTimeKeeper::m_modulesOnPaths
private

Definition at line 106 of file SystemTimeKeeper.h.

Referenced by fillTriggerTimingReport(), and SystemTimeKeeper().

◆ m_numberOfEvents

std::atomic<unsigned int> edm::SystemTimeKeeper::m_numberOfEvents
private

Definition at line 113 of file SystemTimeKeeper.h.

Referenced by fillTriggerTimingReport(), and startEvent().

◆ m_pathNames

std::vector<std::string> edm::SystemTimeKeeper::m_pathNames
private

Definition at line 105 of file SystemTimeKeeper.h.

Referenced by fillTriggerTimingReport(), and SystemTimeKeeper().

◆ m_processContext

ProcessContext const* edm::SystemTimeKeeper::m_processContext
private

Definition at line 109 of file SystemTimeKeeper.h.

Referenced by startPath(), and stopPath().

◆ m_processingLoopTimer

CPUTimer edm::SystemTimeKeeper::m_processingLoopTimer
private

◆ m_streamEventTimer

std::vector<WallclockTimer> edm::SystemTimeKeeper::m_streamEventTimer
private

Definition at line 98 of file SystemTimeKeeper.h.

Referenced by fillTriggerTimingReport(), startEvent(), and stopEvent().

◆ m_streamModuleTiming

std::vector<std::vector<ModuleTiming> > edm::SystemTimeKeeper::m_streamModuleTiming
private

◆ m_streamPathTiming

std::vector<std::vector<PathTiming> > edm::SystemTimeKeeper::m_streamPathTiming
private

Definition at line 100 of file SystemTimeKeeper.h.

Referenced by fillTriggerTimingReport(), pathTiming(), and SystemTimeKeeper().

mps_fire.i
i
Definition: mps_fire.py:428
filterCSVwithJSON.copy
copy
Definition: filterCSVwithJSON.py:36
edm::sort_all
void sort_all(RandomAccessSequence &s)
wrappers for std::sort
Definition: Algorithms.h:92
edm::SystemTimeKeeper::m_numberOfEvents
std::atomic< unsigned int > m_numberOfEvents
Definition: SystemTimeKeeper.h:113
mod
T mod(const T &a, const T &b)
Definition: ecalDccMap.h:4
edm::SystemTimeKeeper::m_pathNames
std::vector< std::string > m_pathNames
Definition: SystemTimeKeeper.h:105
edm::SystemTimeKeeper::PathTiming::m_moduleTiming
std::vector< ModuleInPathTiming > m_moduleTiming
Definition: SystemTimeKeeper.h:83
cms::cuda::stream
uint32_t const T *__restrict__ const uint32_t *__restrict__ int32_t int Histo::index_type cudaStream_t stream
Definition: HistoContainer.h:51
cms::cuda::assert
assert(be >=bs)
gpuClustering::moduleId
uint16_t *__restrict__ uint16_t const *__restrict__ uint32_t const *__restrict__ uint32_t *__restrict__ uint32_t const *__restrict__ moduleId
Definition: gpuClusterChargeCut.h:20
edm::StreamID::value
unsigned int value() const
Definition: StreamID.h:43
edm::ParentContext::Type::kPlaceInPath
newFWLiteAna.found
found
Definition: newFWLiteAna.py:118
edm::SystemTimeKeeper::m_streamModuleTiming
std::vector< std::vector< ModuleTiming > > m_streamModuleTiming
Definition: SystemTimeKeeper.h:102
edm::SystemTimeKeeper::m_processContext
ProcessContext const * m_processContext
Definition: SystemTimeKeeper.h:109
edm::CPUTimer::start
void start()
Definition: CPUTimer.cc:68
class-composition.visited
visited
Definition: class-composition.py:83
pfDeepBoostedJetPreprocessParams_cfi.lower_bound
lower_bound
Definition: pfDeepBoostedJetPreprocessParams_cfi.py:15
jetUpdater_cfi.sort
sort
Definition: jetUpdater_cfi.py:29
edm::SystemTimeKeeper::m_modules
std::vector< const ModuleDescription * > m_modules
Definition: SystemTimeKeeper.h:104
edm::SystemTimeKeeper::m_processingLoopTimer
CPUTimer m_processingLoopTimer
Definition: SystemTimeKeeper.h:108
edmLumisInFiles.summary
summary
Definition: edmLumisInFiles.py:39
cuy.rep
rep
Definition: cuy.py:1189
edm::CPUTimer::stop
Times stop()
Definition: CPUTimer.cc:87
edm::fillPathSummary
static void fillPathSummary(Path const &path, PathSummary &sum)
Definition: StreamSchedule.cc:847
callgraph.module
module
Definition: callgraph.py:61
ecalMatacq_cfi.timing
timing
Definition: ecalMatacq_cfi.py:26
edm::SystemTimeKeeper::m_streamEventTimer
std::vector< WallclockTimer > m_streamEventTimer
Definition: SystemTimeKeeper.h:98
edm::SystemTimeKeeper::pathTiming
PathTiming & pathTiming(StreamContext const &, PathContext const &)
Definition: SystemTimeKeeper.cc:118
edm::CPUTimer::cpuTime
double cpuTime() const
Definition: CPUTimer.cc:146
AlignmentPI::index
index
Definition: AlignmentPayloadInspectorHelper.h:46
edm::SystemTimeKeeper::checkBounds
bool checkBounds(unsigned int id) const
Definition: SystemTimeKeeper.cc:132
edm::SystemTimeKeeper::m_modulesOnPaths
std::vector< std::vector< std::string > > m_modulesOnPaths
Definition: SystemTimeKeeper.h:106
castor_dqm_sourceclient_file_cfg.path
path
Definition: castor_dqm_sourceclient_file_cfg.py:37
edm::SystemTimeKeeper::m_streamPathTiming
std::vector< std::vector< PathTiming > > m_streamPathTiming
Definition: SystemTimeKeeper.h:100
edm::CPUTimer::realTime
double realTime() const
Definition: CPUTimer.cc:139
edm::SystemTimeKeeper::m_endPathOffset
unsigned int m_endPathOffset
Definition: SystemTimeKeeper.h:112
hltrates_dqm_sourceclient-live_cfg.offset
offset
Definition: hltrates_dqm_sourceclient-live_cfg.py:82
edm::SystemTimeKeeper::m_minModuleID
unsigned int m_minModuleID
Definition: SystemTimeKeeper.h:111
findQualityFiles.size
size
Write out results.
Definition: findQualityFiles.py:443