RFR: 8311220: Optimization for StringLatin UpperLower

温绍锦 duke at openjdk.org
Mon Jul 3 04:09:00 UTC 2023


# Benchmark Result


sh make/devkit/createJMHBundle.sh
bash configure --with-jmh=build/jmh/jars
make test TEST="micro:java.lang.StringUpperLower.*"



## 1. [aliyun_ecs_c8i.xlarge](https://help.aliyun.com/document_detail/25378.html#c8i)
* cpu : intel xeon sapphire rapids (x64)

``` diff
-Benchmark                      Mode  Cnt   Score   Error  Units (baseline)
-StringUpperLower.lowerToLower  avgt   15  27.180 ± 0.017  ns/op
-StringUpperLower.lowerToUpper  avgt   15  47.196 ± 0.066  ns/op
-StringUpperLower.mixedToLower  avgt   15  32.307 ± 0.072  ns/op
-StringUpperLower.mixedToUpper  avgt   15  44.005 ± 0.414  ns/op
-StringUpperLower.upperToLower  avgt   15  32.310 ± 0.033  ns/op
-StringUpperLower.upperToUpper  avgt   15  42.053 ± 0.341  ns/op

+Benchmark                      Mode  Cnt   Score   Error  Units
+StringUpperLower.lowerToLower  avgt   15  16.976 ± 0.043  ns/op (+60.160)
+StringUpperLower.lowerToUpper  avgt   15  46.373 ± 0.086  ns/op (+1.77%)
+StringUpperLower.mixedToLower  avgt   15  32.018 ± 0.061  ns/op (+0.9%)
+StringUpperLower.mixedToUpper  avgt   15  42.019 ± 0.473  ns/op (+4.72%)
+StringUpperLower.upperToLower  avgt   15  32.052 ± 0.051  ns/op (+0.8%)
+StringUpperLower.upperToUpper  avgt   15  16.978 ± 0.190  ns/op (+47.69%)


## 2. [aliyun_ecs_c8a.xlarge](https://help.aliyun.com/document_detail/25378.html#c8a)
* cpu : amd epc genoa (x64)

``` diff
-Benchmark                      Mode  Cnt   Score   Error  Units (baseline)
-StringUpperLower.lowerToLower  avgt   15  22.164 ± 0.021  ns/op
-StringUpperLower.lowerToUpper  avgt   15  46.113 ± 0.047  ns/op
-StringUpperLower.mixedToLower  avgt   15  28.501 ± 0.037  ns/op
-StringUpperLower.mixedToUpper  avgt   15  38.782 ± 0.038  ns/op
-StringUpperLower.upperToLower  avgt   15  28.625 ± 0.162  ns/op
-StringUpperLower.upperToUpper  avgt   15  27.960 ± 0.038  ns/op

+Benchmark                      Mode  Cnt   Score   Error  Units
+StringUpperLower.lowerToLower  avgt   15  15.273 ± 0.012  ns/op (+45.18%)
+StringUpperLower.lowerToUpper  avgt   15  46.939 ± 0.037  ns/op (-1.75%)
+StringUpperLower.mixedToLower  avgt   15  27.978 ± 0.015  ns/op (+1.86%)
+StringUpperLower.mixedToUpper  avgt   15  38.120 ± 0.047  ns/op (+1.73%)
+StringUpperLower.upperToLower  avgt   15  27.994 ± 0.053  ns/op (+2.25%)
+StringUpperLower.upperToUpper  avgt   15  17.405 ± 0.006  ns/op (+60.64%)



## 3. [aliyun_ecs_c8y.xlarge](https://help.aliyun.com/document_detail/25378.html#c8y)
* cpu : aliyun yitian 710 (aarch64)
``` diff
-Benchmark                      Mode  Cnt   Score   Error  Units (baseline)
-StringUpperLower.lowerToLower  avgt   15  29.035 ± 0.142  ns/op
-StringUpperLower.lowerToUpper  avgt   15  85.791 ± 0.387  ns/op
-StringUpperLower.mixedToLower  avgt   15  40.410 ± 1.023  ns/op
-StringUpperLower.mixedToUpper  avgt   15  72.904 ± 0.682  ns/op
-StringUpperLower.upperToLower  avgt   15  40.495 ± 0.990  ns/op
-StringUpperLower.upperToUpper  avgt   15  39.665 ± 0.036  ns/op

+Benchmark                      Mode  Cnt   Score   Error  Units
+StringUpperLower.lowerToLower  avgt   15  23.222 ± 0.035  ns/op (+25.03%)
+StringUpperLower.lowerToUpper  avgt   15  84.958 ± 0.725  ns/op (+0.98%)
+StringUpperLower.mixedToLower  avgt   15  40.931 ± 0.947  ns/op (-1.27%)
+StringUpperLower.mixedToUpper  avgt   15  71.845 ± 1.128  ns/op (+1.47%)
+StringUpperLower.upperToLower  avgt   15  40.967 ± 1.430  ns/op (-1.52%)
+StringUpperLower.upperToUpper  avgt   15  17.545 ± 0.159  ns/op (+126.07%)


## 4. MacBookPro M1 Pro
``` diff
-Benchmark                      Mode  Cnt   Score    Error  Units (baseline)
-StringUpperLower.lowerToLower  avgt   15  22.454 ±  0.160  ns/op
-StringUpperLower.lowerToUpper  avgt   15  60.394 ±  8.811  ns/op
-StringUpperLower.mixedToLower  avgt   15  57.825 ± 10.782  ns/op
-StringUpperLower.mixedToUpper  avgt   15  57.414 ±  7.899  ns/op
-StringUpperLower.upperToLower  avgt   15  55.500 ± 10.547  ns/op
-StringUpperLower.upperToUpper  avgt   15  24.637 ±  0.146  ns/op

+Benchmark                      Mode  Cnt   Score   Error  Units
+StringUpperLower.lowerToLower  avgt   15  15.854 ± 0.032  ns/op (+41.62%)
+StringUpperLower.lowerToUpper  avgt   15  48.417 ± 0.305  ns/op (+24.73%)
+StringUpperLower.mixedToLower  avgt   15  36.338 ± 0.346  ns/op (+59.13%)
+StringUpperLower.mixedToUpper  avgt   15  42.371 ± 0.376  ns/op (+35.50%)
+StringUpperLower.upperToLower  avgt   15  36.342 ± 0.324  ns/op (+52.71%)
+StringUpperLower.upperToUpper  avgt   15  11.149 ± 0.018  ns/op (+120.97%)


## 5. [Orange Pi 5 Plus](http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-5-plus.html)
CPU : Rockchip RK3588 (aarch64)

``` diff
-Benchmark                      Mode  Cnt    Score   Error  Units (baseline)
-StringUpperLower.lowerToLower  avgt   15   64.597 ± 0.211  ns/op
-StringUpperLower.lowerToUpper  avgt   15  146.723 ± 1.420  ns/op
-StringUpperLower.mixedToLower  avgt   15   78.629 ± 0.589  ns/op
-StringUpperLower.mixedToUpper  avgt   15  124.889 ± 1.358  ns/op
-StringUpperLower.upperToLower  avgt   15   78.981 ± 1.318  ns/op
-StringUpperLower.upperToUpper  avgt   15   61.466 ± 0.150  ns/op

+Benchmark                      Mode  Cnt    Score   Error  Units
+StringUpperLower.lowerToLower  avgt   15   41.060 ± 0.254  ns/op (+57.32%)
+StringUpperLower.lowerToUpper  avgt   15  136.750 ± 4.522  ns/op (+7.29%)
+StringUpperLower.mixedToLower  avgt   15   77.984 ± 0.953  ns/op (+8.27%)
+StringUpperLower.mixedToUpper  avgt   15  121.449 ± 1.466  ns/op (+2.83%)
+StringUpperLower.upperToLower  avgt   15   77.787 ± 0.722  ns/op (+1.53%)
+StringUpperLower.upperToUpper  avgt   15   30.798 ± 0.145  ns/op (+99.57%)

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

Commit messages:
 - optimization for StringLatin1 UpperLower

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

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


More information about the core-libs-dev mailing list