Up: Synchronization Calls
Next: Miscellaneous Clarifications
Previous: Lock
The assert argument in the calls
MPI_WIN_POST, MPI_WIN_START, MPI_WIN_FENCE
and MPI_WIN_LOCK is used to provide assertions on the context of the
call that may be used to optimize performance. The assert argument does not change program
semantics if it provides correct information on the program ---
it is erroneous to provides incorrect information.
Users may always provide
assert = 0 to indicate a general case, where no guarantees are made.
Advice to users.
Many implementations may not take advantage of the information in assert; some of the information is relevant only for noncoherent, shared memory machines. Users should consult their implementation manual
to
find which information is useful on each system. On the other hand,
applications that provide correct
assertions whenever applicable are portable and will
take advantage of assertion specific optimizations, whenever available.
( End of advice to users.)
Advice
to implementors.
Implementations can always ignore the assert argument.
Implementors should
document which assert values are significant on their implementation.
( End of advice to implementors.)
assert is the bit-vector OR of zero or more of the following
integer constants:
MPI_MODE_NOCHECK, MPI_MODE_NOSTORE,
MPI_MODE_NOPUT,
MPI_MODE_NOPRECEDE and MPI_MODE_NOSUCCEED.
The significant options are listed below, for each call.
Advice to users.
C/C++ users can use bit vector or (
) to combine these constants;
Fortran 90 users
can use the bit-vector IOR intrinsic.
Fortran 77 users can use (nonportably)
bit
vector IOR on systems that support it. Alternatively, Fortran users can
portably use integer addition to OR the constants (each constant should
appear at most once in the addition!).
( End of advice to users.)
-
-
MPI_WIN_START:
-
-
MPI_MODE_NOCHECK
--- the matching calls to MPI_WIN_POST
have
already completed on all target processes when the call to
MPI_WIN_START is made.
The nocheck option can be
specified in a start call if and only if it is specified in each
matching post call.
This is similar to the optimization
of ``ready-send'' that may save a handshake when the handshake is
implicit in the code.
(However, ready-send is matched by a regular receive, whereas
both start and post must specify the nocheck option.)
-
-
MPI_WIN_POST:
-
-
MPI_MODE_NOCHECK
--- the matching calls to MPI_WIN_START
have not yet occurred
on any origin processes when the call to
MPI_WIN_POST is made.
The nocheck option can be specified by a post call if and only if it
is specified by each matching start call.
-
-
MPI_MODE_NOSTORE
--- the local window was not updated by
local
stores (or local get or receive calls) since
last synchronization. This may avoid the need for cache synchronization at
the
post call.
-
-
MPI_MODE_NOPUT
--- the local window will not be updated by
put or accumulate
calls after the post call, until the ensuing (wait) synchronization.
This may avoid the need for cache synchronization at the wait call.
-
-
MPI_WIN_FENCE:
-
-
MPI_MODE_NOSTORE
--- the local window was not updated by
local stores (or local get or receive calls) since last synchronization.
-
-
MPI_MODE_NOPUT
--- the local window will not be updated
by put or accumulate calls after
the fence call, until the ensuing (fence) synchronization.
-
-
MPI_MODE_NOPRECEDE
--- the fence does not complete any
sequence of locally issued RMA calls. If this assertion is given by
any process in the window group, then it must be given by all
processes in the group.
-
{ MPI_MODE_NOSUCCEED}
-
--- the fence does not start any sequence
of locally issued RMA calls. If the assertion is given by any process
in the window group, then it must be given by all processes in the group.
-
-
MPI_WIN_LOCK:
-
-
MPI_MODE_NOCHECK
--- no other process holds, or will attempt
to acquire a
conflicting lock, while the caller holds the window lock. This is useful
when
mutual exclusion is achieved by other means, but the coherence operations
that
may be attached to the lock and unlock calls are still required.
Advice to users.
Note that the nostore and noprecede flags provide
information on what happened before
the call; the noput and nosucceed
flags provide information on what will happen
after the call.
( End of advice to users.)
Up: Synchronization Calls
Next: Miscellaneous Clarifications
Previous: Lock
Return to MPI-2.1 Standard Index
Return to MPI Forum Home Page
MPI-2.0 of July 1, 2008
HTML Generated on July 6, 2008