[mpiwg-rma] FENCE local completion requirements

Balaji, Pavan balaji at anl.gov
Mon Sep 29 23:09:56 CDT 2014


On Sep 29, 2014, at 11:03 PM, Rajeev Thakur <thakur at mcs.anl.gov> wrote:

>> Let me rephrase —
>> 
>> Is the sentence in the standard to be read as: if there are preceding PUT/GET operations, it *will* be a barrier?
>> 
>> I don’t think the sentence says that.  I agree that an MPI implementation has to do that, but the standard is not explicit about it.
>> 
>> — Pavan
> 
> Yes, that's what the standard says. And it says that because the implementation has no other choice if it has to maintain fence semantics.
> 
> The standard says
> 
> "A fence call usually entails a barrier synchronization: a process completes a call to MPI_WIN_FENCE only after all other processes in the group entered their matching call."
> 
> Then it qualifies the "usually" by giving the case where it doesn't act as a barrier:
> 
> "However, a call to MPI_WIN_FENCE that is known not to end any epoch (in particular, a call with assert equal to MPI_MODE_NOPRECEDE) does not necessarily act as a barrier."
> 
> Which means in all other cases, it acts as a barrier.

The right way to phrase that would have been:

A call to MPI_WIN_FENCE that ends an epoch entails a barrier synchronization: a process completes a call to MPI_WIN_FENCE only after all other processes in the group entered their matching call.  A call to MPI_WIN_FENCE that is known not to end any epoch (in particular, a call with assert equal to MPI_MODE_NOPRECEDE) does not necessarily act as a barrier.

If this was the intention, it should be fixed in the standard.

Now to my next point — barrier synchronization only means that other processes have entered WIN_FENCE, not returned from WIN_FENCE.  This means that they might not have completed all operations at the target.

If we change my initial example to the following:

MPI_WIN_FENCE(win1)
MPI_PUT(win1)
MPI_WIN_FENCE(win1)

MPI_WIN_LOCK(win2)
MPI_GET(win2)
MPI_WIN_UNLOCK(win2)

.. the GET might not see the data written by PUT, since the WIN_FENCE only guarantees local completion and barrier semantics of the second FENCE only ensures that the target has “called” FENCE, not “returned" from FENCE.

  — Pavan

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



More information about the mpiwg-rma mailing list