


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.)
) 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 Standard Index
Return to MPI Standard Index
Return to MPI Forum Home Page
Return to MPI Home Page
MPI-2.0 of July 18, 1997
HTML Generated on November 1, 2000