[cpp-threads] Slightly revised memory model proposal (D2300)
Boehm, Hans
hans.boehm at hp.com
Thu Jun 28 01:24:40 BST 2007
In order not to leave this hanging for everyone else:
Sarita and I talked about this a bit.
The difficulty with starting with SC for race-free programs is that it's
not really possible to define the notion of a race in the absence of
some semantics for low level atomics, since "data-race-free in an SC
execution" is no longer quite the right notion.
Canonical example:
Thread 1:
x.store_relaxed(1);
r1 = y.load_relaxed();
if (r1 == 0) z = 17;
Thread 2:
y.store_relaxed(1);
r2 = x.load_relaxed();
if (r2 == 0) z = 42;
(Or use the variant with acquire/release instead of relaxed.)
This has no race in an SC interpretation, but has to be viewed as having
a race.
Low-level atomics really do complicate matters.
On the other hand, I think this can actually be repaired with the
addition of one more clause to 1.10p10.
In spite of one (somewhat enlightening) false start, I still believe
that, and hope to post more shortly.
Hans
> -----Original Message-----
> From: Sarita V Adve [mailto:sadve at cs.uiuc.edu]
> Sent: Tuesday, June 26, 2007 1:16 PM
> To: Boehm, Hans; C++ threads standardisation
> Subject: RE: [cpp-threads] Slightly revised memory model
> proposal (D2300)
>
> Ok. I am concerned there may be a fundamental problem with
> the current specification approach (given all of the other
> goals). I refer to the approach of describing the model as an
> all-encompassing definition of "consistent" and then showing
> that this definition implies SC for drf programs. I think
> that any such definition of "consistent" is likely to be too
> strong (e.g., it will prohibit aggressive speculation related
> optimizations) or too weak (it will allow examples like the
> one below).
>
> An approach that could work given all of the other goals is
> to define the model as "SC for data-race-free programs" +
> "something" catered to relaxed atomics. The latter
> "something" would be an expanded form of happens-before
> consistency, expanded to include intended ordering for
> relaxed atomics (it does not have to take into account
> examples like the one below, which are tricky to capture due
> to the data/control dependence stuff). Unfortunately, without
> more formal PPC spec, it seems difficult to formalize this
> latter ordering in a meaningful way.
>
> Sarita
>
>
> > -----Original Message-----
> > From: Boehm, Hans [mailto:hans.boehm at hp.com]
> > Sent: Tuesday, June 26, 2007 2:33 PM
> > To: Sarita V Adve; C++ threads standardisation
> > Subject: RE: [cpp-threads] Slightly revised memory model proposal
> > (D2300)
> >
> >
> >
> > > -----Original Message-----
> > > From: Sarita V Adve [mailto:sadve at cs.uiuc.edu]
> > > Sent: Tuesday, June 26, 2007 11:06 AM
> > > To: Boehm, Hans; C++ threads standardisation
> > > Subject: RE: [cpp-threads] Slightly revised memory model proposal
> > > (D2300)
> > >
> > > Hans,
> > >
> > > It was good to see you at FCRC.
> > >
> > > (1) There are a few comments from the previous round that
> are still
> > > not addressed here. For example, the definition of
> "consistent" does
> > > not seem sufficient to guarantee SC for some reasonable
> > > (non-controversial?) classes of programs. I assume you want
> > > T1: if (A==1) B=1;
> > > T2: if (B==1) A=1
> > > to be considered as data-race-free and so appear SC
> (initially A, B
> > > are 0 and neither is atomic). However, I don't see
> anything in the
> > > consistency definition that will preclude both T1 and T2
> reading 1
> > > and writing 1. This has nothing to do with any definition of
> > > happens-before since SC executions of this program do not
> have any
> > > conflicting accesses.
> > I see the problem. We attempted to address this in ancient
> versions
> > of the model but somehow this got lost. Thanks for catching it
> > (again).
> >
> > We are sort of addressing the corresponding issue for
> relaxed atomics,
> > after Jeremy pointed it out. But this form is clearly even more
> > important.
> >
> > I will either post a revision or give you a call after
> thinking about
> > it a bit.
> >
> > >
> > > There are other issues, but may be moot in case I am
> > > misunderstanding your intent for the above. Perhaps it will be
> > > easier to talk on the phone since this has come up a few times?
> > >
> > > (2) Has someone verified from IBM architects that Peter Dimov's
> > > fetch_add example actually works with PPC? Otherwise,
> that's a lot
> > > of complexity in the new synchronizes-with definition for
> no return.
> > > Sorry to not have got back to you and others on this
> aspect earlier,
> > > but I am not sure the current modification is the best
> one for this
> > > (need IBM's answer before further discussion on this).
> > Good question. There are some other cases currently under
> discussion
> > where I also don't fully understand the hardware constraints. It's
> > unclear whether this should apply to "relaxed" RMW operations. My
> > feeling is that we should provide whatever guarantees we
> can without
> > making this much more complicated still, or making it effectively
> > unimplementable on common hardware.
> >
> > Hans
> >
> > >
> > > Sarita
> > >
> > >
> > > > -----Original Message-----
> > > > From: Boehm, Hans [mailto:hans.boehm at hp.com]
> > > > Sent: Thursday, June 21, 2007 9:23 PM
> > > > To: C++ threads standardisation
> > > > Cc: Sarita V Adve
> > > > Subject: RE: [cpp-threads] Slightly revised memory
> model proposal
> > > > (D2300)
> > > >
> > > > Here are the latest revisions of:
> > > >
> > > > The D2300 memory model. I sort of followed Lawrence's
> > > semi-suggestion
> > > > and included sc stores (not loads) with RMW operations in
> > defining
> > > > synchronizes with. I also cleaned up the discussion of
> race-free
> > > > executions in a way that I think is necessary, but may
> > > require Clark
> > > > to clean up after my standardese again.
> > > >
> > > > Some text (mm_rules) to be included in the atomics proposal
> > > to explain
> > > > how it meshes with the memory model.
> > > >
> > > > The sequential consistency proof updated to reflect the
> > > memory model
> > > > revisions, and hopefully fixing some other issues.
> > > >
> > > > Further bug reports would be appreciated. The C++ paper
> > > deadline is
> > > > officially tomorrow.
> > > >
> > > > Hans
> > > >
> > >
> >
>
More information about the cpp-threads
mailing list