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.).
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.
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.
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.
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.
SYSTEM_CLOCK DATE_AND_TIME CPU_TIME