On Sat, Oct 18, 2008 at 01:50:57PM +1100, Paul Mackerras wrote:
I think it can be called transitive. Basically (assumememory starts off zeroed)
CPU0
x := 1
CPU1
if (x == 1) {
fence
y := 1
}
CPU2
if (y == 1) {
fence
assert(x == 1)
}
As opposed to pairwise, which only provides an ordering of visibility between
any given two CPUs (so the store to y might be propogated to CPU2 after the
store to x, regardless of the fences).
Apparently pairwise ordering is more interesting than just a theoretical
thing, and not just restricted to Alpha's funny caches. It can allow for
arbitrary network propogating stores / cache coherency between CPUs. x86's
publically documented memory model supposedly could allow for such ordering
up until a year or so ago (when they clarified and strengthened it).
The section on cumulative ordering sounds like it might do the trick. But
I haven't really worked through exactly what it is saying ;)
--