Scippy

SoPlex

Sequential object-oriented simPlex

Timer Class Referenceabstract

Wrapper for the system time query methods. More...

#include <timer.h>

Public Types

Timers
enum  TYPE { OFF = 0, USER_TIME = 1, WALLCLOCK_TIME = 2 }
 types of timers More...
 

Public Member Functions

Construction / destruction
 Timer ()
 default constructor More...
 
 Timer (const Timer &old)
 copy constructor More...
 
Timeroperator= (const Timer &old)
 assignment operator More...
 
virtual ~Timer ()
 
Control
virtual void reset ()=0
 initialize timer, set timing accounts to zero. More...
 
virtual void start ()=0
 start timer, resume accounting user, system and real time. More...
 
virtual Real stop ()=0
 stop timer, return accounted user time. More...
 
virtual TYPE type ()=0
 return type of timer More...
 
Access
void getLastTimes (Real *userTime, Real *systemTime, Real *realTime) const
 return accounted time. get accounted user, system, or real time when ticks were updated last More...
 
virtual Real time () const =0
 
virtual Real lastTime () const =0
 return last accounted time without rechecking the clock More...
 
Real realTimeLast () const
 return accounted real time without rechecking the clock More...
 

Types

enum soplex::Timer::{ RESET, STOPPED, RUNNINGstatus
 status of the timer More...
 

Detailed Description

Wrapper for the system time query methods.

In C or C++ programs, the usual way to measure time intervals, e.g., running times of some complex computations, is to call one of the provided system functions like clock(), time(), times(), gettimeofday(), getrusage() etc. By these functions one can gather information about the process' user and system time and the system clock (real time).

Unfortunately, these functions are rather clumsy. The programmer determines computation times by querying a (virtual) clock value at the beginning and another one at the end of some computation and converting the difference of these values into seconds. Some functions impose restrictions; for instance, the values of the ANSI C function clock() are of high resolution but will wrap around after about 36 minutes (cpu time). Most timing functions take some data structure as argument that has to be allocated before the call and from which the user has to pick up the information of interest after the call. Problems can arise when porting programs to other operating systems that do not support standards like POSIX etc.

In order to simplify measuring computation times and to hide the system-dependencies involved, a concept of timers accounting the process' system and real time is implemented. C and C++ interfaces are provided as a set of functions operating on timers and a timer class respectively.

Look into the file timerfactory.h to see how to switch between different timing types or to disable timing altogether.

The idea is to provide a type Timer for objects that act like a stopwatch. Operations on such an objects include: start accounting time, stop accounting, read the actual time account and reset the objects time account to zero.

After initialization, accounting for the time can be started by calling a function start(). Accounting is suspended by calling a function stop() and can be resumed at any time by calling start() again.

For convenience, the actually accounted user time is returned by stop() too. Function reset() re-initializes a timer clearing all time accounts.

Definition at line 76 of file timer.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
protected

status of the timer

Enumerator
RESET 

reset

STOPPED 

stopped

RUNNING 

running

Definition at line 84 of file timer.h.

◆ TYPE

enum TYPE

types of timers

Enumerator
OFF 
USER_TIME 
WALLCLOCK_TIME 

Definition at line 99 of file timer.h.

Constructor & Destructor Documentation

◆ Timer() [1/2]

Timer ( )

default constructor

Definition at line 111 of file timer.h.

◆ Timer() [2/2]

Timer ( const Timer old)

copy constructor

Definition at line 115 of file timer.h.

◆ ~Timer()

Member Function Documentation

◆ getLastTimes()

void getLastTimes ( Real userTime,
Real systemTime,
Real realTime 
) const

return accounted time. get accounted user, system, or real time when ticks were updated last

Referenced by Timer::~Timer().

◆ lastTime()

virtual Real lastTime ( ) const
pure virtual

return last accounted time without rechecking the clock

Implemented in UserTimer, WallclockTimer, and NoTimer.

Referenced by Timer::~Timer().

◆ operator=()

Timer& operator= ( const Timer old)

assignment operator

Definition at line 119 of file timer.h.

References Timer::status.

◆ realTimeLast()

Real realTimeLast ( ) const

return accounted real time without rechecking the clock

Referenced by Timer::~Timer().

◆ reset()

◆ start()

virtual void start ( )
pure virtual

start timer, resume accounting user, system and real time.

Implemented in UserTimer, WallclockTimer, and NoTimer.

Referenced by SSVectorBase< Rational >::assign2product4setup(), Presol< R >::getBasis(), runSoPlex(), and Timer::~Timer().

◆ stop()

virtual Real stop ( )
pure virtual

stop timer, return accounted user time.

Implemented in UserTimer, WallclockTimer, and NoTimer.

Referenced by SSVectorBase< Rational >::assign2product4setup(), runSoPlex(), and Timer::~Timer().

◆ time()

◆ type()

virtual TYPE type ( )
pure virtual

return type of timer

Implemented in UserTimer, WallclockTimer, and NoTimer.

Referenced by TimerFactory::switchTimer(), and Timer::~Timer().

Member Data Documentation

◆ status