====== 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**. 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 {{: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