RFR: 8350093: RISC-V: java/math/BigInteger/LargeValueExceptions.java timeout with COH

Fei Yang fyang at openjdk.org
Fri Feb 14 13:29:48 UTC 2025


Hi, Please review this change resolving a timeout issue in `LargeValueExceptions.squareDefiniteOverflow()`.

This issue only happens on platforms with slow unaligned memory accesses like Unmatched or Premier-P550 SBCs.
Async profiler shows major time was spent in multiplyToLen stub code. When AvoidUnalignedAccesses is enabled,
there is a simple alignment check, which assumes 8-byte alignment for base_offset of int arrays. But this is
not the case with COH: base_offset is 12 bytes instead of 16 bytes for int arrays.

Patch simply makes it explicit about the requirement of base_offset. Sanity tested on Premier P550.
No obvious change witnessed on JMH after this change:

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

Without COH:

Benchmark                               (maxNumbits)  Mode  Cnt        Score      Error  Units
BigIntegers.SmallShifts.testLeftShift             32  avgt   15      138.939 ±    2.246  ns/op
BigIntegers.SmallShifts.testLeftShift            128  avgt   15       88.391 ±    1.210  ns/op
BigIntegers.SmallShifts.testLeftShift            256  avgt   15      117.590 ±    1.398  ns/op
BigIntegers.SmallShifts.testRightShift            32  avgt   15      150.338 ±    1.961  ns/op
BigIntegers.SmallShifts.testRightShift           128  avgt   15      104.540 ±    5.636  ns/op
BigIntegers.SmallShifts.testRightShift           256  avgt   15      126.082 ±    1.756  ns/op
BigIntegers.testAdd                              N/A  avgt   15       97.513 ±   40.746  ns/op
BigIntegers.testGcd                              N/A  avgt   15  5409222.706 ± 5934.667  ns/op
BigIntegers.testHugeLargeDivide                  N/A  avgt   15      246.904 ±    1.552  ns/op
BigIntegers.testHugeSmallDivide                  N/A  avgt   15      248.997 ±    1.374  ns/op
BigIntegers.testHugeToString                     N/A  avgt   15     2421.432 ±   62.208  ns/op
BigIntegers.testLargeSmallDivide                 N/A  avgt   15      216.859 ±    1.760  ns/op
BigIntegers.testLargeToString                    N/A  avgt   15      425.653 ±   13.305  ns/op
BigIntegers.testLeftShift                        N/A  avgt   15     2265.137 ±   24.319  ns/op
BigIntegers.testMultiply                         N/A  avgt   15    15862.412 ±  417.880  ns/op <========
BigIntegers.testRightShift                       N/A  avgt   15      936.071 ±   15.247  ns/op
BigIntegers.testSmallToString                    N/A  avgt   15      322.350 ±   16.075  ns/op

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

With COH:

Benchmark                               (maxNumbits)  Mode  Cnt        Score       Error  Units
BigIntegers.SmallShifts.testLeftShift             32  avgt   15      117.991 ±     1.306  ns/op
BigIntegers.SmallShifts.testLeftShift            128  avgt   15      150.202 ±     0.922  ns/op
BigIntegers.SmallShifts.testLeftShift            256  avgt   15      105.895 ±     0.779  ns/op
BigIntegers.SmallShifts.testRightShift            32  avgt   15      127.582 ±     1.765  ns/op
BigIntegers.SmallShifts.testRightShift           128  avgt   15      171.976 ±     0.611  ns/op
BigIntegers.SmallShifts.testRightShift           256  avgt   15      118.938 ±     2.882  ns/op
BigIntegers.testAdd                              N/A  avgt   15       73.390 ±     1.368  ns/op
BigIntegers.testGcd                              N/A  avgt   15  5409885.951 ± 11493.243  ns/op
BigIntegers.testHugeLargeDivide                  N/A  avgt   15      135.854 ±    38.272  ns/op
BigIntegers.testHugeSmallDivide                  N/A  avgt   15      130.308 ±    24.959  ns/op
BigIntegers.testHugeToString                     N/A  avgt   15     2525.327 ±     8.116  ns/op
BigIntegers.testLargeSmallDivide                 N/A  avgt   15      158.357 ±     0.676  ns/op
BigIntegers.testLargeToString                    N/A  avgt   15      333.591 ±   102.890  ns/op
BigIntegers.testLeftShift                        N/A  avgt   15     2283.509 ±    22.843  ns/op
BigIntegers.testMultiply                         N/A  avgt   15    15635.504 ±   414.156  ns/op <========
BigIntegers.testRightShift                       N/A  avgt   15      927.502 ±    26.892  ns/op
BigIntegers.testSmallToString                    N/A  avgt   15      313.170 ±     6.514  ns/op
Finished running test 'micro:java.math.BigIntegers'

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

Commit messages:
 - 8350093: RISC-V: java/math/BigInteger/LargeValueExceptions.java timeout with COH

Changes: https://git.openjdk.org/jdk/pull/23631/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=23631&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8350093
  Stats: 17 lines in 1 file changed: 11 ins; 2 del; 4 mod
  Patch: https://git.openjdk.org/jdk/pull/23631.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/23631/head:pull/23631

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


More information about the hotspot-dev mailing list