| The Gaudi Framework v27r1

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- Class List
- Class Index
- Class Hierarchy
- Class Members

Public Member Functions | Static Public Member Functions | Private Attributes | List of all members
TimerForSequencer Class Reference

Auxiliary class. More...

`#include <src/components/TimerForSequencer.h>`

Collaboration diagram for TimerForSequencer:
[legend]

## 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::string & | name () 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...
MsgStream & | fillStream (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 20 of file TimerForSequencer.h.

## Constructor & Destructor Documentation

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

Constructor.

Specify the name, for later printing.

Definition at line 25 of file TimerForSequencer.h.

28 : m_name ( std::move(name) ),
29 m_size ( size ),
30 m_factor ( factor )
31 { }
TimerForSequencer::m_factor
double m_factor
Definition: TimerForSequencer.h:74
TimerForSequencer::m_size
unsigned int m_size
Definition: TimerForSequencer.h:73
std::move
T move(T...args)
TimerForSequencer::m_name
std::string m_name
Definition: TimerForSequencer.h:72

TimerForSequencer::~TimerForSequencer | ( |  | ) |
| default

## Member Function Documentation

uint64_t TimerForSequencer::count | ( |  | ) | const
| inline

Returns the number run count.

Definition at line 63 of file TimerForSequencer.h.

63 { return m_num; }
TimerForSequencer::m_num
uint64_t m_num
Definition: TimerForSequencer.h:78

double TimerForSequencer::cpuTotal | ( |  | ) | const
| inline

returns the toptal cpu time

Definition at line 60 of file TimerForSequencer.h.

60 { return m_sumCpu * m_factor; }
TimerForSequencer::m_factor
double m_factor
Definition: TimerForSequencer.h:74
TimerForSequencer::m_sumCpu
uint64_t m_sumCpu
Definition: TimerForSequencer.h:85

double TimerForSequencer::elapsedTotal | ( |  | ) | const
| inline

returns the total elapsed time

Definition at line 57 of file TimerForSequencer.h.

57 { return m_sum * m_factor; }
TimerForSequencer::m_factor
double m_factor
Definition: TimerForSequencer.h:74
TimerForSequencer::m_sum
uint64_t m_sum
Definition: TimerForSequencer.h:83

MsgStream & TimerForSequencer::fillStream | ( | MsgStream & | s | ) | const

Write measured time into the message stream.

Definition at line 34 of file TimerForSequencer.cpp.

35 {
36 float ave = 0.f;
37 float cpu = 0.f;
38
39 if ( 0ULL != m_num ) {
40 ave = m_sum / m_num;
41 cpu = m_sumCpu / m_num;
42 }
43
44 ave *= m_factor;
45 cpu *= m_factor;
46 float min = m_min * m_factor;
47 float max = m_max * m_factor;
48 float sum = m_sum * m_factor;
49
50 // Calculate the sigma with 2 momenta. ROOT histos call this quantity
51 // RMS but just to be consistent with paw.
52 // The division is by N-1 since one degree of freedom is used to calculate
53 // the average. See your favourite book for the proof!
54 float sigma = m_num <= 1ULL
55 ? 0.f
56 : m_factor * sqrt( (m_sum2 - m_sum*m_sum/m_num)/(m_num-1) );
57
58 return s << m_name.substr(0, m_size)
59 << format( "| %9.3f | %9.3f | %8.3f %9.1f %8.2f | %7d | %9.3f |",
60 cpu, ave, min, max, sigma, m_num, sum * 0.001f );
61 }
format
GAUDI_API std::string format(const char *,...)
MsgStream format utility "a la sprintf(...)".
Definition: MsgStream.cpp:119
sum
double sum(double x, double y, double z)
Definition: 3DoubleFuncTest.cpp:25
TimerForSequencer::m_min
uint64_t m_min
Definition: TimerForSequencer.h:81
std::min
T min(T...args)
TimerForSequencer::m_factor
double m_factor
Definition: TimerForSequencer.h:74
TimerForSequencer::m_size
unsigned int m_size
Definition: TimerForSequencer.h:73
std::max
T max(T...args)
TimerForSequencer::m_sum
uint64_t m_sum
Definition: TimerForSequencer.h:83
TimerForSequencer::m_sum2
uint64_t m_sum2
Definition: TimerForSequencer.h:84
TimerForSequencer::m_max
uint64_t m_max
Definition: TimerForSequencer.h:82
std::string::substr
T substr(T...args)
TimerForSequencer::m_name
std::string m_name
Definition: TimerForSequencer.h:72
TimerForSequencer::m_num
uint64_t m_num
Definition: TimerForSequencer.h:78
TimerForSequencer::m_sumCpu
uint64_t m_sumCpu
Definition: TimerForSequencer.h:85
std::sqrt
T sqrt(T...args)
ana.cpu
tuple cpu
Definition: ana.py:139

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

header matching the previous format

Definition at line 63 of file TimerForSequencer.cpp.

64 {
65 return "Algorithm" + std::string( std::max(std::string::size_type(21),size) - 20, ' ' )
66 + "(millisec) | <user> | <clock> |"
67 + " min max sigma | entries | total (s) |";
68 }
std::string
STL class.
std::max
T max(T...args)

double TimerForSequencer::lastCpu | ( |  | ) | const
| inline

returns the last measured time

Definition at line 54 of file TimerForSequencer.h.

54 { return m_lastCpu * m_factor; }
TimerForSequencer::m_lastCpu
uint64_t m_lastCpu
Definition: TimerForSequencer.h:80
TimerForSequencer::m_factor
double m_factor
Definition: TimerForSequencer.h:74

double TimerForSequencer::lastTime | ( |  | ) | const
| inline

returns the last measured time

Definition at line 51 of file TimerForSequencer.h.

51 { return m_lastTime * m_factor; }
TimerForSequencer::m_factor
double m_factor
Definition: TimerForSequencer.h:74
TimerForSequencer::m_lastTime
uint64_t m_lastTime
Definition: TimerForSequencer.h:79

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

returns the name

Definition at line 48 of file TimerForSequencer.h.

48 { return m_name; }
TimerForSequencer::m_name
std::string m_name
Definition: TimerForSequencer.h:72

void TimerForSequencer::start | ( |  | ) |
| inline

Start a time measurement.

Definition at line 36 of file TimerForSequencer.h.

37 {
38 m_startClock = System::currentTime( System::microSec );
39 m_startCpu = System::cpuTime ( System::microSec );
40 }
System::cpuTime
GAUDI_API longlong cpuTime(TimeType typ=milliSec, InfoType fetch=Times, long pid=-1)
Consumed CPU time of process in milliseconds.
Definition: Timing.cpp:168
TimerForSequencer::m_startClock
uint64_t m_startClock
Definition: TimerForSequencer.h:75
System::microSec
Definition: Timing.h:51
TimerForSequencer::m_startCpu
uint64_t m_startCpu
Definition: TimerForSequencer.h:76
System::currentTime
GAUDI_API longlong currentTime(TimeType typ=milliSec)
Retrieve absolute system time.
Definition: Timing.cpp:79

uint64_t TimerForSequencer::stop | ( |  | ) |

Stop time measurement and return the last elapsed time.

Returns
  Measured time in ms

Definition at line 10 of file TimerForSequencer.cpp.

10 {
11 uint64_t cpuTime = System::cpuTime( System::microSec ) - m_startCpu ;
12 uint64_t lastTime = System::currentTime( System::microSec ) - m_startClock ;
13
14 //== Update the counter
15 m_num += 1ULL;
16 m_sum += lastTime;
17 m_sum2 += lastTime*lastTime;
18 m_sumCpu += cpuTime;
19
20 // Branchless update, only cast
21 bool numIsFirst= (1ULL == m_num) ;
22 m_min += lastTime * numIsFirst;
23 m_max += lastTime * numIsFirst;
24
25 m_min = lastTime < m_min ? lastTime : m_min;
26 m_max = lastTime > m_max ? lastTime : m_max;
27
28 m_lastTime = lastTime;
29 m_lastCpu = cpuTime;
30
31 return lastTime;
32 }
TimerForSequencer::m_lastCpu
uint64_t m_lastCpu
Definition: TimerForSequencer.h:80
uint64_t
unsigned long long uint64_t
Definition: instrset.h:144
System::cpuTime
GAUDI_API longlong cpuTime(TimeType typ=milliSec, InfoType fetch=Times, long pid=-1)
Consumed CPU time of process in milliseconds.
Definition: Timing.cpp:168
TimerForSequencer::m_min
uint64_t m_min
Definition: TimerForSequencer.h:81
TimerForSequencer::m_startClock
uint64_t m_startClock
Definition: TimerForSequencer.h:75
System::microSec
Definition: Timing.h:51
TimerForSequencer::lastTime
double lastTime() const
returns the last measured time
Definition: TimerForSequencer.h:51
TimerForSequencer::m_sum
uint64_t m_sum
Definition: TimerForSequencer.h:83
TimerForSequencer::m_sum2
uint64_t m_sum2
Definition: TimerForSequencer.h:84
TimerForSequencer::m_startCpu
uint64_t m_startCpu
Definition: TimerForSequencer.h:76
TimerForSequencer::m_max
uint64_t m_max
Definition: TimerForSequencer.h:82
TimerForSequencer::m_lastTime
uint64_t m_lastTime
Definition: TimerForSequencer.h:79
TimerForSequencer::m_num
uint64_t m_num
Definition: TimerForSequencer.h:78
TimerForSequencer::m_sumCpu
uint64_t m_sumCpu
Definition: TimerForSequencer.h:85
System::currentTime
GAUDI_API longlong currentTime(TimeType typ=milliSec)
Retrieve absolute system time.
Definition: Timing.cpp:79

## Member Data Documentation

double TimerForSequencer::m_factor
| private

Definition at line 74 of file TimerForSequencer.h.

uint64_t TimerForSequencer::m_lastCpu = 0ULL
| private

Definition at line 80 of file TimerForSequencer.h.

uint64_t TimerForSequencer::m_lastTime = 0ULL
| private

Definition at line 79 of file TimerForSequencer.h.

uint64_t TimerForSequencer::m_max = 0ULL
| private

Definition at line 82 of file TimerForSequencer.h.

uint64_t TimerForSequencer::m_min = 0ULL
| private

Definition at line 81 of file TimerForSequencer.h.

std::string TimerForSequencer::m_name
| private

Definition at line 72 of file TimerForSequencer.h.

uint64_t TimerForSequencer::m_num = 0ULL
| private

Definition at line 78 of file TimerForSequencer.h.

unsigned int TimerForSequencer::m_size
| private

Definition at line 73 of file TimerForSequencer.h.

uint64_t TimerForSequencer::m_startClock = 0ULL
| private

Definition at line 75 of file TimerForSequencer.h.

uint64_t TimerForSequencer::m_startCpu = 0ULL
| private

Definition at line 76 of file TimerForSequencer.h.

uint64_t TimerForSequencer::m_sum = 0ULL
| private

Definition at line 83 of file TimerForSequencer.h.

uint64_t TimerForSequencer::m_sum2 = 0ULL
| private

Definition at line 84 of file TimerForSequencer.h.

uint64_t TimerForSequencer::m_sumCpu = 0ULL
| private

Definition at line 85 of file TimerForSequencer.h.

The documentation for this class was generated from the following files:

- GaudiAlg/src/components/TimerForSequencer.h
- GaudiAlg/src/components/TimerForSequencer.cpp