On Fri, 8 Sep 2023 18:17:12 GMT, 温绍锦 <d...@openjdk.org> wrote:

>> BigDecimal is a commonly used class in business development, It is often 
>> necessary to perform toString or toPlainString operations on BigDecimal.
>> 
>> The current version uses StringBuilder resulting in multiple memory 
>> allocations, I made a modification to improve performance.
>> 
>> Because BigDecimal uses stringCache to cache the result of toString, the 
>> performance of toString needs special treatment before testing, such as 
>> clearing stringCache by unsafe operation before each test, The performance 
>> of toString is similar to that of toEngineering.
>> 
>> The performance data is as follows: 
>> 
>> ## 1. benchmark script
>> 
>> sh make/devkit/createJMHBundle.sh
>> bash configure --with-jmh=build/jmh/jars
>> make test TEST="micro:java.math.BigDecimals.*ToPlainString"
>> make test TEST="micro:java.math.BigDecimals.*ToEngineering"
>> 
>> 
>> ## 2. benchmark environment
>> * virtual machine : 
>> [aliyun_ecs_c8i.xlarge](https://help.aliyun.com/zh/ecs/user-guide/overview-of-instance-families#c8i)
>> * cpu intel xeon sapphire rapids (x64)
>> 
>> ## 3. benchmark result
>> 
>> -BigDecimals.testHugeToPlainString         avgt   15   188.691 ±  0.822  
>> ns/op  (baseline)
>> -BigDecimals.testLargeToPlainString        avgt   15    36.656 ±  0.065  
>> ns/op
>> -BigDecimals.testSmallToPlainString        avgt   15    34.342 ±  0.068  
>> ns/op
>> -BigDecimals.testToPlainString             avgt   15  1719.494 ± 24.886  
>> ns/op
>> 
>> +Benchmark                                 Mode  Cnt     Score    Error  
>> Units (optimize)
>> +BigDecimals.testHugeToPlainString         avgt   15   133.972 ?  0.328  
>> ns/op (+40.84%)
>> +BigDecimals.testLargeToPlainString        avgt   15    14.957 ?  0.047  
>> ns/op (145.07%)
>> +BigDecimals.testSmallToPlainString        avgt   15    12.045 ?  0.036  
>> ns/op (+185.11)
>> +BigDecimals.testToPlainString             avgt   15  1643.500 ?  3.217  
>> ns/op (+4.62%)
>> 
>> -Benchmark                                 Mode  Cnt     Score    Error  
>> Units (baseline)
>> -BigDecimals.testHugeToEngineeringString   avgt   15   207.621 ±  5.018  
>> ns/op
>> -BigDecimals.testLargeToEngineeringString  avgt   15    35.658 ±  3.144  
>> ns/op
>> -BigDecimals.testSmallToEngineeringString  avgt   15    15.142 ±  0.053  
>> ns/op
>> -BigDecimals.testToEngineeringString       avgt   15  1813.959 ± 12.842  
>> ns/op
>> 
>> +Benchmark                                 Mode  Cnt     Score    Error  
>> Units (optimize)
>> +BigDecimals.testHugeToEngineeringString   avgt   15   142.110 ?  0.987  
>> ns/op (+45.09%)
>> +BigDecimals.testLargeToEngineeringStr...
>
> 温绍锦 has updated the pull request incrementally with one additional commit 
> since the last revision:
> 
>   bug fix & add testcases

The new performance data is as follows: 

## 1. benchmark script

sh make/devkit/createJMHBundle.sh
bash configure --with-jmh=build/jmh/jars
make test TEST="micro:java.math.BigDecimals.*ToPlainString"
make test TEST="micro:java.math.BigDecimals.*ToEngineering"


## 2. benchmark environment
* baseline https://github.com/wenshao/jdk/tree/baseline_test
* optimize version : 09 
[Full](https://webrevs.openjdk.org/?repo=jdk&pr=15555&range=09) - 
[Incremental](https://webrevs.openjdk.org/?repo=jdk&pr=15555&range=08-09) 
([c4425ddd](https://git.openjdk.org/jdk/pull/15555/files/c4425dddef7dbb9e6ee0851fde8561869bf0ddd5))

## 3. benchmark result

## 3.1. 
[aliyun_ecs_c8i.xlarge](https://help.aliyun.com/document_detail/25378.html#c8i)
* cpu : intel xeon sapphire rapids (x64)
* os : Alibaba Cloud Linux 3.2104 LTS 64


-Benchmark                           Mode  Cnt     Score    Error  Units 
(baseline)
-BigDecimals.testHugeToPlainString   avgt   15   188.687 ?  0.210  ns/op
-BigDecimals.testLargeToPlainString  avgt   15    36.547 ?  0.083  ns/op
-BigDecimals.testSmallToPlainString  avgt   15    34.270 ?  0.075  ns/op
-BigDecimals.testToPlainString       avgt   15  1661.588 ? 25.568  ns/op


+Benchmark                           Mode  Cnt     Score    Error  Units 
(optimized)
+BigDecimals.testHugeToPlainString   avgt   15   117.868 ?  0.390  ns/op 
(+60.08%)
+BigDecimals.testLargeToPlainString  avgt   15    15.903 ?  0.069  ns/op 
(+129.81%)
+BigDecimals.testSmallToPlainString  avgt   15    13.502 ?  0.051  ns/op 
(+153.81%)
+BigDecimals.testToPlainString       avgt   15  1556.691 ? 19.407  ns/op 
(+6.73%)

-Benchmark                                 Mode  Cnt     Score    Error  Units 
(baseline)
-BigDecimals.testHugeToEngineeringString   avgt   15   207.858 ?  4.166  ns/op
-BigDecimals.testLargeToEngineeringString  avgt   15    35.723 ?  2.772  ns/op
-BigDecimals.testSmallToEngineeringString  avgt   15    15.083 ?  0.052  ns/op
-BigDecimals.testToEngineeringString       avgt   15  1715.916 ? 37.066  ns/op

+Benchmark                                 Mode  Cnt     Score    Error  Units 
(optimized)
+BigDecimals.testHugeToEngineeringString   avgt   15   142.110 ?  0.987  ns/op 
(+46.26%)
+BigDecimals.testLargeToEngineeringString  avgt   15    12.509 ?  0.056  ns/op 
(+185.57%)
+BigDecimals.testSmallToEngineeringString  avgt   15    10.579 ?  0.066  ns/op 
(+42.57%)
+BigDecimals.testToEngineeringString       avgt   15  1646.783 ?  3.060  ns/op 
(+4.19%)


## 3.2. 
[aliyun_ecs_c8a.xlarge](https://help.aliyun.com/document_detail/25378.html#c8a)
* cpu : amd epc genoa (x64)
* os : Alibaba Cloud Linux 3.2104 LTS 64


-Benchmark                                 Mode  Cnt     Score    Error  Units 
(baseline)
-BigDecimals.testHugeToEngineeringString   avgt   15   300.712 ?  8.526  ns/op
-BigDecimals.testLargeToEngineeringString  avgt   15    42.108 ?  0.149  ns/op
-BigDecimals.testSmallToEngineeringString  avgt   15    24.333 ?  0.076  ns/op
-BigDecimals.testToEngineeringString       avgt   15  2300.080 ? 12.640  ns/op


+Benchmark                                 Mode  Cnt     Score    Error  Units 
(optimized)
+BigDecimals.testHugeToEngineeringString   avgt   15   161.471 ?  1.303  ns/op 
(+86.23%)
+BigDecimals.testLargeToEngineeringString  avgt   15    24.847 ?  0.111  ns/op 
(+69.46%)
+BigDecimals.testSmallToEngineeringString  avgt   15    21.529 ?  0.088  ns/op 
(+13.02%)
+BigDecimals.testToEngineeringString       avgt   15  2016.281 ? 21.728  ns/op 
(+14.07%)


-Benchmark                           Mode  Cnt     Score    Error  Units 
(baseline)
-BigDecimals.testHugeToPlainString   avgt   15   277.892 ?  1.485  ns/op
-BigDecimals.testLargeToPlainString  avgt   15    42.669 ?  0.075  ns/op
-BigDecimals.testSmallToPlainString  avgt   15    38.928 ?  0.402  ns/op
-BigDecimals.testToPlainString       avgt   15  2245.593 ? 20.488  ns/op


+Benchmark                           Mode  Cnt     Score    Error  Units 
(optimized)
+BigDecimals.testHugeToPlainString   avgt   15   154.470 ?  7.259  ns/op 
(+79.90%)
+BigDecimals.testLargeToPlainString  avgt   15    29.892 ?  0.290  ns/op 
(+42.74%)
+BigDecimals.testSmallToPlainString  avgt   15    25.605 ?  0.109  ns/op 
(+52.03%)
+BigDecimals.testToPlainString       avgt   15  2027.892 ? 12.792  ns/op 
(+10.73%)


## MaxBookPro M1 Pro


-Benchmark                                 Mode  Cnt     Score    Error  Units 
(baseline)
-BigDecimals.testHugeToEngineeringString   avgt   15   250.340 ?  4.911  ns/op
-BigDecimals.testLargeToEngineeringString  avgt   15    83.954 ?  7.603  ns/op
-BigDecimals.testSmallToEngineeringString  avgt   15    17.321 ?  0.083  ns/op
-BigDecimals.testToEngineeringString       avgt   15  1874.298 ? 71.820  ns/op


+Benchmark                                 Mode  Cnt     Score    Error  Units 
(optimized)
+BigDecimals.testHugeToEngineeringString   avgt   15   104.412 ? 17.752  ns/op 
(+139.76%)
+BigDecimals.testLargeToEngineeringString  avgt   15    14.617 ?  0.380  ns/op 
(+474.35%)
+BigDecimals.testSmallToEngineeringString  avgt   15    11.960 ?  0.021  ns/op 
(+44.82%)
+BigDecimals.testToEngineeringString       avgt   15  1622.669 ? 81.835  ns/op 
(+15.50%)


-Benchmark                           Mode  Cnt     Score    Error  Units 
(baseline)
-BigDecimals.testHugeToPlainString   avgt   15   188.559 ?  9.283  ns/op
-BigDecimals.testLargeToPlainString  avgt   15    22.894 ?  0.102  ns/op
-BigDecimals.testSmallToPlainString  avgt   15    24.029 ?  0.164  ns/op
-BigDecimals.testToPlainString       avgt   15  1858.483 ? 56.941  ns/op


+Benchmark                           Mode  Cnt     Score    Error  Units 
(optimized)
+BigDecimals.testHugeToPlainString   avgt   15    87.264 ?  0.677  ns/op 
(+116.07%)
+BigDecimals.testLargeToPlainString  avgt   15    16.665 ?  0.045  ns/op 
(+37.37%)
+BigDecimals.testSmallToPlainString  avgt   15    13.467 ?  0.091  ns/op 
(+78.42%)
+BigDecimals.testToPlainString       avgt   15  1593.317 ? 84.553  ns/op 
(+16.64%)

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

PR Comment: https://git.openjdk.org/jdk/pull/15555#issuecomment-1712096597

Reply via email to