Reference documentation for deal.II version 8.5.1
Public Member Functions | Private Attributes | List of all members
Timer Class Reference

#include <deal.II/base/timer.h>

Public Member Functions

 Timer ()
 
 Timer (MPI_Comm mpi_communicator, const bool sync_wall_time=false)
 
const Utilities::MPI::MinMaxAvgget_data () const
 
template<class StreamType >
void print_data (StreamType &stream) const
 
void start ()
 
double stop ()
 
void reset ()
 
void restart ()
 
double operator() () const
 
double wall_time () const
 
double get_lap_time () const
 

Private Attributes

double start_time
 
double start_time_children
 
double start_wall_time
 
double cumulative_time
 
double cumulative_wall_time
 
double last_lap_time
 
bool running
 
MPI_Comm mpi_communicator
 
bool sync_wall_time
 
Utilities::MPI::MinMaxAvg mpi_data
 

Detailed Description

This is a very simple class which provides information about both the CPU time and the wallclock time elapsed since the timer was started last time. Information is retrieved from the system on the basis of clock cycles since last time the computer was booted for the CPU time. The wall time is based on the system clock accessed by gettimeofday, with a typical accuracy of 0.01 ms on linux systems.

Usage

Use of this class is as you might expect by looking at the member functions:

Timer timer;
timer.start ();
// do some complicated computations here
...
timer.stop ();
std::cout << "Elapsed CPU time: " << timer() << " seconds.";
std::cout << "Elapsed wall time: " << timer.wall_time() << " seconds.";
// reset timer for the next thing it shall do
timer.reset();

Alternatively, you can also restart the timer instead of resetting it. The times between successive calls to start() / stop() will then be accumulated. The usage of this class is also explained in the step-28, step-29 and step-30 tutorial programs.

Note
Implementation of this class is system dependent. In case multithreaded routines (matrix-vector products, error estimators, etc.) are used, the CPU time is accumulated from all the children.
Author
G. Kanschat, W. Bangerth, M. Kronbichler

Definition at line 76 of file timer.h.

Constructor & Destructor Documentation

◆ Timer() [1/2]

Timer::Timer ( )

Constructor. Starts the timer at 0 sec.

Definition at line 43 of file timer.cc.

◆ Timer() [2/2]

Timer::Timer ( MPI_Comm  mpi_communicator,
const bool  sync_wall_time = false 
)

Constructor that takes an MPI communicator as input. A timer constructed this way will sum up the CPU times over all processors in the MPI network when requested by the operator ().

Starts the timer at 0 sec.

If sync_wall_time is true, the wall time is synchronized between all CPUs using a MPI_Barrier() and a collective operation. Note that this only works if you stop() the timer before querying for the wall time. The time for the MPI operations are not included in the timing but may slow down your program.

This constructor is only available if the deal.II compiler is an MPI compiler.

Definition at line 71 of file timer.cc.

Member Function Documentation

◆ get_data()

const Utilities::MPI::MinMaxAvg & Timer::get_data ( ) const
inline

Return a reference to the data structure with global timing information. Filled after calling stop().

Definition at line 703 of file timer.h.

◆ print_data()

template<class StreamType >
void Timer::print_data ( StreamType &  stream) const
inline

Prints the data to the given stream.

Definition at line 713 of file timer.h.

◆ start()

void Timer::start ( )

Re-start the timer at the point where it was stopped. This way a cumulative measurement of time is possible.

Definition at line 127 of file timer.cc.

◆ stop()

double Timer::stop ( )

Set the current time as next starting time and return the elapsed time in seconds.

Definition at line 166 of file timer.cc.

◆ reset()

void Timer::reset ( )

Stop the timer if necessary and reset the elapsed time to zero.

Definition at line 282 of file timer.cc.

◆ restart()

void Timer::restart ( )
inline

Resets the elapsed time to zero and starts the timer. This corresponds to calling reset() and start() on the Timer object.

Definition at line 691 of file timer.h.

◆ operator()()

double Timer::operator() ( ) const

Access to the current CPU time without disturbing time measurement. The elapsed time is returned in units of seconds.

Definition at line 222 of file timer.cc.

◆ wall_time()

double Timer::wall_time ( ) const

Access to the current wall time without disturbing time measurement. The elapsed time is returned in units of seconds.

Definition at line 260 of file timer.cc.

◆ get_lap_time()

double Timer::get_lap_time ( ) const

Return the last lap time; the time taken between the last start()/stop() call.

Definition at line 214 of file timer.cc.

Member Data Documentation

◆ start_time

double Timer::start_time
private

Value of the user time when start() was called the last time or when the object was created and no stop() was issued in between.

Definition at line 166 of file timer.h.

◆ start_time_children

double Timer::start_time_children
private

Similar to start_time, but needed for children threads in multithread mode. Value of the user time when start() was called the last time or when the object was created and no stop() was issued in between.

For some reason (error in operating system?) the function call getrusage(RUSAGE_CHILDREN,.) gives always 0 (at least on Solaris7). Hence the Timer class still does not yet work for multithreading mode.

Definition at line 179 of file timer.h.

◆ start_wall_time

double Timer::start_wall_time
private

Value of the wall time when start() was called the last time or when the object was created and no stop() was issued in between.

Definition at line 185 of file timer.h.

◆ cumulative_time

double Timer::cumulative_time
private

Accumulated time for all previous start()/stop() cycles. The time for the present cycle is not included.

Definition at line 191 of file timer.h.

◆ cumulative_wall_time

double Timer::cumulative_wall_time
private

Accumulated wall time for all previous start()/stop() cycles. The wall time for the present cycle is not included.

Definition at line 197 of file timer.h.

◆ last_lap_time

double Timer::last_lap_time
private

Stores the last lap time; the time between the last start()/stop() cycle.

Definition at line 202 of file timer.h.

◆ running

bool Timer::running
private

Store whether the timer is presently running.

Definition at line 207 of file timer.h.

◆ mpi_communicator

MPI_Comm Timer::mpi_communicator
private

Store whether the timer is presently running.

Definition at line 212 of file timer.h.

◆ sync_wall_time

bool Timer::sync_wall_time
private

Store whether the wall time is synchronized between machines.

Definition at line 218 of file timer.h.

◆ mpi_data

Utilities::MPI::MinMaxAvg Timer::mpi_data
private

A structure for parallel wall time measurement that includes the minimum time recorded among all processes, the maximum time as well as the average time defined as the sum of all individual times divided by the number of MPI processes in the MPI_Comm.

Definition at line 226 of file timer.h.


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