Integrated: 8356593: RISC-V: Small improvement to array fill stub

Anjian-Wen duke at openjdk.org
Mon May 12 03:04:59 UTC 2025


On Fri, 9 May 2025 03:19:11 GMT, Anjian-Wen <duke at openjdk.org> wrote:

> 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...

This pull request has now been integrated.

Changeset: d7cb933b
Author:    Anjian-Wen <wenanjian at bytedance.com>
Committer: Fei Yang <fyang at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/d7cb933b89839b692f5562aeeb92076cd25a99f6
Stats:     69 lines in 1 file changed: 37 ins; 24 del; 8 mod

8356593: RISC-V: Small improvement to array fill stub

Reviewed-by: fyang

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

PR: https://git.openjdk.org/jdk/pull/25135


More information about the hotspot-compiler-dev mailing list