[llvm-dev] RFC: Adding a !thread.private metadata
Philip Reames via llvm-dev
llvm-dev at lists.llvm.org
Mon Sep 17 10:58:17 PDT 2018
On 09/16/2018 05:03 AM, Nicolai Hähnle via llvm-dev wrote:
> On 15.09.2018 01:13, Philip Reames via llvm-dev wrote:
>> Add a new metadata type which applies to memory accessing
>> instructions (store, load, atomicrmw, etc...) and indicates that the
>> memory location accessed is known to be accessed only by a single
>> thread everywhere it is dereferenceable.
>
> What are the implications for how this interacts with fences and atomics?
Great question, hadn't thought about it honestly.
>
> For example, if there is a store to a !thread.private memory location
> before an atomic with release semantics, are we allowed to move the
> store to after the atomic?
I think this should be allowed. Because it's known to only be read by a
single thread, it *can't* be part of any synchronization between threads
and thus should be freely reorderable. The slightly tricky one is a
single_thread fence. I think that variant may need to prevent the
reordering. Having single_thread have *stronger* reordering semantics
than the cross thread variant feels really ugly though.
The initial implementation would treat them as strongly ordered. (Just
for simplicity).
>
> It sounds like perhaps this would be allowed, and this could be useful
> for modeling non-coherent memory accesses in GLSL and SPIR-V.
Can you spell out the semantics you're looking for? If you have a form
of memory access which is shared, just unordered, I suspect NotAtomic or
Unordered are probably a better fit, but I'd need more information to
really tell.
>
> Cheers,
> Nicolai
>
More information about the llvm-dev
mailing list