The Gaudi Framework  master (37c0b60a)
ChronoEntity Class Reference

#include <GaudiKernel/ChronoEntity.h>

Collaboration diagram for ChronoEntity:

Public Member Functions

 ChronoEntity ()=default
 default constructor More...
 
IChronoSvc::ChronoStatus start ()
 start the current chrono More...
 
IChronoSvc::ChronoStatus stop ()
 stop the chrono More...
 
IChronoSvc::ChronoTime delta (IChronoSvc::ChronoType type) const
 return the last delta-time of type "type" More...
 
IChronoSvc::ChronoStatus status () const
 return the status of chrono More...
 
unsigned long nOfMeasurements () const
 number of chrono measurements More...
 
double uMinimalTime () const
 minimal measurement for user time More...
 
double kMinimalTime () const
 minimal measurement for kernel time More...
 
double eMinimalTime () const
 minimal measurement for elapsed time More...
 
double uMaximalTime () const
 maximal measurement for user time More...
 
double kMaximalTime () const
 maximal measurement for kernel time More...
 
double eMaximalTime () const
 maximal measurement for elapsed time More...
 
double uTotalTime () const
 total user time More...
 
double kTotalTime () const
 total Kernel time More...
 
double eTotalTime () const
 total Elapsed time More...
 
double totalTime () const
 total time More...
 
double kMeanTime () const
 average Kernel Time More...
 
double uMeanTime () const
 average User Time More...
 
double eMeanTime () const
 average Elapsed Time More...
 
double kRMSTime () const
 r.m.s Kernel Time More...
 
double uRMSTime () const
 r.m.s User Time More...
 
double eRMSTime () const
 r.m.s Elapsed Time More...
 
double kMeanErrorTime () const
 error in mean Kernel time More...
 
double uMeanErrorTime () const
 error in mean User time More...
 
double eMeanErrorTime () const
 error in mean Elapsed time More...
 
ChronoEntityoperator+= (const ChronoEntity &entity)
 Compound assignment operator. More...
 
std::string outputUserTime () const
 print the chrono ; More...
 
std::string outputSystemTime () const
 print the chrono ; More...
 
std::string outputElapsedTime () const
 print the chrono ; More...
 
std::string outputUserTime (std::string_view fmt, System::TimeType unit) const
 print the chrono according the format and units More...
 
std::string outputSystemTime (std::string_view fmt, System::TimeType unit) const
 print the chrono according the format and units More...
 
std::string outputElapsedTime (std::string_view fmt, System::TimeType unit) const
 print the chrono according the format and units More...
 
std::string outputTime (IChronoSvc::ChronoType typ, std::string_view fmt, System::TimeType unit) const
 print the chrono according the format and units More...
 

Protected Member Functions

std::string format (const double total, const double minimal, const double mean, const double rms, const double maximal, const unsigned long number) const
 format More...
 

Private Attributes

IChronoSvc::ChronoStatus m_status = IChronoSvc::UNKNOWN
 current status of this chrono object; More...
 
System::ProcessTime m_delta
 delta process times More...
 
System::ProcessTime m_start
 start stamp for current measurement of process times More...
 
StatEntity m_user
 the actual storage of "user" time More...
 
StatEntity m_kernel
 the actual storage of "kernel" time More...
 
StatEntity m_elapsed
 the actual storage of "elapsed" time More...
 

Static Private Attributes

static const System::TimeType TimeUnit = System::microSec
 internal unit used for the system time conversion (microseconds) More...
 

Friends

bool operator< (ChronoEntity const &lhs, ChronoEntity const &rhs)
 comparison operator More...
 

Detailed Description

a small helper class for implementation of ChronoStatSvc service, It also could be used as some local timer

Author
Vanya BELYAEV Ivan..nosp@m.Bely.nosp@m.aev@i.nosp@m.tep..nosp@m.ru
Date
December 1, 1999

Definition at line 31 of file ChronoEntity.h.

Constructor & Destructor Documentation

◆ ChronoEntity()

ChronoEntity::ChronoEntity ( )
default

default constructor

Member Function Documentation

◆ delta()

IChronoSvc::ChronoTime ChronoEntity::delta ( IChronoSvc::ChronoType  type) const
inline

return the last delta-time of type "type"

Definition at line 271 of file ChronoEntity.h.

271  {
272  const IChronoSvc::ChronoTime result = -1;
273  switch ( type ) {
274  case IChronoSvc::USER:
275  return m_delta.userTime<TimeUnit>();
276  case IChronoSvc::KERNEL:
277  return m_delta.kernelTime<TimeUnit>();
278  case IChronoSvc::ELAPSED:
279  return m_delta.elapsedTime<TimeUnit>();
280  default:
281  return result;
282  }
283  // cannot reach this point
284 }

◆ eMaximalTime()

double ChronoEntity::eMaximalTime ( ) const
inline

maximal measurement for elapsed time

Definition at line 215 of file ChronoEntity.h.

215 { return m_elapsed.flagMax(); }

◆ eMeanErrorTime()

double ChronoEntity::eMeanErrorTime ( ) const
inline

error in mean Elapsed time

Definition at line 267 of file ChronoEntity.h.

267 { return m_elapsed.flagMeanErr(); }

◆ eMeanTime()

double ChronoEntity::eMeanTime ( ) const
inline

average Elapsed Time

Definition at line 243 of file ChronoEntity.h.

243 { return m_elapsed.flagMean(); }

◆ eMinimalTime()

double ChronoEntity::eMinimalTime ( ) const
inline

minimal measurement for elapsed time

Definition at line 203 of file ChronoEntity.h.

203 { return m_elapsed.flagMin(); }

◆ eRMSTime()

double ChronoEntity::eRMSTime ( ) const
inline

r.m.s Elapsed Time

Definition at line 255 of file ChronoEntity.h.

255 { return m_elapsed.flagRMS(); }

◆ eTotalTime()

double ChronoEntity::eTotalTime ( ) const
inline

total Elapsed time

Definition at line 227 of file ChronoEntity.h.

227 { return m_elapsed.flag(); }

◆ format()

std::string ChronoEntity::format ( const double  total,
const double  minimal,
const double  mean,
const double  rms,
const double  maximal,
const unsigned long  number 
) const
protected

format

Todo:
: cache the format

Definition at line 102 of file ChronoEntity.cpp.

103  {
104 
106  constexpr auto fmt = "Tot={1:5.3g}{0:5} {3} #={2:3}";
107  constexpr auto stat_fmt = "Ave/Min/Max={1:8.3g}(+-{2:8.3g})/{3:8.3g}/{4:8.3g}{0:5}";
108 
109  static const std::array<std::tuple<int, double, std::string_view>, 9> tbl{ { { 500, microsecond, " [us]" },
110  { 500, millisecond, " [ms]" },
111  { 500, second, " [s]" },
112  { 500, minute, "[min]" },
113  { 500, hour, " [h]" },
114  { 10, day, "[day]" },
115  { 5, week, " [w]" },
116  { 20, month, "[mon]" },
117  { -1, year, " [y]" } } };
118 
119  auto i = find_if( begin( tbl ), prev( end( tbl ) ),
120  [&]( const auto& i ) { return total < std::get<0>( i ) * std::get<1>( i ); } );
121  long double unit = std::get<1>( *i );
122  std::string_view unit_name = std::get<2>( *i );
123 
124  auto stats = [&]() -> std::string {
125  if ( number > 1 ) {
126  auto i = find_if( begin( tbl ), prev( end( tbl ) ),
127  [&]( const auto& i ) { return total < std::get<0>( i ) * std::get<1>( i ); } );
128  auto unit = std::get<1>( *i );
129  std::string_view unit_name = std::get<2>( *i );
130  return fmt::format( stat_fmt, unit_name, (double)( mean / unit ), (double)( rms / unit ),
131  (double)( minimal / unit ), (double)( maximal / unit ) );
132  } else {
133  return {};
134  }
135  };
136 
137  return fmt::format( fmt, unit_name, (double)( total / unit ), number, stats() );
138 }

◆ kMaximalTime()

double ChronoEntity::kMaximalTime ( ) const
inline

maximal measurement for kernel time

Definition at line 211 of file ChronoEntity.h.

211 { return m_kernel.flagMax(); }

◆ kMeanErrorTime()

double ChronoEntity::kMeanErrorTime ( ) const
inline

error in mean Kernel time

Definition at line 259 of file ChronoEntity.h.

259 { return m_kernel.flagMeanErr(); }

◆ kMeanTime()

double ChronoEntity::kMeanTime ( ) const
inline

average Kernel Time

Definition at line 235 of file ChronoEntity.h.

235 { return m_kernel.flagMean(); }

◆ kMinimalTime()

double ChronoEntity::kMinimalTime ( ) const
inline

minimal measurement for kernel time

Definition at line 199 of file ChronoEntity.h.

199 { return m_kernel.flagMin(); }

◆ kRMSTime()

double ChronoEntity::kRMSTime ( ) const
inline

r.m.s Kernel Time

Definition at line 247 of file ChronoEntity.h.

247 { return m_kernel.flagRMS(); }

◆ kTotalTime()

double ChronoEntity::kTotalTime ( ) const
inline

total Kernel time

Definition at line 223 of file ChronoEntity.h.

223 { return m_kernel.flag(); }

◆ nOfMeasurements()

unsigned long ChronoEntity::nOfMeasurements ( ) const
inline

number of chrono measurements

Definition at line 191 of file ChronoEntity.h.

191 { return m_user.nEntries(); }

◆ operator+=()

ChronoEntity & ChronoEntity::operator+= ( const ChronoEntity entity)

Compound assignment operator.

Definition at line 142 of file ChronoEntity.cpp.

142  {
143  // System::ProcessTime type
144  m_delta += e.m_delta;
145 
146  // Summing, massaging here does not make too much sense.
147  // This is done only for final reductions
148  // Keep by convention the original one.
149  // m_start += e.m_start;
150 
151  // Tymevaluetypes type
152  m_user += e.m_user;
153  m_kernel += e.m_kernel;
154  m_elapsed += e.m_elapsed;
155 
156  return *this;
157 }

◆ outputElapsedTime() [1/2]

std::string ChronoEntity::outputElapsedTime ( ) const

print the chrono ;

Definition at line 95 of file ChronoEntity.cpp.

95  {
96  return "TimeElapsed: " +
98 }

◆ outputElapsedTime() [2/2]

std::string ChronoEntity::outputElapsedTime ( std::string_view  fmt,
System::TimeType  unit 
) const
inline

print the chrono according the format and units

Parameters
fmtthe format string
unitthe unit
Returns
the string representations
See also
boost::format

Definition at line 315 of file ChronoEntity.h.

315  {
316  return outputTime( IChronoSvc::ELAPSED, fmt, unit );
317 }

◆ outputSystemTime() [1/2]

std::string ChronoEntity::outputSystemTime ( ) const

print the chrono ;

Definition at line 89 of file ChronoEntity.cpp.

89  {
90  return "Time System : " +
92 }

◆ outputSystemTime() [2/2]

std::string ChronoEntity::outputSystemTime ( std::string_view  fmt,
System::TimeType  unit 
) const
inline

print the chrono according the format and units

Parameters
fmtthe format string
unitthe unit
Returns
the string representations
See also
boost::format

Definition at line 304 of file ChronoEntity.h.

304  {
305  return outputTime( IChronoSvc::KERNEL, fmt, unit );
306 }

◆ outputTime()

std::string ChronoEntity::outputTime ( IChronoSvc::ChronoType  typ,
std::string_view  fmt,
System::TimeType  unit 
) const

print the chrono according the format and units

The format fields are:

  1. number of entries
  2. total time (in the specified units)
  3. mean time (in the specified units)
  4. r.m.s. time (in the specified units)
  5. error in mean time (in the specified units)
  6. minimal time (in the specified units)
  7. maximal time (in the specified units)
Parameters
typthe chrono type
fmtthe format string
unitthe unit
Returns
the string representations
See also
boost::format

Definition at line 168 of file ChronoEntity.cpp.

168  {
169  boost::format _fmt( std::string{ fmt } );
170  // allow various number of arguments
171  using namespace boost::io;
172  _fmt.exceptions( all_error_bits ^ ( too_many_args_bit | too_few_args_bit ) );
173  //
174  double _unit = microsecond;
175  switch ( unit ) {
176  case System::Year:
177  _unit = year;
178  break;
179  case System::Month:
180  _unit = month;
181  break;
182  case System::Day:
183  _unit = day;
184  break;
185  case System::Hour:
186  _unit = hour;
187  break;
188  case System::Min:
189  _unit = minute;
190  break;
191  case System::Sec:
192  _unit = second;
193  break;
194  case System::milliSec:
195  _unit = millisecond;
196  break;
197  case System::microSec:
198  _unit = microsecond;
199  break;
200  case System::nanoSec:
201  _unit = nanosecond;
202  break;
203  default:
204  _unit = microsecond;
205  break;
206  }
207  //
208  const StatEntity* stat = &m_user;
209  switch ( typ ) {
210  case IChronoSvc::USER:
211  stat = &m_user;
212  break;
213  case IChronoSvc::KERNEL:
214  stat = &m_kernel;
215  break;
216  case IChronoSvc::ELAPSED:
217  stat = &m_elapsed;
218  break;
219  default:
220  stat = &m_user;
221  break;
222  }
223  //
224  _fmt % ( stat->nEntries() ) // %1 : #entries
225  % ( stat->flag() / _unit ) // %2 : total time
226  % ( stat->flagMean() / _unit ) // %3 : mean time
227  % ( stat->flagRMS() / _unit ) // %4 : RMS time
228  % ( stat->flagMeanErr() / _unit ) // %5 : error in mean time
229  % ( stat->flagMin() / _unit ) // %6 : minimal time
230  % ( stat->flagMax() / _unit ); // %7 : maximal time
231  //
232  return _fmt.str();
233 }

◆ outputUserTime() [1/2]

std::string ChronoEntity::outputUserTime ( ) const

print the chrono ;

Definition at line 82 of file ChronoEntity.cpp.

82  {
83  return "Time User : " +
85 }

◆ outputUserTime() [2/2]

std::string ChronoEntity::outputUserTime ( std::string_view  fmt,
System::TimeType  unit 
) const
inline

print the chrono according the format and units

Parameters
fmtthe format string
unitthe unit
Returns
the string representations
See also
boost::format

Definition at line 293 of file ChronoEntity.h.

293  {
294  return outputTime( IChronoSvc::USER, fmt, unit );
295 }

◆ start()

IChronoSvc::ChronoStatus ChronoEntity::start ( )

start the current chrono

Definition at line 46 of file ChronoEntity.cpp.

46  {
47  if ( IChronoSvc::RUNNING == m_status ) { return m_status; }
48  //
49  // following lines could be platform dependent!
50  //
51  // Store in object the measured times
53 
55 
56  return m_status;
57 }

◆ status()

IChronoSvc::ChronoStatus ChronoEntity::status ( ) const
inline

return the status of chrono

Definition at line 187 of file ChronoEntity.h.

187 { return m_status; }

◆ stop()

IChronoSvc::ChronoStatus ChronoEntity::stop ( )

stop the chrono

Definition at line 61 of file ChronoEntity.cpp.

61  {
62  if ( IChronoSvc::RUNNING != m_status ) { return m_status; }
63 
64  // following lines could be platform dependent!
66 
67  // update the counters:
68 
72 
73  // set new status
74 
76 
77  return m_status;
78 }

◆ totalTime()

double ChronoEntity::totalTime ( ) const
inline

total time

Definition at line 231 of file ChronoEntity.h.

231 { return uTotalTime() + kTotalTime(); }

◆ uMaximalTime()

double ChronoEntity::uMaximalTime ( ) const
inline

maximal measurement for user time

Definition at line 207 of file ChronoEntity.h.

207 { return m_user.flagMax(); }

◆ uMeanErrorTime()

double ChronoEntity::uMeanErrorTime ( ) const
inline

error in mean User time

Definition at line 263 of file ChronoEntity.h.

263 { return m_user.flagMeanErr(); }

◆ uMeanTime()

double ChronoEntity::uMeanTime ( ) const
inline

average User Time

Definition at line 239 of file ChronoEntity.h.

239 { return m_user.flagMean(); }

◆ uMinimalTime()

double ChronoEntity::uMinimalTime ( ) const
inline

minimal measurement for user time

Definition at line 195 of file ChronoEntity.h.

195 { return m_user.flagMin(); }

◆ uRMSTime()

double ChronoEntity::uRMSTime ( ) const
inline

r.m.s User Time

Definition at line 251 of file ChronoEntity.h.

251 { return m_user.flagRMS(); }

◆ uTotalTime()

double ChronoEntity::uTotalTime ( ) const
inline

total user time

Definition at line 219 of file ChronoEntity.h.

219 { return m_user.flag(); }

Friends And Related Function Documentation

◆ operator<

bool operator< ( ChronoEntity const &  lhs,
ChronoEntity const &  rhs 
)
friend

comparison operator

Definition at line 99 of file ChronoEntity.h.

99  {
100  return std::make_tuple( lhs.totalTime(), lhs.m_user, lhs.m_kernel, lhs.m_elapsed ) <
101  std::make_tuple( rhs.totalTime(), rhs.m_user, rhs.m_kernel, rhs.m_elapsed );
102  }

Member Data Documentation

◆ m_delta

System::ProcessTime ChronoEntity::m_delta
private

delta process times

Definition at line 171 of file ChronoEntity.h.

◆ m_elapsed

StatEntity ChronoEntity::m_elapsed
private

the actual storage of "elapsed" time

Definition at line 179 of file ChronoEntity.h.

◆ m_kernel

StatEntity ChronoEntity::m_kernel
private

the actual storage of "kernel" time

Definition at line 177 of file ChronoEntity.h.

◆ m_start

System::ProcessTime ChronoEntity::m_start
private

start stamp for current measurement of process times

Definition at line 173 of file ChronoEntity.h.

◆ m_status

IChronoSvc::ChronoStatus ChronoEntity::m_status = IChronoSvc::UNKNOWN
private

current status of this chrono object;

Definition at line 169 of file ChronoEntity.h.

◆ m_user

StatEntity ChronoEntity::m_user
private

the actual storage of "user" time

Definition at line 175 of file ChronoEntity.h.

◆ TimeUnit

const System::TimeType ChronoEntity::TimeUnit = System::microSec
staticprivate

internal unit used for the system time conversion (microseconds)

Definition at line 181 of file ChronoEntity.h.


The documentation for this class was generated from the following files:
System::milliSec
@ milliSec
Definition: Timing.h:67
ChronoEntity::m_user
StatEntity m_user
the actual storage of "user" time
Definition: ChronoEntity.h:175
std::make_tuple
T make_tuple(T... args)
ChronoEntity::m_elapsed
StatEntity m_elapsed
the actual storage of "elapsed" time
Definition: ChronoEntity.h:179
std::string
STL class.
ChronoEntity::eMinimalTime
double eMinimalTime() const
minimal measurement for elapsed time
Definition: ChronoEntity.h:203
System::Hour
@ Hour
Definition: Timing.h:67
IChronoSvc::ChronoTime
double ChronoTime
Type of the delta-time.
Definition: IChronoSvc.h:49
ChronoEntity::uMinimalTime
double uMinimalTime() const
minimal measurement for user time
Definition: ChronoEntity.h:195
ChronoEntity::eRMSTime
double eRMSTime() const
r.m.s Elapsed Time
Definition: ChronoEntity.h:255
ChronoEntity::format
std::string format(const double total, const double minimal, const double mean, const double rms, const double maximal, const unsigned long number) const
format
Definition: ChronoEntity.cpp:102
System::Year
@ Year
Definition: Timing.h:67
IChronoSvc::ELAPSED
@ ELAPSED
Definition: IChronoSvc.h:56
std::find_if
T find_if(T... args)
StatEntity
backward compatible StatEntity class.
Definition: StatEntity.h:23
System::microSec
@ microSec
Definition: Timing.h:67
ChronoEntity::eMeanTime
double eMeanTime() const
average Elapsed Time
Definition: ChronoEntity.h:243
System::ProcessTime::kernelTime
TimeValueType kernelTime() const
Retrieve the kernel time in the requested unit.
Definition: Timing.h:168
Gaudi::Units::second
constexpr double second
Definition: SystemOfUnits.h:139
ChronoEntity::eTotalTime
double eTotalTime() const
total Elapsed time
Definition: ChronoEntity.h:227
ChronoEntity::kMinimalTime
double kMinimalTime() const
minimal measurement for kernel time
Definition: ChronoEntity.h:199
StatEntity::flagRMS
double flagRMS() const
Definition: StatEntity.h:99
ChronoEntity::m_delta
System::ProcessTime m_delta
delta process times
Definition: ChronoEntity.h:171
StatEntity::flag
double flag() const
Definition: StatEntity.h:96
System::nanoSec
@ nanoSec
Definition: Timing.h:67
ChronoEntity::nOfMeasurements
unsigned long nOfMeasurements() const
number of chrono measurements
Definition: ChronoEntity.h:191
System::Month
@ Month
Definition: Timing.h:67
ChronoEntity::m_status
IChronoSvc::ChronoStatus m_status
current status of this chrono object;
Definition: ChronoEntity.h:169
StatEntity::flagMax
double flagMax() const
Definition: StatEntity.h:102
ChronoEntity::uMeanTime
double uMeanTime() const
average User Time
Definition: ChronoEntity.h:239
Gaudi::Units::microsecond
constexpr double microsecond
Definition: SystemOfUnits.h:141
StatEntity::flagMeanErr
double flagMeanErr() const
Definition: StatEntity.h:100
System::ProcessTime::elapsedTime
TimeValueType elapsedTime() const
Retrieve the elapsed time in the requested unit.
Definition: Timing.h:180
Gaudi::Utils::begin
AttribStringParser::Iterator begin(const AttribStringParser &parser)
Definition: AttribStringParser.h:136
IChronoSvc::RUNNING
@ RUNNING
Definition: IChronoSvc.h:54
StatEntity::flagMean
double flagMean() const
Definition: StatEntity.h:98
ChronoEntity::kRMSTime
double kRMSTime() const
r.m.s Kernel Time
Definition: ChronoEntity.h:247
ChronoEntity::kTotalTime
double kTotalTime() const
total Kernel time
Definition: ChronoEntity.h:223
std::array
STL class.
ChronoEntity::m_start
System::ProcessTime m_start
start stamp for current measurement of process times
Definition: ChronoEntity.h:173
ChronoEntity::m_kernel
StatEntity m_kernel
the actual storage of "kernel" time
Definition: ChronoEntity.h:177
format
GAUDI_API std::string format(const char *,...)
MsgStream format utility "a la sprintf(...)".
Definition: MsgStream.cpp:119
ChronoEntity::kMaximalTime
double kMaximalTime() const
maximal measurement for kernel time
Definition: ChronoEntity.h:211
ChronoEntity::uRMSTime
double uRMSTime() const
r.m.s User Time
Definition: ChronoEntity.h:251
gaudirun.type
type
Definition: gaudirun.py:160
System::Sec
@ Sec
Definition: Timing.h:67
System::Day
@ Day
Definition: Timing.h:67
System::Min
@ Min
Definition: Timing.h:67
IChronoSvc::KERNEL
@ KERNEL
Definition: IChronoSvc.h:56
fmt
StatEntity::flagMin
double flagMin() const
Definition: StatEntity.h:101
Gaudi::Units::nanosecond
constexpr double nanosecond
Definition: SystemOfUnits.h:138
ChronoEntity::kMeanTime
double kMeanTime() const
average Kernel Time
Definition: ChronoEntity.h:235
IChronoSvc::STOPPED
@ STOPPED
Definition: IChronoSvc.h:54
Gaudi::Units::millisecond
constexpr double millisecond
Definition: SystemOfUnits.h:140
IOTest.end
end
Definition: IOTest.py:125
ChronoEntity::TimeUnit
static const System::TimeType TimeUnit
internal unit used for the system time conversion (microseconds)
Definition: ChronoEntity.h:181
ChronoEntity::uMaximalTime
double uMaximalTime() const
maximal measurement for user time
Definition: ChronoEntity.h:207
std::prev
T prev(T... args)
System::ProcessTime::userTime
TimeValueType userTime() const
Retrieve the user time in the requested unit.
Definition: Timing.h:174
System::getProcessTime
GAUDI_API ProcessTime getProcessTime(long pid=-1)
Retrieve the process time data for a process.
Definition: Timing.cpp:207
ChronoEntity::outputTime
std::string outputTime(IChronoSvc::ChronoType typ, std::string_view fmt, System::TimeType unit) const
print the chrono according the format and units
Definition: ChronoEntity.cpp:168
IChronoSvc::USER
@ USER
Definition: IChronoSvc.h:56
ChronoEntity::eMaximalTime
double eMaximalTime() const
maximal measurement for elapsed time
Definition: ChronoEntity.h:215
ChronoEntity::uTotalTime
double uTotalTime() const
total user time
Definition: ChronoEntity.h:219