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