# Timers and performance debugging

In MPI, timers are defined because existing timers are either inconvenient or do not provide adequate access to high resolution timers (See also Section 8.6 Timers and Synchronization in mpi-3.0 Standard.).

#### MPI_WTIME()

double MPI_Wtime(void)
DOUBLE PRECISION MPI_Wtime() BIND(C)
DOUBLE PRECISION MPI_WTIME()

MPI_WTIME returns a floating-point number of seconds, representing elapsed wallclock time since some time in the past. Generally, times can ONLY be compared within the same MPI-process. The times returned are local to the node that called them. Di fferent nodes need not to be synchronized. (MPI_WTIME_IS_GLOBAL is a Boolean variable that is 1 if synchronized and 0 if not. In Open MPI MPI_WTIME_IS_GLOBAL does not have a valid value since the clocks are not guaranteed to be synchronized.)

MPI_WTIME has to be called inside the MPI region

MPI_Init(&argc, &argv);
...
MPI_Finalize( );

otherwise its behavior is undefined.

#### MPI_WTICK()

double MPI_Wtick(void)
DOUBLE PRECISION MPI_Wtick() BIND(C)
DOUBLE PRECISION MPI_WTICK()

MPI_WTICK returns the resolution of MPI_WTIME in seconds, i.e. the time between successive clock ticks given in seconds.

#### Examples

In this example file, t1=MPI_WTIME() and t2=MPI_WTIME() enclose the region wich should be timed. There are two possibilities. Either a MPI_Barrier can be set before each time call. Then the time measured is the time needed that all MPI processes are finished. Or t1 and t2 are defined without a barrier, yielding the execution times for the individual processes.

#### omp_get_wtime

c example:

    double start = omp_get_wtime( );
Sleep(1000);
double end = omp_get_wtime( );
double wtick = omp_get_wtick( );

gives the time of your wrist watch.

gives the amount of time that the CPU is busy for a particular task from one call to the next.

# Serial codes

SYSTEM_CLOCK
DATE_AND_TIME
CPU_TIME
• doku/time.txt