[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
participants (1)
-
Pavan Balaji