RFR 8243491: Implementation of Foreign-Memory Access API (Second Incubator)
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Wed Apr 29 20:23:41 UTC 2020
Many thanks Peter,
my preference would be for adding the benchmark now, and come back to
fix this post integration. The MemoryScope code is finicky and getting
confidence that the code is race-free takes time and I'd prefer not to
change that during the course of this RFR.
Your approach seems promising, so let's keep working and thinking on it
on the side (and perhaps let's maybe go for it in the panama repo first,
to make sure we don't add regressions).
Sounds like a plan?
Cheers
Maurizio
On 29/04/2020 20:19, Peter Levart wrote:
> Hi Maurizio,
>
> On 4/29/20 2:41 AM, Maurizio Cimadamore wrote:
>> The current implementation has performances that are on par with the
>> previous acquire-based implementation, and also on par with what can
>> be achieved with Unsafe. We do have a micro benchmark in the patch
>> (see ParallelSum (**)) which tests this, and I get _identical_
>> numbers even if I _comment_ the body of acquire/release - so that no
>> contention can happen; so, I'm a bit skeptical overall that
>> contention on acquire/release is the main factor at play here - but
>> perhaps we need more targeted benchmarks.
>
> So I modified your benchmark (just took out the relevant parts) and
> added some benchmarks that exhibit Stream.findAny() and
> Stream.findFirst(). As I anticipated, the results for parallel stream
> variants were slowing the benchmark down, so I had to reduce the
> number of elements by a factor of 16 to get results in reasonable time:
>
> http://cr.openjdk.java.net/~plevart/jdk-dev/8243491_MemoryScope/ParallelSum.java
>
>
> I then swapped-in the alternative implementation of MemoryScope (note
> that this is not a whole implementation - the dup() method is missing):
>
> http://cr.openjdk.java.net/~plevart/jdk-dev/8243491_MemoryScope/MemoryScope.java
>
>
> ...and I got these results:
>
> i7 2600K (4 cores / 8 threads)
>
> with proposed MemoryScope:
>
> Benchmark Mode Cnt Score Error Units
> ParallelSum.find_any_stream_parallel avgt 10 1332.687 ± 733.535
> ms/op
> ParallelSum.find_any_stream_serial avgt 10 440.260 ± 3.110
> ms/op
> ParallelSum.find_first_loop_serial avgt 10 5.809 ± 0.044
> ms/op
> ParallelSum.find_first_stream_parallel avgt 10 2070.318 ± 41.072
> ms/op
> ParallelSum.find_first_stream_serial avgt 10 440.034 ± 4.672
> ms/op
> ParallelSum.sum_loop_serial avgt 10 5.647 ± 0.055
> ms/op
> ParallelSum.sum_stream_parallel avgt 10 5.314 ± 0.294
> ms/op
> ParallelSum.sum_stream_serial avgt 10 19.179 ± 0.136
> ms/op
>
> with alternative MemoryScope:
>
> Benchmark Mode Cnt Score Error Units
> ParallelSum.find_any_stream_parallel avgt 10 80.280 ± 13.183
> ms/op
> ParallelSum.find_any_stream_serial avgt 10 317.388 ± 2.787 ms/op
> ParallelSum.find_first_loop_serial avgt 10 5.790 ± 0.038 ms/op
> ParallelSum.find_first_stream_parallel avgt 10 117.925 ± 1.747 ms/op
> ParallelSum.find_first_stream_serial avgt 10 315.076 ± 5.725 ms/op
> ParallelSum.sum_loop_serial avgt 10 5.652 ± 0.042 ms/op
> ParallelSum.sum_stream_parallel avgt 10 4.881 ± 0.053 ms/op
> ParallelSum.sum_stream_serial avgt 10 19.143 ± 0.035 ms/op
>
>
> So here it is. The proof that contention does occur.
>
> Regards, Peter
>
More information about the core-libs-dev
mailing list