Public Member Functions | |
Timer () | |
Timer (MPI_Comm mpi_communicator) | |
void | start () |
double | stop () |
void | reset () |
double | operator() () const |
double | wall_time () const |
Private Attributes | |
double | start_time |
double | start_time_children |
double | start_wall_time |
double | cumulative_time |
double | cumulative_wall_time |
bool | running |
MPI_Comm | mpi_communicator |
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. On a SUN workstation, this information is exact to about a microsecond.
Use of this class is as you might expect by looking at the member functions:
Time 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-12 and step-29 tutorial programs.
Timer::Timer | ( | ) |
Constructor. Starts the timer at 0 sec.
Timer::Timer | ( | MPI_Comm | mpi_communicator | ) |
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.
This constructor is only available if the deal.II compiler is an MPI compiler.
void Timer::start | ( | ) |
Re-start the timer at the point where it was stopped. This way a cumulative measurement of time is possible.
double Timer::stop | ( | ) |
Sets the current time as next starting time and return the elapsed time in seconds.
void Timer::reset | ( | ) |
Stop the timer if necessary and reset the elapsed time to zero.
double Timer::operator() | ( | ) | const |
Access to the current CPU time without disturbing time measurement. The elapsed time is returned in units of seconds.
double Timer::wall_time | ( | ) | const |
Access to the current wall time without disturbing time measurement. The elapsed time is returned in units of seconds.
double Timer::start_time [private] |
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.
double Timer::start_wall_time [private] |
double Timer::cumulative_time [private] |
Accumulated time for all previous start()/stop() cycles. The time for the present cycle is not included.
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.
bool Timer::running [private] |
Store whether the timer is presently running.
MPI_Comm Timer::mpi_communicator [private] |
Store whether the timer is presently running.