DIP 1024--Shared Atomics--Community Review Round 1

Gregor Mückl gregormueckl at gmx.de
Tue Oct 15 10:25:54 UTC 2019


On Saturday, 12 October 2019 at 20:52:45 UTC, Jonathan M Davis 
wrote:
> In the case of shared, in general, it's not thread-safe to read 
> or write to such a variable without either using atomics or 
> some other form of thread synchronization that is currently 
> beyond the ability of the compiler to make guarantees about and 
> will likely always be beyond the ability of the compiler to 
> make guarantees about except maybe in fairly restricted 
> circumstances.

A shared variable may not need any synchronization at all, 
depending on the algorithm it is used in.

There is a class of optimized algorithms that act like gathering 
operations. You mostly find them on GPUs because they map quite 
naturally to that hardware architecture, but they can also be 
implemented on CPUs with multiple threads. The core idea is in 
every case that you generate a set of output values in parallel 
in such a way that each value in the output is generated by at 
most one of the running threads. So there is no need to 
synchronize memory writes when the underlying hardware 
architecture provides sufficient cache coherency guarantees. All 
the threads share the same input, which obviously must not be 
modified.

A compiler cannot possibly be smart enough to prove that 
synchronization is not required for these kinds of algorithms. 
And any form of enforced synchronization (explicit or implicit) 
would significantly affect performance. So how would you express 
this implicit synchronization by mathematical properties to the 
compiler? Would the whole implementation have to be marked as 
@safe?


More information about the Digitalmars-d mailing list