Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
doku:time [2015/03/26 16:36] – ir | doku: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:// | [[http:// | ||
+ | |||
+ | ==== 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. |
- | < | + | 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( ); |
+ | </ | ||
+ | otherwise its behavior is undefined. | ||
=== MPI_WTICK() === | === MPI_WTICK() === | ||
< | < | ||
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: | ||
< | < | ||
- | #include " | ||
- | #include < | ||
- | #include < | ||
- | |||
- | int main() { | ||
double start = omp_get_wtime( ); | double start = omp_get_wtime( ); | ||
Sleep(1000); | Sleep(1000); | ||
double end = omp_get_wtime( ); | double end = omp_get_wtime( ); | ||
double wtick = omp_get_wtick( ); | double wtick = omp_get_wtick( ); | ||
+ | </ | ||
- | printf_s(" | + | ==== gettimeofday() ==== |
- | start, end, end - start); | + | gives the time of your wrist watch. |
- | printf_s(" | + | ==== clock ==== |
- | wtick, 1.0 / wtick); | + | 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 | ||
</ | </ | ||
+ |