RFR: 8268231: Aarch64: Use ldp in intrinsics for String.compareTo [v5]
Wu Yan
wuyan at openjdk.java.net
Thu Aug 5 02:43:37 UTC 2021
On Tue, 3 Aug 2021 13:33:07 GMT, Wang Huang <whuang at openjdk.org> wrote:
>> Dear all,
>> Can you do me a favor to review this patch. This patch use `ldp` to implement String.compareTo.
>>
>> * We add a JMH test case
>> * Here is the result of this test case
>>
>> Benchmark |(size)| Mode| Cnt|Score | Error |Units
>> ---------------------------------|------|-----|----|------|--------|-----
>> StringCompare.compareLL | 64 | avgt| 5 |7.992 | ± 0.005|us/op
>> StringCompare.compareLL | 72 | avgt| 5 |15.029| ± 0.006|us/op
>> StringCompare.compareLL | 80 | avgt| 5 |14.655| ± 0.011|us/op
>> StringCompare.compareLL | 91 | avgt| 5 |16.363| ± 0.12 |us/op
>> StringCompare.compareLL | 101 | avgt| 5 |16.966| ± 0.007|us/op
>> StringCompare.compareLL | 121 | avgt| 5 |19.276| ± 0.006|us/op
>> StringCompare.compareLL | 181 | avgt| 5 |19.002| ± 0.417|us/op
>> StringCompare.compareLL | 256 | avgt| 5 |24.707| ± 0.041|us/op
>> StringCompare.compareLLWithLdp| 64 | avgt| 5 |8.001 | ± 0.121|us/op
>> StringCompare.compareLLWithLdp| 72 | avgt| 5 |11.573| ± 0.003|us/op
>> StringCompare.compareLLWithLdp| 80 | avgt| 5 |6.861 | ± 0.004|us/op
>> StringCompare.compareLLWithLdp| 91 | avgt| 5 |12.774| ± 0.201|us/op
>> StringCompare.compareLLWithLdp| 101 | avgt| 5 |8.691 | ± 0.004|us/op
>> StringCompare.compareLLWithLdp| 121 | avgt| 5 |11.091| ± 1.342|us/op
>> StringCompare.compareLLWithLdp| 181 | avgt| 5 |14.64 | ± 0.581|us/op
>> StringCompare.compareLLWithLdp| 256 | avgt| 5 |25.879| ± 1.775|us/op
>> StringCompare.compareUU | 64 | avgt| 5 |13.476| ± 0.01 |us/op
>> StringCompare.compareUU | 72 | avgt| 5 |15.078| ± 0.006|us/op
>> StringCompare.compareUU | 80 | avgt| 5 |23.512| ± 0.011|us/op
>> StringCompare.compareUU | 91 | avgt| 5 |24.284| ± 0.008|us/op
>> StringCompare.compareUU | 101 | avgt| 5 |20.707| ± 0.017|us/op
>> StringCompare.compareUU | 121 | avgt| 5 |29.302| ± 0.011|us/op
>> StringCompare.compareUU | 181 | avgt| 5 |39.31 | ± 0.016|us/op
>> StringCompare.compareUU | 256 | avgt| 5 |54.592| ± 0.392|us/op
>> StringCompare.compareUUWithLdp| 64 | avgt| 5 |16.389| ± 0.008|us/op
>> StringCompare.compareUUWithLdp| 72 | avgt| 5 |10.71 | ± 0.158|us/op
>> StringCompare.compareUUWithLdp| 80 | avgt| 5 |11.488| ± 0.024|us/op
>> StringCompare.compareUUWithLdp| 91 | avgt| 5 |13.412| ± 0.006|us/op
>> StringCompare.compareUUWithLdp| 101 | avgt| 5 |16.245| ± 0.434|us/op
>> StringCompare.compareUUWithLdp| 121 | avgt| 5 |16.597| ± 0.016|us/op
>> StringCompare.compareUUWithLdp| 181 | avgt| 5 |27.373| ± 0.017|us/op
>> StringCompare.compareUUWithLdp| 256 | avgt| 5 |41.74 | ± 3.5 |us/op
>>
>> From this table, we can see that in most cases, our patch is better than old one.
>>
>> Thank you for your review. Any suggestions are welcome.
>
> Wang Huang has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains six additional commits since the last revision:
>
> - fix bugs
> - Merge branch 'master' of https://gitee.com/ustc-wh/jdk into JDK-8268231
> - fix style and add unalign test case
> - refact codes
> - draft of refactor
> - 8268231: Aarch64: Use ldp in intrinsics for String.compareTo
We also tested this version on Hisilicon, increasing the count of each test and the length of the string because the test data fluctuates more. When diff_pos is greater than 255, the improvement will be more obvious. And in all cases there was no significant decline.
base:
Benchmark (diff_pos) (size) Mode Cnt Score Error Units
StringCompare.compareLLDiffStrings 7 512 avgt 50 5.481 ? 1.230 us/op
StringCompare.compareLLDiffStrings 31 512 avgt 50 6.944 ? 0.962 us/op
StringCompare.compareLLDiffStrings 63 512 avgt 50 10.129 ? 0.973 us/op
StringCompare.compareLLDiffStrings 127 512 avgt 50 15.944 ? 0.786 us/op
StringCompare.compareLLDiffStrings 255 512 avgt 50 28.233 ? 0.737 us/op
StringCompare.compareLLDiffStrings 511 512 avgt 50 51.612 ? 1.357 us/op
StringCompare.compareUUDiffStrings 7 512 avgt 50 5.552 ? 0.809 us/op
StringCompare.compareUUDiffStrings 31 512 avgt 50 12.024 ? 1.499 us/op
StringCompare.compareUUDiffStrings 63 512 avgt 50 15.368 ? 0.009 us/op
StringCompare.compareUUDiffStrings 127 512 avgt 50 28.354 ? 0.655 us/op
StringCompare.compareUUDiffStrings 255 512 avgt 50 52.932 ? 0.598 us/op
StringCompare.compareUUDiffStrings 511 512 avgt 50 99.377 ? 1.194 us/op
StringCompare.compareUUDiffStringsTurnOffCCP 7 512 avgt 50 5.599 ? 0.801 us/op
StringCompare.compareUUDiffStringsTurnOffCCP 31 512 avgt 50 10.200 ? 1.206 us/op
StringCompare.compareUUDiffStringsTurnOffCCP 63 512 avgt 50 15.897 ? 0.783 us/op
StringCompare.compareUUDiffStringsTurnOffCCP 127 512 avgt 50 28.420 ? 0.818 us/op
StringCompare.compareUUDiffStringsTurnOffCCP 255 512 avgt 50 53.377 ? 1.049 us/op
StringCompare.compareUUDiffStringsTurnOffCCP 511 512 avgt 50 98.362 ? 0.889 us/op
opt:
Benchmark (diff_pos) (size) Mode Cnt Score Error Units
StringCompare.compareLLDiffStrings 7 512 avgt 50 6.338 ? 1.513 us/op
StringCompare.compareLLDiffStrings 31 512 avgt 50 6.734 ? 0.789 us/op
StringCompare.compareLLDiffStrings 63 512 avgt 50 9.799 ? 1.757 us/op
StringCompare.compareLLDiffStrings 127 512 avgt 50 13.954 ? 1.688 us/op
StringCompare.compareLLDiffStrings 255 512 avgt 50 19.128 ? 1.024 us/op
StringCompare.compareLLDiffStrings 511 512 avgt 50 38.108 ? 1.595 us/op
StringCompare.compareUUDiffStrings 7 512 avgt 50 7.327 ? 1.376 us/op
StringCompare.compareUUDiffStrings 31 512 avgt 50 8.969 ? 1.311 us/op
StringCompare.compareUUDiffStrings 63 512 avgt 50 13.482 ? 1.623 us/op
StringCompare.compareUUDiffStrings 127 512 avgt 50 20.602 ? 1.495 us/op
StringCompare.compareUUDiffStrings 255 512 avgt 50 37.906 ? 3.763 us/op
StringCompare.compareUUDiffStrings 511 512 avgt 50 72.682 ? 6.374 us/op
StringCompare.compareUUDiffStringsTurnOffCCP 7 512 avgt 50 6.638 ? 1.279 us/op
StringCompare.compareUUDiffStringsTurnOffCCP 31 512 avgt 50 8.044 ? 0.924 us/op
StringCompare.compareUUDiffStringsTurnOffCCP 63 512 avgt 50 12.921 ? 1.540 us/op
StringCompare.compareUUDiffStringsTurnOffCCP 127 512 avgt 50 19.010 ? 1.333 us/op
StringCompare.compareUUDiffStringsTurnOffCCP 255 512 avgt 50 36.326 ? 1.302 us/op
StringCompare.compareUUDiffStringsTurnOffCCP 511 512 avgt 50 75.746 ? 3.786 us/op
-------------
PR: https://git.openjdk.java.net/jdk/pull/4722
More information about the core-libs-dev
mailing list