Albert Cohen <albert.co...@inria.fr> writes: > Jean-Marc Bourguet wrote: >>> -fmemory-model=single >>> Assume single threaded execution, which also means no signal >>> handlers. >>> -fmemory-model=fast >>> The user is responsible for all synchronization. Accessing >>> the same memory words from different threads may break >>> unpredictably. >>> -fmemory-model=safe >>> The compiler will do its best to protect you. >> >> With that description, I'd think that "safe" lets the user code assumes >> the sequential consistency model. I'd use -fmemory-model=conformant or >> something like that for the model where the compiler assumes that the user >> code respect the constraint led out for it by the standard. As which >> constraints are put on user code depend on the languages -- Java has its >> own memory model which AFAIK is more constraining than C++ and I think Ada >> has its own but my Ada programming days are too far for me to comment on >> it -- one may prefer some other name. > > I agree. Or even, =c++0x or =gnu++0x > > On the other hand, I fail to see the differen between =single and > =fast, and the explanation about "the same memory word" is not really > relevant as memory models typically tell you about concurrent accesses > to "different memory words".
What I was thinking is that the difference between =single and =fast is that =single permits store speculation. The difference between =fast and =safe/=conformant is that =fast permits writing to a byte by loading a word, changing the byte, and storing the word; in particular, =fast permits write combining in cases where =safe does not. Memory models may not talk about memory words, but they exist nevertheless. Ian