RFR: 8334554: RISC-V: verify & fix perf of string comparison

Hamlin Li mli at openjdk.org
Fri Jun 21 10:37:25 UTC 2024


Hi,
Can you help to review this patch?
Thanks!

As in compare-UL/LU, it already uses m4, so in this patch also use m4 for compare-UU/LL.

## Test
tested on K230-CanMV, vlen = 128.
warmup: 10 times
iteration: 10 times

### Before patch
<google-sheets-html-origin style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;">
Benchmark | (size) | Score+rvv | Score-rvv | -rvv/+rvv
-- | -- | -- | -- | --
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLL | 24 | 4242936.876 | 7227607.14 | 1.703444419
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLL | 36 | 5738695.363 | 8157070.353 | 1.421415468
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLL | 72 | 7163243.984 | 7209568.036 | 1.00646691
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLL | 128 | 8627566.301 | 12720927.51 | 1.474451435
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLL | 256 | 14632020.04 | 16291127.26 | 1.113388802
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLL | 512 | 26539410.59 | 23612505.95 | 0.8897147833
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLU | 24 | 4913490.894 | 10454585.94 | 2.127730807
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLU | 36 | 7230036.286 | 13561865.48 | 1.875767277
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLU | 72 | 9525418.104 | 21901656.51 | 2.299285582
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLU | 128 | 12645301.4 | 37351484.04 | 2.953783611
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLU | 256 | 21147886.68 | 64886475.43 | 3.068225039
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLU | 512 | 39738017.94 | 125169103.6 | 3.149857745
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUL | 24 | 5183884.427 | 11040441.7 | 2.129762314
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUL | 36 | 7421224.1 | 13879329.16 | 1.870221
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUL | 72 | 9739241.916 | 22346979.93 | 2.29452971
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUL | 128 | 12115336.28 | 35576652.6 | 2.936497326
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUL | 256 | 21473923.71 | 65486723.87 | 3.049592834
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUL | 512 | 39885299.16 | 126584284.1 | 3.173707775
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUU | 24 | 5869568.01 | 6264293.13 | 1.067249433
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUU | 36 | 7426068.273 | 7166385.007 | 0.965030854
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUU | 72 | 10526248.56 | 11169251.07 | 1.061085629
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUU | 128 | 15267275.25 | 14296156.49 | 0.9363921363
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUU | 256 | 27485452.58 | 21502833.49 | 0.7823350711
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUU | 512 | 52373404.61 | 36336863.6 | 0.6938037325
org.openjdk.bench.java.lang.StringCompareToIgnoreCase.lower | N/A | 513.029 | 512.537 | 0.9990409899
org.openjdk.bench.java.lang.StringCompareToIgnoreCase.supLower | N/A | 1762.272 | 1809.632 | 1.026874399
org.openjdk.bench.java.lang.StringCompareToIgnoreCase.supUpperLower | N/A | 415.817 | 411.34 | 0.9892332444
org.openjdk.bench.java.lang.StringCompareToIgnoreCase.upperLower | N/A | 134.015 | 134.996 | 1.007320076

</google-sheets-html-origin>

### After patch
<google-sheets-html-origin style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;">
Benchmark | (size) | Score+rvv | Score-rvv | -rvv/+rvv
-- | -- | -- | -- | --
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLL | 24 | 4941788.887 | 7235758.056 | 1.464198132
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLL | 36 | 4858467.032 | 8251505.321 | 1.698376312
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLL | 72 | 7005945.609 | 7249177.693 | 1.034717952
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLL | 128 | 6978779.091 | 12739192.42 | 1.825418494
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLL | 256 | 11415559.72 | 16327823.57 | 1.430313008
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLL | 512 | 19937616.04 | 23684883.47 | 1.187949624
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLU | 24 | 4892286.111 | 10482882.2 | 2.142736945
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLU | 36 | 7256276.588 | 13559492.21 | 1.868657023
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLU | 72 | 9578807.302 | 21870959.39 | 2.28326541
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLU | 128 | 12646740.63 | 37180505.2 | 2.939927867
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLU | 256 | 21191170.83 | 65072376.34 | 3.070730582
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToLU | 512 | 39834754.39 | 124831609.3 | 3.133736136
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUL | 24 | 5108362.647 | 11010578.08 | 2.15540259
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUL | 36 | 7412159.529 | 13905404.14 | 1.87602602
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUL | 72 | 9748728.771 | 22332596.73 | 2.290821425
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUL | 128 | 12073341.2 | 35555290.53 | 2.944942079
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUL | 256 | 21559366.55 | 65641886.44 | 3.044703855
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUL | 512 | 40341344 | 126752774.3 | 3.142006728
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUU | 24 | 4976856.452 | 6356401.852 | 1.277192122
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUU | 36 | 7181852.586 | 7170891.993 | 0.9984738488
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUU | 72 | 9379572.647 | 11193184.19 | 1.193357588
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUU | 128 | 11564753.39 | 14309848.99 | 1.237367413
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUU | 256 | 20337803.69 | 21584269.25 | 1.06128811
com.arm.benchmarks.intrinsics.StringCompareToDifferentLength.compareToUU | 512 | 37906097.39 | 36445458.74 | 0.9614669209

</google-sheets-html-origin>

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

Commit messages:
 - Initial commit

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

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


More information about the hotspot-compiler-dev mailing list