[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