Re: [Mpi3-rma] Memory barriers in MPI_WIN_LOCK_ALL mode
Doesn't that specific usage have undefined results? (put/get targeting the same location during one epoch?)
-----Original Message----- From: [email protected] [mailto:mpi3-rma- [email protected]] On Behalf Of Pavan Balaji Sent: Monday, October 29, 2012 11:39 PM To: [email protected] Subject: [Mpi3-rma] Memory barriers in MPI_WIN_LOCK_ALL mode
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 _______________________________________________ mpi3-rma mailing list [email protected] http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-rma
participants (1)
-
Underwood, Keith D