RFR: 8356593: RISC-V: Small improvement to array fill stub [v2]
Anjian-Wen
duke at openjdk.org
Sat May 10 05:56:46 UTC 2025
> When working on [JDK-8351140](https://bugs.openjdk.org/browse/JDK-8351140), I witnessed possible misaligned memory access in array fill stub.
> We fill by element for short arrays (< 8 bytes), which assumes a heapword alignment[1]. But that is not guaranteed. This issue could be reproduced by running: `make test TEST="micro:vm.compiler.ArrayFill"`
> with `@Param("5") private int size;` on riscv platforms with slow misalgned memory accesses.
>
> [1] https://github.com/openjdk/jdk/blob/master/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp#L2141
>
> This fixes this issue by using a small loop to fill the elements for short arrays.
> Tier1-2 tested on linux-riscv64 platform. JMH result on P550 SBC for reference:
> 1. (`@Param("5") private int size;`):
>
> Before:
> Benchmark (size) Mode Cnt Score Error Units
> ArrayFill.fillByteArray 5 avgt 12 558.781 ± 1.396 ns/op
> ArrayFill.fillIntArray 5 avgt 12 29.346 ± 0.003 ns/op
> ArrayFill.fillShortArray 5 avgt 12 30.779 ± 0.004 ns/op
> ArrayFill.zeroByteArray 5 avgt 12 559.249 ± 1.909 ns/op
> ArrayFill.zeroIntArray 5 avgt 12 29.346 ± 0.002 ns/op
> ArrayFill.zeroShortArray 5 avgt 12 30.777 ± 0.006 ns/op
>
> After:
> Benchmark (size) Mode Cnt Score Error Units
> ArrayFill.fillByteArray 5 avgt 12 23.977 ± 0.004 ns/op
> ArrayFill.fillIntArray 5 avgt 12 29.343 ± 0.004 ns/op
> ArrayFill.fillShortArray 5 avgt 12 30.776 ± 0.005 ns/op
> ArrayFill.zeroByteArray 5 avgt 12 23.977 ± 0.002 ns/op
> ArrayFill.zeroIntArray 5 avgt 12 29.345 ± 0.005 ns/op
> ArrayFill.zeroShortArray 5 avgt 12 30.776 ± 0.004 ns/op
>
> 2. (`@Param("3") private int size;`):
>
> Before:
> Benchmark (size) Mode Cnt Score Error Units
> ArrayFill.fillByteArray 3 avgt 12 428.923 ± 0.409 ns/op
> ArrayFill.fillIntArray 3 avgt 12 28.629 ± 0.005 ns/op
> ArrayFill.fillShortArray 3 avgt 12 558.872 ± 2.641 ns/op
> ArrayFill.zeroByteArray 3 avgt 12 429.744 ± 2.049 ns/op
> ArrayFill.zeroIntArray 3 avgt 12 28.628 ± 0.002 ns/op
> ArrayFill.zeroShortArray 3 avgt 12 557.682 ± 1.661 ns/op
>
> After:
> Benchmark (size) Mode Cnt Score Error Units
> ArrayFill.fillByteArray 3 avgt 12 21.471 ± 0.002 ns/op
> ArrayFill.fillIntArray 3 avgt 12 28.631 ± 0.003 ns/op
> ArrayFill.fillShortArray 3 avgt 12 20.436 ± 0.288 n...
Anjian-Wen has updated the pull request incrementally with one additional commit since the last revision:
register optimize
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/25135/files
- new: https://git.openjdk.org/jdk/pull/25135/files/a89a0ba3..a668825b
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=25135&range=01
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=25135&range=00-01
Stats: 6 lines in 1 file changed: 0 ins; 3 del; 3 mod
Patch: https://git.openjdk.org/jdk/pull/25135.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/25135/head:pull/25135
PR: https://git.openjdk.org/jdk/pull/25135
More information about the hotspot-compiler-dev
mailing list