| The Gaudi Framework v29r1 (5cd95fa2)

- 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.

26 : m_name( std::move( name ) ), m_size( size ), m_factor( factor )
27 {
28 }
TimerForSequencer::m_factor
double m_factor
Definition: TimerForSequencer.h:71
TimerForSequencer::m_size
unsigned int m_size
Definition: TimerForSequencer.h:70
std::move
T move(T...args)
TimerForSequencer::m_name
std::string m_name
Definition: TimerForSequencer.h:69

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

## Member Function Documentation

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

Returns the number run count.

Definition at line 60 of file TimerForSequencer.h.

60 { return m_num; }
TimerForSequencer::m_num
uint64_t m_num
Definition: TimerForSequencer.h:75

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

returns the toptal cpu time

Definition at line 57 of file TimerForSequencer.h.

57 { return m_sumCpu * m_factor; }
TimerForSequencer::m_factor
double m_factor
Definition: TimerForSequencer.h:71
TimerForSequencer::m_sumCpu
uint64_t m_sumCpu
Definition: TimerForSequencer.h:82

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

returns the total elapsed time

Definition at line 54 of file TimerForSequencer.h.

54 { return m_sum * m_factor; }
TimerForSequencer::m_factor
double m_factor
Definition: TimerForSequencer.h:71
TimerForSequencer::m_sum
uint64_t m_sum
Definition: TimerForSequencer.h:80

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

Write measured time into the message stream.

Definition at line 35 of file TimerForSequencer.cpp.

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

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

header matching the previous format

Definition at line 61 of file TimerForSequencer.cpp.

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

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

returns the last measured time

Definition at line 51 of file TimerForSequencer.h.

51 { return m_lastCpu * m_factor; }
TimerForSequencer::m_lastCpu
uint64_t m_lastCpu
Definition: TimerForSequencer.h:77
TimerForSequencer::m_factor
double m_factor
Definition: TimerForSequencer.h:71

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

returns the last measured time

Definition at line 48 of file TimerForSequencer.h.

48 { return m_lastTime * m_factor; }
TimerForSequencer::m_factor
double m_factor
Definition: TimerForSequencer.h:71
TimerForSequencer::m_lastTime
uint64_t m_lastTime
Definition: TimerForSequencer.h:76

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

returns the name

Definition at line 45 of file TimerForSequencer.h.

45 { return m_name; }
TimerForSequencer::m_name
std::string m_name
Definition: TimerForSequencer.h:69

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

Start a time measurement.

Definition at line 33 of file TimerForSequencer.h.

34 {
35 m_startClock = System::currentTime( System::microSec );
36 m_startCpu = System::cpuTime( System::microSec );
37 }
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:196
TimerForSequencer::m_startClock
uint64_t m_startClock
Definition: TimerForSequencer.h:72
System::microSec
Definition: Timing.h:58
System::currentTime
GAUDI_API longlong currentTime()
Retrieve absolute system time.
Definition: Timing.h:269
TimerForSequencer::m_startCpu
uint64_t m_startCpu
Definition: TimerForSequencer.h:73

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.

11 {
12 uint64_t cpuTime = System::cpuTime( System::microSec ) - m_startCpu;
13 uint64_t lastTime = System::currentTime( System::microSec ) - m_startClock;
14
15 //== Update the counter
16 m_num += 1ULL;
17 m_sum += lastTime;
18 m_sum2 += lastTime * lastTime;
19 m_sumCpu += cpuTime;
20
21 // Branchless update, only cast
22 bool numIsFirst = ( 1ULL == m_num );
23 m_min += lastTime * numIsFirst;
24 m_max += lastTime * numIsFirst;
25
26 m_min = lastTime < m_min ? lastTime : m_min;
27 m_max = lastTime > m_max ? lastTime : m_max;
28
29 m_lastTime = lastTime;
30 m_lastCpu = cpuTime;
31
32 return lastTime;
33 }
TimerForSequencer::m_lastCpu
uint64_t m_lastCpu
Definition: TimerForSequencer.h:77
uint64_t
unsigned long long uint64_t
Definition: instrset.h:143
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:196
TimerForSequencer::m_min
uint64_t m_min
Definition: TimerForSequencer.h:78
TimerForSequencer::m_startClock
uint64_t m_startClock
Definition: TimerForSequencer.h:72
System::microSec
Definition: Timing.h:58
TimerForSequencer::lastTime
double lastTime() const
returns the last measured time
Definition: TimerForSequencer.h:48
System::currentTime
GAUDI_API longlong currentTime()
Retrieve absolute system time.
Definition: Timing.h:269
TimerForSequencer::m_sum
uint64_t m_sum
Definition: TimerForSequencer.h:80
TimerForSequencer::m_sum2
uint64_t m_sum2
Definition: TimerForSequencer.h:81
TimerForSequencer::m_startCpu
uint64_t m_startCpu
Definition: TimerForSequencer.h:73
TimerForSequencer::m_max
uint64_t m_max
Definition: TimerForSequencer.h:79
TimerForSequencer::m_lastTime
uint64_t m_lastTime
Definition: TimerForSequencer.h:76
TimerForSequencer::m_num
uint64_t m_num
Definition: TimerForSequencer.h:75
TimerForSequencer::m_sumCpu
uint64_t m_sumCpu
Definition: TimerForSequencer.h:82

## Member Data Documentation

double TimerForSequencer::m_factor
| private

Definition at line 71 of file TimerForSequencer.h.

uint64_t TimerForSequencer::m_lastCpu = 0ULL
| private

Definition at line 77 of file TimerForSequencer.h.

uint64_t TimerForSequencer::m_lastTime = 0ULL
| private

Definition at line 76 of file TimerForSequencer.h.

uint64_t TimerForSequencer::m_max = 0ULL
| private

Definition at line 79 of file TimerForSequencer.h.

uint64_t TimerForSequencer::m_min = 0ULL
| private

Definition at line 78 of file TimerForSequencer.h.

std::string TimerForSequencer::m_name
| private

Definition at line 69 of file TimerForSequencer.h.

uint64_t TimerForSequencer::m_num = 0ULL
| private

Definition at line 75 of file TimerForSequencer.h.

unsigned int TimerForSequencer::m_size
| private

Definition at line 70 of file TimerForSequencer.h.

uint64_t TimerForSequencer::m_startClock = 0ULL
| private

Definition at line 72 of file TimerForSequencer.h.

uint64_t TimerForSequencer::m_startCpu = 0ULL
| private

Definition at line 73 of file TimerForSequencer.h.

uint64_t TimerForSequencer::m_sum = 0ULL
| private

Definition at line 80 of file TimerForSequencer.h.

uint64_t TimerForSequencer::m_sum2 = 0ULL
| private

Definition at line 81 of file TimerForSequencer.h.

uint64_t TimerForSequencer::m_sumCpu = 0ULL
| private

Definition at line 82 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