[jmm-dev] jdk9 APIs [Fences specifically]
Doug Lea
dl at cs.oswego.edu
Thu Aug 13 23:19:37 UTC 2015
On 08/13/2015 05:04 PM, Hans Boehm wrote:
> I don't think a fence-based approach works. Deferring all the stores to the
> end of the loop fundamentally remains correct, even with the StoreStore
> fence, since it's consistent with the producer just running very fast for a
> while. The constraint you're trying to enforce has nothing to do with
> ordering.
I must be missing something fundamental about C++ specs. Are C++
compilers allowed to ignore release fences in between writes
to the same variables? In unrolled form, that's what this would
amount to here.
>
> Aside from not working correctly, you end up slowing down ARM code in ways
> that are entirely unnecessary, by inserting "dmb ishld" or "dmb ishst"
> fences everywhere. (How expensive they are varies. On a number of
> implementations they basically seem to be full fences.)
Right. It does put the programmer in control though; for example
if ((i % 100) == 99) storeStoreFence()
Considering that the goal is communication latency reduction at
the expense of throughput, only the programmer would be able
to make these tradeoffs.
-Doug
More information about the jmm-dev
mailing list