Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revisionLast revisionBoth sides next revision | ||
doku:time [2015/03/26 16:42] – [omp_get_wtime] ir | doku:time [2015/04/17 11:45] – [Hybrid OMP and MPI] ir | ||
---|---|---|---|
Line 5: | Line 5: | ||
[[http:// | [[http:// | ||
- | ==== MPI_WTIME() | + | ==== MPI internal functions ==== |
+ | |||
+ | === MPI_WTIME() === | ||
< | < | ||
double MPI_Wtime(void) | double MPI_Wtime(void) | ||
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. |
- | < | + | 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. |
- | 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 |
- | printf(" | + | < |
- | }</ | + | MPI_Init(& |
- | **Note:** 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.) Therefore, compare times ONLY within | + | MPI_Finalize( ); |
- | ==== MPI_WTICK() | + | </ |
+ | otherwise its behavior is undefined. | ||
+ | |||
+ | === MPI_WTICK() === | ||
< | < | ||
DOUBLE PRECISION MPI_Wtick() BIND(C) | DOUBLE PRECISION MPI_Wtick() BIND(C) | ||
Line 29: | Line 34: | ||
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. | ||
- | ==== omp_get_wtime | + | === Examples |
+ | In this {{: | ||
+ | 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: | c example: | ||
Line 38: | Line 47: | ||
double wtick = omp_get_wtick( ); | 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 | ||
+ | </ | ||
+ |