====== 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
[[http://www.mpi-forum.org/docs/mpi-3.0/mpi30-report.pdf|mpi-3.0 Standard]].).
==== MPI internal functions ====
=== 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**. Different 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 {{:doku:mpitime.c|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 internal calls ====
=== omp_get_wtime ===
c example:
double start = omp_get_wtime( );
Sleep(1000);
double end = omp_get_wtime( );
double wtick = omp_get_wtick( );
==== gettimeofday() ====
gives the time of your wrist watch.
==== clock ====
gives the amount of time that the CPU is busy for a particular task from one call to the next.
===== Hybrid OMP and MPI ======
{{ :doku:mpi_omp:hybrid.png?400 |}}
{{ :doku:mpi_omp:hybridbarrier.png?400 |}}
{{:doku:mpi_omp:hybridtime.c|}}
====== Serial codes ======
==== fortran ====
SYSTEM_CLOCK
DATE_AND_TIME
CPU_TIME