RFR: 8347489: RISC-V: Misaligned memory access with COH [v4]

Fei Yang fyang at openjdk.org
Wed Jan 15 08:23:04 UTC 2025


> Hi, please consider this change.
> 
> We have different base_offset for T_BYTE/T_CHAR (4-byte instead of 8-byte aligned) with COH. This causes misaligned memory accesses for several instrinsics like String.Compare or String.Equals. The reason is that we assume 8-byte alignment and process one 8-byte word starting at the first array element for each iteration in the main loop. As a result, we have performance regressions on platforms with slow misaligned memory accesses like Unmatched and Premier P550 SBCs.
> 
> PS: Same issue is there even without COH. base_offset for T_BYTE/T_CHAR is 20 (thus 4-byte aligned) when `UseCompressedClassPointers` is disabled in this case.
> 
> Correctness test on linux-riscv64:
> - [x] tier1 (TEST_VM_OPTS="-XX:+UnlockExperimentalVMOptions -XX:+UseCompactObjectHeaders") (release)
> - [x] tier1 (TEST_VM_OPTS="-XX:+UnlockExperimentalVMOptions -XX:-UseCompactObjectHeaders") (release)
> - [x] hotspot:tier1 (TEST_VM_OPTS="-XX:+UnlockExperimentalVMOptions -XX:+UseCompactObjectHeaders") (fastdebug)
> - [x] hotspot:tier1 (TEST_VM_OPTS="-XX:+UnlockExperimentalVMOptions -XX:-UseCompactObjectHeaders") (fastdebug)
> 
> Performance test on Premier P550 (-XX:+UseParallelGC -XX:+AlwaysPreTouch -Xms8g -Xmx8g):
> 
> 1. SPECjbb2005 Score Without Patch
> 1.1 -XX:-UseCompactObjectHeaders: 32666
> 1.2 -XX:+UseCompactObjectHeaders: 27610
> 
> 2. SPECjbb2005 Score With Patch
> 2.1 -XX:-UseCompactObjectHeaders: 32820
> 2.2 -XX:+UseCompactObjectHeaders: 34179

Fei Yang has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains six additional commits since the last revision:

 - Merge branch 'master' into JDK-8347489
 - Comment
 - Fix assertions
 - Add assertions
 - Comment
 - 8347489: RISC-V: Misaligned memory access with COH

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/23053/files
  - new: https://git.openjdk.org/jdk/pull/23053/files/caa2d488..c093e451

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=23053&range=03
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=23053&range=02-03

  Stats: 14740 lines in 712 files changed: 6024 ins; 4717 del; 3999 mod
  Patch: https://git.openjdk.org/jdk/pull/23053.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/23053/head:pull/23053

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


More information about the hotspot-compiler-dev mailing list