RFR: 8309502: RISC-V: String.indexOf intrinsic may produce misaligned memory loads
Fei Yang
fyang at openjdk.org
Wed Jun 7 06:26:54 UTC 2023
On Mon, 5 Jun 2023 20:52:01 GMT, Vladimir Kempik <vkempik at openjdk.org> wrote:
> Please review this attempt to remove misaligned loads in String.indexOf intrinsic on RISC-V
>
> Initialy found these misaligned loads when profiling finagle-http test from renaissance suite.
> The majority of trp_lam events (about 66k per finagle-http round) came at line 706 (https://github.com/openjdk/jdk/pull/14320/files#diff-35eb1d2f1e2f0514dd46bd7fbad49ff2c87703d5a3041a6433956df00a3fe6e6L706)
> The other two produced about 100 events combined.
> Later I've found this can partially be reproduced with StringIndexOf.advancedWithMediumSub.
> Numbers on hifive before and after applying the patch:
>
>
> Benchmark Mode Cnt Score Error Units
> StringIndexOf.advancedWithMediumSub avgt 25 47031.406 ± 144.005 ns/op
>
>
> After:
>
> Benchmark Mode Cnt Score Error Units
> StringIndexOf.advancedWithMediumSub avgt 25 4256.830 ± 23.075 ns/op
>
>
> Testing: tier1 is clean on hifive, more tbd.
Hi, I searched and found that we have four direct callers of `C2_MacroAssembler::string_indexof_linearscan`: three in file riscv.ad (by string_indexof_conUU, string_indexof_conLL and string_indexof_conUL) and one by `C2_MacroAssembler::string_indexof`. Did you check which one is triggering these unaligned accesses? I am not sure but it looks to me that the three direct callers in file riscv.ad are less likely to have such an issue. If that is true, we might need some distinugish among those callers for better performance. Also, it would be better to have some numbers on other venders like T-head.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/14320#issuecomment-1579972351
More information about the hotspot-compiler-dev
mailing list