Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
doku:time [2015/03/26 16:19] irdoku:time [2015/04/17 11:45] (current) – [Hybrid OMP and MPI] ir
Line 4: Line 4:
 or do not provide adequate access to high resolution timers (See also Section 8.6 Timers and Synchronization in  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]].). [[http://www.mpi-forum.org/docs/mpi-3.0/mpi30-report.pdf|mpi-3.0 Standard]].).
 +
 +==== MPI internal functions ====
  
 === MPI_WTIME() === === MPI_WTIME() ===
Line 13: Line 15:
  
 MPI_WTIME returns a floating-point number of seconds, representing elapsed wallclock MPI_WTIME returns a floating-point number of seconds, representing elapsed wallclock
-time since some time in the past and may be used as follows: +time since some time in the past. 
-<code>+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. 
-double starttime, endtime; +(MPI_WTIME_IS_GLOBAL is a Boolean variable that is 1 if synchronized and 0 if not. In Open MPI 
-starttime = MPI_Wtime(); +MPI_WTIME_IS_GLOBAL does not have a valid value since the clocks are not guaranteed to be synchronized.)  
-.... stuff to be timed ..+ 
-endtime = MPI_Wtime(); +MPI_WTIME has to be called inside the MPI region 
-printf("That took %f seconds\n",endtime-starttime); +<code> 
-}</code> +MPI_Init(&argc, &argv); 
-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.)+MPI_Finalize( ); 
 +</code> 
 +otherwise its behavior is undefined. 
 === MPI_WTICK() === === MPI_WTICK() ===
 <code>double MPI_Wtick(void) <code>double MPI_Wtick(void)
Line 28: Line 33:
 DOUBLE PRECISION MPI_WTICK()</code> DOUBLE PRECISION MPI_WTICK()</code>
 MPI_WTICK returns the resolution of MPI_WTIME in seconds, i.e. the time between successive clock ticks given in seconds.  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:
 +<code>
 +    double start = omp_get_wtime( );
 +    Sleep(1000);
 +    double end = omp_get_wtime( );
 +    double wtick = omp_get_wtick( );
 +</code>
 +
 +==== 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 ====
 +<code>
 +SYSTEM_CLOCK
 +DATE_AND_TIME
 +CPU_TIME
 +</code>
 +
  • doku/time.1427386775.txt.gz
  • Last modified: 2015/03/26 16:19
  • by ir