Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: jseigh Newsgroups: comp.arch Subject: Re: Memory ordering Date: Thu, 5 Dec 2024 08:00:40 -0500 Organization: A noiseless patient Spider Lines: 58 Message-ID: References: <-rKdnTO4LdoWXKj6nZ2dnZfqnPWdnZ2d@supernews.com> <5yqdnU9eL_Y_GKv6nZ2dnZfqn_GdnZ2d@supernews.com> <2024Nov15.082512@mips.complang.tuwien.ac.at> <20241115152459.00004c86@yahoo.com> <2024Nov17.161752@mips.complang.tuwien.ac.at> <2024Dec3.100144@mips.complang.tuwien.ac.at> <3aa9f0a3d3dde86193abb1c01e52d03a@www.novabbs.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Thu, 05 Dec 2024 14:00:41 +0100 (CET) Injection-Info: dont-email.me; posting-host="edd06f8bb09e9ea65cd595d8c24ce90f"; logging-data="1706966"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/Bx+nEKcHtz7ZaySJ+rsix" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:wZCcyDg6htwmjYp3A+5s6QF5dJ4= Content-Language: en-US In-Reply-To: Bytes: 3884 On 12/5/24 02:44, Chris M. Thomasson wrote: > On 12/4/2024 8:13 AM, jseigh wrote: >> On 12/3/24 18:37, Stefan Monnier wrote: >>>>>                                            If there are places >>>>> in the code it doesn't know this can't happen it won't optimize >>>>> across it, more or less. >>>> >>>> The problem is HOW to TELL the COMPILER that these memory references >>>> are "more special" than normal--when languages give few mechanisms. >>> >>> We could start with something like >>> >>>      critical_region { >>>        ... >>>      } >>> >>> such that the compiler must refrain from any code motion within >>> those sections but is free to move things outside of those sections >>> as if >>> execution was singlethreaded. >>> >> >> C/C++11 already defines what lock acquire/release semantics are. >> Roughly you can move stuff outside of a critical section into it >> but not vice versa. >> >> Java uses synchronized blocks to denote the critical section. >> C++ (the society for using RAII for everything) has scoped_lock >> if you want to use RAII for your critical section.  It's not >> always obvious what the actual critical section is.  I usually >> use it inside its own bracket section to make it more obvious. >>    { std::scoped_lock m(mutex); >>      // .. critical section >>    } >> >> I'm not a big fan of c/c++ using acquire and release memory order >> directives on everything since apart from a few situations it's >> not intuitively obvious what they do in all cases.  You can >> look a compiler assembler output but you have to be real careful >> generalizing from what you see. > > The release on the unlock can allow some following stores and things to > sort of "bubble up before it? > > Acquire and release confines things to the "critical section", the > release can allow for some following things to go above it, so to speak. > This is making me think of Alex over on c.p.t. ! > > :^) > > Did I miss anything? Sorry Joe. > Maybe. For thread local non-shared data if the compiler can make that determination but I don't know if the actual specs say that. Joe Seigh