[Mpi3-rma] Memory barriers in MPI_WIN_LOCK_ALL mode

Pavan Balaji balaji at mcs.anl.gov
Mon Oct 29 22:38:40 CDT 2012


Consider the following program:

P0:
	MPI_WIN_LOCK_ALL();
	MPI_PUT(1, X, P1); /* Write 1 to variable X on P1 */
	/* wave hand to P1 */

P1:
	MPI_WIN_LOCK_ALL();
	/* wait for P0 to wave hand */
	MPI_GET(X, P1);  /* local operation */

If the MPI_GET on P1 does a local load operation internally, it is not 
memory consistent without a memory barrier.  Does this mean that I need 
to always do a memory barrier on all local GET operations to get the 
right value?

Note that this inefficiency does not go away by replacing the waving of 
the hand with an MPI_BARRIER for example, as it does not know which 
window, if any, the synchronization is for.

Note that this is likely only a theoretical exercise, since most (all?) 
compilers will do a memory barrier anyway if they see a function call 
(MPI_GET in this case).  But is MPI assuming that that's going to be the 
case for efficient execution?

  -- Pavan

-- 
Pavan Balaji
http://www.mcs.anl.gov/~balaji



More information about the mpiwg-rma mailing list