RFR: 8291550: RISC-V: jdk uses misaligned memory access when AvoidUnalignedAccess enabled [v9]
Vladimir Kempik
vkempik at openjdk.org
Thu May 11 08:07:50 UTC 2023
On Thu, 11 May 2023 07:15:13 GMT, Fei Yang <fyang at openjdk.org> wrote:
>> Before the PR
>>
>>
>> Benchmark Mode Cnt Score Error Units
>> StringEquals.almostEqual avgt 25 1214.131 ± 4.400 ns/op
>> StringEquals.almostEqualUTF16 avgt 25 1213.310 ± 7.156 ns/op
>> StringEquals.different avgt 25 20.102 ± 2.306 ns/op
>> StringEquals.differentCoders avgt 25 14.780 ± 1.147 ns/op
>> StringEquals.equal avgt 25 1218.393 ± 5.275 ns/op
>> StringEquals.equalsUTF16 avgt 25 1216.750 ± 4.383 ns/op
>>
>>
>>
>> With this PR
>>
>>
>> Benchmark Mode Cnt Score Error Units
>> StringEquals.almostEqual avgt 25 28.584 ± 1.178 ns/op
>> StringEquals.almostEqualUTF16 avgt 25 28.375 ± 1.052 ns/op
>> StringEquals.different avgt 25 19.572 ± 1.031 ns/op
>> StringEquals.differentCoders avgt 25 14.969 ± 2.348 ns/op
>> StringEquals.equal avgt 25 28.603 ± 0.148 ns/op
>> StringEquals.equalsUTF16 avgt 25 29.217 ± 1.969 ns/op
>>
>>
>> Xor moved
>>
>>
>> Benchmark Mode Cnt Score Error Units
>> StringEquals.almostEqual avgt 25 28.455 ± 1.068 ns/op
>> StringEquals.almostEqualUTF16 avgt 25 28.244 ± 0.920 ns/op
>> StringEquals.different avgt 25 18.940 ± 0.831 ns/op
>> StringEquals.differentCoders avgt 25 14.566 ± 1.298 ns/op
>> StringEquals.equal avgt 25 27.891 ± 0.606 ns/op
>> StringEquals.equalsUTF16 avgt 25 28.294 ± 0.913 ns/op
>>
>>
>> second run of Xor moved:
>>
>>
>> Benchmark Mode Cnt Score Error Units
>> StringEquals.almostEqual avgt 25 28.687 ± 1.170 ns/op
>> StringEquals.almostEqualUTF16 avgt 25 28.909 ± 1.518 ns/op
>> StringEquals.different avgt 25 19.400 ± 2.132 ns/op
>> StringEquals.differentCoders avgt 25 13.582 ± 0.249 ns/op
>> StringEquals.equal avgt 25 29.025 ± 1.139 ns/op
>> StringEquals.equalsUTF16 avgt 25 30.509 ± 2.931 ns/op
>>
>>
>> Third run of last two tests:
>>
>>
>> Benchmark Mode Cnt Score Error Units
>> StringEquals.equal avgt 25 29.196 ± 1.380 ns/op
>> StringEquals.equalsUTF16 avgt 25 28.642 ± 1.286 ns/op
>>
>> hard to say
>
> Thanks for trying this out. Another issue here is that 8-byte memory accesses at address a1/a2 would exceed the range for strings whose size is smaller than wordSize. I am not quite sure whether that is safe to do. Could we just incorporate changes which only resolves the unaligned access problem here?
On an fpga I can see these numbers with perfnorm profiler:
Just this PR:
Secondary result "org.openjdk.bench.java.lang.StringEquals.equal:IPC":
1.245 ±(99.9%) 0.037 insns/clk [Average]
(min, avg, max) = (1.234, 1.245, 1.258), stdev = 0.010
CI (99.9%): [1.209, 1.282] (assumes normal distribution)
This PR + moving xor:
Secondary result "org.openjdk.bench.java.lang.StringEquals.equal:IPC":
1.239 ±(99.9%) 0.050 insns/clk [Average]
(min, avg, max) = (1.224, 1.239, 1.253), stdev = 0.013
CI (99.9%): [1.190, 1.289] (assumes normal distribution)
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/13645#discussion_r1190785062
More information about the hotspot-dev
mailing list