On Tue, 29 Apr 2025 15:10:10 GMT, fabioromano1 <d...@openjdk.org> wrote:
>> This PR optimizes `BigInteger.pow(int)` method. The primary enhancement in >> `pow()` is not concerned most on execution time, but rather in memory >> optimization, because the PR implementation does the "shift of the exponent" >> squaring the result rather than the base, so the base is not squared like in >> the current implementation, and this permits to save about half of the >> memory. > > fabioromano1 has updated the pull request incrementally with two additional > commits since the last revision: > > - Adjust the type of operand > - Use a more loose formula to do range check > > Use a more loose formula to do range check, in order not to exclude a > priori values that may be inside the supported range I don't observe any significant difference on my environment macOS 15.4.1 / M1 Pro / 32 GiB / java 25-internal before ---- Benchmark Mode Cnt Score Error Units BigIntegerPow.testPowL avgt 3 7466740027.667 ± 1815231444.569 ns/op BigIntegerPow.testPowL:gc.alloc.rate avgt 3 3964.967 ± 970.175 MB/sec BigIntegerPow.testPowL:gc.alloc.rate.norm avgt 3 31040625701.333 ± 337.057 B/op BigIntegerPow.testPowL:gc.count avgt 3 201.000 counts BigIntegerPow.testPowL:gc.time avgt 3 145.000 ms BigIntegerPow.testPowM avgt 3 5281109916.667 ± 1387864024.559 ns/op BigIntegerPow.testPowM:gc.alloc.rate avgt 3 3718.944 ± 968.869 MB/sec BigIntegerPow.testPowM:gc.alloc.rate.norm avgt 3 20592088429.333 ± 337.057 B/op BigIntegerPow.testPowM:gc.count avgt 3 135.000 counts BigIntegerPow.testPowM:gc.time avgt 3 98.000 ms BigIntegerPow.testPowS avgt 3 5195628500.333 ± 738936923.575 ns/op BigIntegerPow.testPowS:gc.alloc.rate avgt 3 3758.710 ± 534.778 MB/sec BigIntegerPow.testPowS:gc.alloc.rate.norm avgt 3 20477396224.000 ± 0.001 B/op BigIntegerPow.testPowS:gc.count avgt 3 135.000 counts BigIntegerPow.testPowS:gc.time avgt 3 94.000 ms BigIntegerPow.testPowXL avgt 3 8125774666.667 ± 1137294539.763 ns/op BigIntegerPow.testPowXL:gc.alloc.rate avgt 3 4120.707 ± 577.639 MB/sec BigIntegerPow.testPowXL:gc.alloc.rate.norm avgt 3 35109921325.333 ± 337.057 B/op BigIntegerPow.testPowXL:gc.count avgt 3 231.000 counts BigIntegerPow.testPowXL:gc.time avgt 3 161.000 ms BigIntegerPow.testPowXS avgt 3 4631164917.000 ± 354282119.389 ns/op BigIntegerPow.testPowXS:gc.alloc.rate avgt 3 3879.394 ± 297.057 MB/sec BigIntegerPow.testPowXS:gc.alloc.rate.norm avgt 3 18839312808.000 ± 0.001 B/op BigIntegerPow.testPowXS:gc.count avgt 3 124.000 counts BigIntegerPow.testPowXS:gc.time avgt 3 85.000 ms after ---- Benchmark Mode Cnt Score Error Units BigIntegerPow.testPowL avgt 3 7502352027.667 ± 1599949168.779 ns/op BigIntegerPow.testPowL:gc.alloc.rate avgt 3 3946.047 ± 845.736 MB/sec BigIntegerPow.testPowL:gc.alloc.rate.norm avgt 3 31040625690.667 ± 337.057 B/op BigIntegerPow.testPowL:gc.count avgt 3 202.000 counts BigIntegerPow.testPowL:gc.time avgt 3 143.000 ms BigIntegerPow.testPowM avgt 3 5269442569.333 ± 869646901.137 ns/op BigIntegerPow.testPowM:gc.alloc.rate avgt 3 3724.365 ± 638.773 MB/sec BigIntegerPow.testPowM:gc.alloc.rate.norm avgt 3 20578167389.333 ± 439892039.777 B/op BigIntegerPow.testPowM:gc.count avgt 3 135.000 counts BigIntegerPow.testPowM:gc.time avgt 3 93.000 ms BigIntegerPow.testPowS avgt 3 5186210888.667 ± 723686794.493 ns/op BigIntegerPow.testPowS:gc.alloc.rate avgt 3 3765.528 ± 523.216 MB/sec BigIntegerPow.testPowS:gc.alloc.rate.norm avgt 3 20477396224.000 ± 0.001 B/op BigIntegerPow.testPowS:gc.count avgt 3 134.000 counts BigIntegerPow.testPowS:gc.time avgt 3 94.000 ms BigIntegerPow.testPowXL avgt 3 8153839055.667 ± 1004638585.690 ns/op BigIntegerPow.testPowXL:gc.alloc.rate avgt 3 4106.489 ± 506.894 MB/sec BigIntegerPow.testPowXL:gc.alloc.rate.norm avgt 3 35109921325.333 ± 337.057 B/op BigIntegerPow.testPowXL:gc.count avgt 3 230.000 counts BigIntegerPow.testPowXL:gc.time avgt 3 158.000 ms BigIntegerPow.testPowXS avgt 3 4588205708.333 ± 312969172.545 ns/op BigIntegerPow.testPowXS:gc.alloc.rate avgt 3 3915.690 ± 266.340 MB/sec BigIntegerPow.testPowXS:gc.alloc.rate.norm avgt 3 18839312829.333 ± 337.057 B/op BigIntegerPow.testPowXS:gc.count avgt 3 123.000 counts BigIntegerPow.testPowXS:gc.time avgt 3 83.000 ms ------------- PR Comment: https://git.openjdk.org/jdk/pull/24690#issuecomment-2839390637