On Sat, Sep 22, 2012 at 10:17 AM, N.M. Maclaren
<nmm1@cam.ac.uk> wrote:
You have been given clear references to the sequence point rules, which
make it clear that there must be a sequence point between updates.
There is and can be no such sequence point when a location is updated
by passive one-sided communication and is later used in the process
that owns the data. Muttering about fences is irrelevant, because the
same applies even when you have them. The other MPI facilities were
carefully designed to ensure that there IS such a sequence point.
The same point applies to multithreaded programming, see Boehm's classic paper. And yet such multithreaded software underlies such core infrastructure as our operating systems kernels and high-performance databases. It is why C11 and C++11 have a memory model, allowing such necessary synchronization without everyone adopting inline assembly or compiler extensions. I fail to see how fences are irrelevant. They can obviously be used incorrectly, but ensuring a partial order on observations of memory operations is exactly what is needed to ensure correctness.