The Gaudi Framework  v38r1p1 (ae26267b)
TimerForSequencer Class Reference

Auxiliary class. More...

#include </builds/gaudi/Gaudi/GaudiAlg/src/components/TimerForSequencer.h>

Collaboration diagram for TimerForSequencer:

Public Member Functions

 TimerForSequencer (std::string name, unsigned int size, double factor)
 Constructor. More...
 
 ~TimerForSequencer ()=default
 
void start ()
 Start a time measurement. More...
 
uint64_t stop ()
 Stop time measurement and return the last elapsed time. More...
 
const std::stringname () const
 returns the name More...
 
double lastTime () const
 returns the last measured time More...
 
double lastCpu () const
 returns the last measured time More...
 
double elapsedTotal () const
 returns the total elapsed time More...
 
double cpuTotal () const
 returns the toptal cpu time More...
 
uint64_t count () const
 Returns the number run count. More...
 
MsgStreamfillStream (MsgStream &s) const
 Write measured time into the message stream. More...
 

Static Public Member Functions

static std::string header (std::string::size_type size)
 header matching the previous format More...
 

Private Attributes

std::string m_name
 
unsigned int m_size
 
double m_factor
 
uint64_t m_startClock = 0ULL
 
uint64_t m_startCpu = 0ULL
 
uint64_t m_num = 0ULL
 
uint64_t m_lastTime = 0ULL
 
uint64_t m_lastCpu = 0ULL
 
uint64_t m_min = 0ULL
 
uint64_t m_max = 0ULL
 
uint64_t m_sum = 0ULL
 
uint64_t m_sum2 = 0ULL
 
uint64_t m_sumCpu = 0ULL
 

Detailed Description

Auxiliary class.

Measure the time between start and stop, and compute average, min and max. In fact, measure the cpu time, and the elapsed time but gives min/max only for elapsed.

Avoid usage of double precision floating point to cumulate counts and use unsigned long long integers instead. The total capacity is enough (~1.8e19) and there is no risk to loose counts when the available sum is big with respect to the added duration. The sigma

Author
O.Callot
D.Piparo

Definition at line 30 of file TimerForSequencer.h.

Constructor & Destructor Documentation

◆ TimerForSequencer()

TimerForSequencer::TimerForSequencer ( std::string  name,
unsigned int  size,
double  factor 
)
inline

Constructor.

Specify the name, for later printing.

Definition at line 34 of file TimerForSequencer.h.

35  : m_name( std::move( name ) ), m_size( size ), m_factor( factor ) {}

◆ ~TimerForSequencer()

TimerForSequencer::~TimerForSequencer ( )
default

Member Function Documentation

◆ count()

uint64_t TimerForSequencer::count ( ) const
inline

Returns the number run count.

Definition at line 66 of file TimerForSequencer.h.

66 { return m_num; }

◆ cpuTotal()

double TimerForSequencer::cpuTotal ( ) const
inline

returns the toptal cpu time

Definition at line 63 of file TimerForSequencer.h.

63 { return m_sumCpu * m_factor; }

◆ elapsedTotal()

double TimerForSequencer::elapsedTotal ( ) const
inline

returns the total elapsed time

Definition at line 60 of file TimerForSequencer.h.

60 { return m_sum * m_factor; }

◆ fillStream()

MsgStream & TimerForSequencer::fillStream ( MsgStream s) const

Write measured time into the message stream.

Definition at line 44 of file TimerForSequencer.cpp.

44  {
45  float ave = 0.f;
46  float cpu = 0.f;
47 
48  if ( 0ULL != m_num ) {
49  ave = m_sum / m_num;
50  cpu = m_sumCpu / m_num;
51  }
52 
53  ave *= m_factor;
54  cpu *= m_factor;
55  float min = m_min * m_factor;
56  float max = m_max * m_factor;
57  float sum = m_sum * m_factor;
58 
59  // Calculate the sigma with 2 momenta. ROOT histos call this quantity
60  // RMS but just to be consistent with paw.
61  // The division is by N-1 since one degree of freedom is used to calculate
62  // the average. See your favourite book for the proof!
63  float sigma = m_num <= 1ULL ? 0.f : m_factor * sqrt( ( m_sum2 - m_sum * m_sum / m_num ) / ( m_num - 1 ) );
64 
65  return s << m_name.substr( 0, m_size )
66  << format( "| %9.3f | %9.3f | %8.3f %9.1f %8.2f | %7lu | %9.3f |", cpu, ave, min, max, sigma, m_num,
67  sum * 0.001f );
68 }

◆ header()

std::string TimerForSequencer::header ( std::string::size_type  size)
static

header matching the previous format

Definition at line 70 of file TimerForSequencer.cpp.

70  {
71  return "Algorithm" + std::string( std::max( std::string::size_type( 21 ), size ) - 20, ' ' ) +
72  "(millisec) | <user> | <clock> |" + " min max sigma | entries | total (s) |";
73 }

◆ lastCpu()

double TimerForSequencer::lastCpu ( ) const
inline

returns the last measured time

Definition at line 57 of file TimerForSequencer.h.

57 { return m_lastCpu * m_factor; }

◆ lastTime()

double TimerForSequencer::lastTime ( ) const
inline

returns the last measured time

Definition at line 54 of file TimerForSequencer.h.

54 { return m_lastTime * m_factor; }

◆ name()

const std::string& TimerForSequencer::name ( ) const
inline

returns the name

Definition at line 51 of file TimerForSequencer.h.

51 { return m_name; }

◆ start()

void TimerForSequencer::start ( )
inline

Start a time measurement.

Definition at line 40 of file TimerForSequencer.h.

◆ stop()

uint64_t TimerForSequencer::stop ( )

Stop time measurement and return the last elapsed time.

Returns
Measured time in ms

Definition at line 20 of file TimerForSequencer.cpp.

20  {
23 
24  //== Update the counter
25  m_num += 1ULL;
26  m_sum += lastTime;
28  m_sumCpu += cpuTime;
29 
30  // Branchless update, only cast
31  bool numIsFirst = ( 1ULL == m_num );
32  m_min += lastTime * numIsFirst;
33  m_max += lastTime * numIsFirst;
34 
37 
40 
41  return lastTime;
42 }

Member Data Documentation

◆ m_factor

double TimerForSequencer::m_factor
private

Definition at line 77 of file TimerForSequencer.h.

◆ m_lastCpu

uint64_t TimerForSequencer::m_lastCpu = 0ULL
private

Definition at line 83 of file TimerForSequencer.h.

◆ m_lastTime

uint64_t TimerForSequencer::m_lastTime = 0ULL
private

Definition at line 82 of file TimerForSequencer.h.

◆ m_max

uint64_t TimerForSequencer::m_max = 0ULL
private

Definition at line 85 of file TimerForSequencer.h.

◆ m_min

uint64_t TimerForSequencer::m_min = 0ULL
private

Definition at line 84 of file TimerForSequencer.h.

◆ m_name

std::string TimerForSequencer::m_name
private

Definition at line 75 of file TimerForSequencer.h.

◆ m_num

uint64_t TimerForSequencer::m_num = 0ULL
private

Definition at line 81 of file TimerForSequencer.h.

◆ m_size

unsigned int TimerForSequencer::m_size
private

Definition at line 76 of file TimerForSequencer.h.

◆ m_startClock

uint64_t TimerForSequencer::m_startClock = 0ULL
private

Definition at line 78 of file TimerForSequencer.h.

◆ m_startCpu

uint64_t TimerForSequencer::m_startCpu = 0ULL
private

Definition at line 79 of file TimerForSequencer.h.

◆ m_sum

uint64_t TimerForSequencer::m_sum = 0ULL
private

Definition at line 86 of file TimerForSequencer.h.

◆ m_sum2

uint64_t TimerForSequencer::m_sum2 = 0ULL
private

Definition at line 87 of file TimerForSequencer.h.

◆ m_sumCpu

uint64_t TimerForSequencer::m_sumCpu = 0ULL
private

Definition at line 88 of file TimerForSequencer.h.


The documentation for this class was generated from the following files:
TimerForSequencer::m_lastCpu
uint64_t m_lastCpu
Definition: TimerForSequencer.h:83
Gaudi::Accumulators::sqrt
auto sqrt(std::chrono::duration< Rep, Period > d)
sqrt for std::chrono::duration
Definition: Counters.h:34
TimerForSequencer::name
const std::string & name() const
returns the name
Definition: TimerForSequencer.h:51
std::string
STL class.
details::size
constexpr auto size(const T &, Args &&...) noexcept
Definition: AnyDataWrapper.h:22
std::move
T move(T... args)
TimerForSequencer::m_lastTime
uint64_t m_lastTime
Definition: TimerForSequencer.h:82
gaudirun.s
string s
Definition: gaudirun.py:346
TimerForSequencer::m_name
std::string m_name
Definition: TimerForSequencer.h:75
TimerForSequencer::m_startClock
uint64_t m_startClock
Definition: TimerForSequencer.h:78
System::microSec
@ microSec
Definition: Timing.h:67
max
EventIDBase max(const EventIDBase &lhs, const EventIDBase &rhs)
Definition: EventIDBase.h:225
TimerForSequencer::m_min
uint64_t m_min
Definition: TimerForSequencer.h:84
TimerForSequencer::m_size
unsigned int m_size
Definition: TimerForSequencer.h:76
TimerForSequencer::m_factor
double m_factor
Definition: TimerForSequencer.h:77
TimerForSequencer::m_sum
uint64_t m_sum
Definition: TimerForSequencer.h:86
System::currentTime
GAUDI_API long long currentTime()
Retrieve absolute system time.
Definition: Timing.h:260
format
GAUDI_API std::string format(const char *,...)
MsgStream format utility "a la sprintf(...)".
Definition: MsgStream.cpp:119
min
EventIDBase min(const EventIDBase &lhs, const EventIDBase &rhs)
Definition: EventIDBase.h:212
System::cpuTime
GAUDI_API long long cpuTime(TimeType typ=milliSec, InfoType fetch=Times, long pid=-1)
Consumed CPU time of process in milliseconds.
Definition: Timing.cpp:197
std::string::substr
T substr(T... args)
TimerForSequencer::m_sum2
uint64_t m_sum2
Definition: TimerForSequencer.h:87
TimerForSequencer::m_sumCpu
uint64_t m_sumCpu
Definition: TimerForSequencer.h:88
TimerForSequencer::m_startCpu
uint64_t m_startCpu
Definition: TimerForSequencer.h:79
TimerForSequencer::m_num
uint64_t m_num
Definition: TimerForSequencer.h:81
TimerForSequencer::m_max
uint64_t m_max
Definition: TimerForSequencer.h:85
TimerForSequencer::lastTime
double lastTime() const
returns the last measured time
Definition: TimerForSequencer.h:54
std::max
T max(T... args)