RFR: 8315585: Optimization for decimal to string [v6]

Shaojin Wen duke at openjdk.org
Fri Oct 13 23:53:03 UTC 2023


On Fri, 13 Oct 2023 17:01:11 GMT, Shaojin Wen <duke at openjdk.org> wrote:

>> I submitted PR #15555 before, and there were too many changes. I split it into multiple PRs with small changes. This one is one of them.
>> 
>> this PR removed the duplicate code for getChars in BigDecimal#StringBuilderHelper, i also make performance faster.
>> Please review and don't hesitate to critique my approach and patch.
>
> Shaojin Wen has updated the pull request incrementally with one additional commit since the last revision:
> 
>   use % calculate lowInt

Under linux OS and Intel Xeon Platinum 8475B, the performance of testSmallToEngineeringString becomes slower. It may be a better choice when using JLA.

## Alibaba Cloud Linux 3.2104 LTS 64 bit (Intel Xeon Platinum 8475B)

-Benchmark                                 Mode  Cnt     Score   Error  Units (baseline)
-BigDecimals.testHugeToEngineeringString   avgt   15   206.519 ? 1.574  ns/op
-BigDecimals.testLargeToEngineeringString  avgt   15    35.830 ? 3.008  ns/op
-BigDecimals.testSmallToEngineeringString  avgt   15    15.048 ? 0.033  ns/op
-BigDecimals.testToEngineeringString       avgt   15  1738.627 ? 3.723  ns/op

+Benchmark                                 Mode  Cnt     Score   Error  Units (88b1b13)
+BigDecimals.testHugeToEngineeringString   avgt   15   179.174 ? 0.496  ns/op (+15.27)
+BigDecimals.testLargeToEngineeringString  avgt   15    28.282 ? 0.050  ns/op (+26.69)
+BigDecimals.testSmallToEngineeringString  avgt   15    17.106 ? 0.043  ns/op (-12.04)
+BigDecimals.testToEngineeringString       avgt   15  1679.343 ? 6.285  ns/op (+3.54)


## MacBook M1 Pro

-Benchmark                                 Mode  Cnt     Score    Error  Units (baseline)
-BigDecimals.testHugeToEngineeringString   avgt   15   213.017 ? 24.056  ns/op
-BigDecimals.testLargeToEngineeringString  avgt   15    58.025 ?  4.403  ns/op
-BigDecimals.testSmallToEngineeringString  avgt   15    17.232 ?  0.484  ns/op
-BigDecimals.testToEngineeringString       avgt   15  1767.594 ? 43.153  ns/op

+Benchmark                                 Mode  Cnt     Score    Error  Units (88b1b13)
+BigDecimals.testHugeToEngineeringString   avgt   15   149.861 ?  1.092  ns/op (+42.15)
+BigDecimals.testLargeToEngineeringString  avgt   15    21.307 ?  0.062  ns/op (+172.33)
+BigDecimals.testSmallToEngineeringString  avgt   15    16.875 ?  0.047  ns/op (+2.12)
+BigDecimals.testToEngineeringString       avgt   15  1703.302 ? 44.969  ns/op (+3.78)

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

PR Comment: https://git.openjdk.org/jdk/pull/16006#issuecomment-1762382844


More information about the core-libs-dev mailing list