Approvals: 0/1The Previously approved version (2015/04/17 11:45) is available.
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 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 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
Serial codes
fortran
SYSTEM_CLOCK DATE_AND_TIME CPU_TIME