[foreign-memaccess+abi] RFR: Performance improvement to unchecked segment ofNativeRestricted [v2]

Radoslaw Smogura github.com+7535718+rsmogura at openjdk.java.net
Mon Jan 18 21:45:55 UTC 2021


On Mon, 18 Jan 2021 10:57:19 GMT, Maurizio Cimadamore <mcimadamore at openjdk.org> wrote:

>>>  could not find such optimization in case of global segment and long numbers.
>> 
>> The optimization happens on segment construction - if the segment size is < Integer.MAX_VALUE, the AbstractMemorySegment::defaultAccessMode method appends the SMALL flag to the set of segment flags. This flag is then consulted many times, typically before long addition/multiplications have to be performed.
>>> 
>>> From the other hand I have put together this PR and previous with Unsafe access, disabled alignment checks by settings alignment to 1, and global memory segment rocks. I added benchmark method to show performance of it.
>> 
>> Alignment check is an outstanding issue for the API - hotspot doesn't optimize those very well. See also:
>> 
>> https://mail.openjdk.java.net/pipermail/panama-dev/2021-January/011794.html
>
> Would you mind pasting the benchmark results before/after the patch, now that the benchmark has been fixed? Thanks!

After patch
Benchmark                                         Mode  Cnt  Score    Error  Units
LoopOverNonConstant.BB_get                        avgt   30  3.915 ?  0.012  ns/op
LoopOverNonConstant.BB_loop                       avgt   30  0.230 ?  0.001  ms/op
LoopOverNonConstant.global_segment_get            avgt   30  3.878 ?  0.001  ns/op
LoopOverNonConstant.global_segment_loop           avgt   30  0.400 ?  0.002  ms/op
LoopOverNonConstant.global_segment_loop_no_align  avgt   30  0.248 ?  0.001  ms/op
LoopOverNonConstant.segment_get                   avgt   30  5.497 ?  0.015  ns/op
LoopOverNonConstant.segment_loop                  avgt   30  0.229 ?  0.001  ms/op
LoopOverNonConstant.segment_loop_readonly         avgt   30  0.239 ?  0.001  ms/op
LoopOverNonConstant.segment_loop_slice            avgt   30  0.241 ?  0.001  ms/op
LoopOverNonConstant.segment_loop_static           avgt   30  0.229 ?  0.001  ms/op
LoopOverNonConstant.unsafe_get                    avgt   30  3.434 ?  0.006  ns/op
LoopOverNonConstant.unsafe_loop                   avgt   30  0.229 ?  0.001  ms/op
before patch
Benchmark                                         Mode  Cnt  Score    Error  Units
LoopOverNonConstant.BB_get                        avgt   30  3.906 ?  0.012  ns/op
LoopOverNonConstant.BB_loop                       avgt   30  0.231 ?  0.001  ms/op
LoopOverNonConstant.global_segment_get            avgt   30  4.125 ?  0.012  ns/op
LoopOverNonConstant.global_segment_loop           avgt   30  0.596 ?  0.004  ms/op
LoopOverNonConstant.global_segment_loop_no_align  avgt   30  0.489 ?  0.002  ms/op
LoopOverNonConstant.segment_get                   avgt   30  5.507 ?  0.017  ns/op
LoopOverNonConstant.segment_loop                  avgt   30  0.231 ?  0.001  ms/op
LoopOverNonConstant.segment_loop_readonly         avgt   30  0.238 ?  0.001  ms/op
LoopOverNonConstant.segment_loop_slice            avgt   30  0.242 ?  0.001  ms/op
LoopOverNonConstant.segment_loop_static           avgt   30  0.230 ?  0.001  ms/op
LoopOverNonConstant.unsafe_get                    avgt   30  3.442 ?  0.008  ns/op
LoopOverNonConstant.unsafe_loop                   avgt   30  0.230 ?  0.001  ms/op

-------------

PR: https://git.openjdk.java.net/panama-foreign/pull/437


More information about the panama-dev mailing list