RFR: 8268231: Aarch64: Use ldp in intrinsics for String.compareTo [v2]
Andrew Haley
aph at openjdk.java.net
Mon Jul 12 15:32:04 UTC 2021
On Mon, 12 Jul 2021 09:14:25 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 incrementally with one additional commit since the last revision:
>
> draft of refactor
Two machines to compare here, Apple M1 and ThunderX2:
Benchmark (diff_pos) (size) Mode Cnt Score Error Units
StringCompare.compareLLDiffStrings 7 128 avgt 3 2.194 ± 0.001 us/op
StringCompare.compareLLDiffStrings 15 128 avgt 3 2.195 ± 0.018 us/op
StringCompare.compareLLDiffStrings 31 128 avgt 3 2.508 ± 0.003 us/op
StringCompare.compareLLDiffStrings 47 128 avgt 3 2.821 ± 0.001 us/op
StringCompare.compareLLDiffStrings 63 128 avgt 3 3.446 ± 0.003 us/op
StringCompare.compareLLDiffStringsWithLdp 7 128 avgt 3 2.194 ± 0.001 us/op
StringCompare.compareLLDiffStringsWithLdp 15 128 avgt 3 2.195 ± 0.001 us/op
StringCompare.compareLLDiffStringsWithLdp 31 128 avgt 3 2.508 ± 0.001 us/op
StringCompare.compareLLDiffStringsWithLdp 47 128 avgt 3 2.510 ± 0.006 us/op
StringCompare.compareLLDiffStringsWithLdp 63 128 avgt 3 2.824 ± 0.003 us/op
StringCompare.compareLLDiffStringsWithRefactor 7 128 avgt 3 1.882 ± 0.018 us/op
StringCompare.compareLLDiffStringsWithRefactor 15 128 avgt 3 2.019 ± 0.002 us/op
StringCompare.compareLLDiffStringsWithRefactor 31 128 avgt 3 2.355 ± 0.003 us/op
StringCompare.compareLLDiffStringsWithRefactor 47 128 avgt 3 2.821 ± 0.010 us/op
StringCompare.compareLLDiffStringsWithRefactor 63 128 avgt 3 3.135 ± 0.002 us/op
Benchmark (diff_pos) (size) Mode Cnt Score Error Units
StringCompare.compareLLDiffStrings 7 128 avgt 3 6.014 ± 0.016 us/op
StringCompare.compareLLDiffStrings 15 128 avgt 3 6.431 ± 0.030 us/op
StringCompare.compareLLDiffStrings 31 128 avgt 3 7.214 ± 0.012 us/op
StringCompare.compareLLDiffStrings 47 128 avgt 3 8.816 ± 0.011 us/op
StringCompare.compareLLDiffStrings 63 128 avgt 3 10.283 ± 0.033 us/op
StringCompare.compareLLDiffStringsWithLdp 7 128 avgt 3 5.214 ± 0.002 us/op
StringCompare.compareLLDiffStringsWithLdp 15 128 avgt 3 6.899 ± 0.359 us/op
StringCompare.compareLLDiffStringsWithLdp 31 128 avgt 3 7.309 ± 0.038 us/op
StringCompare.compareLLDiffStringsWithLdp 47 128 avgt 3 7.723 ± 0.080 us/op
StringCompare.compareLLDiffStringsWithLdp 63 128 avgt 3 9.822 ± 0.103 us/op
StringCompare.compareLLDiffStringsWithRefactor 7 128 avgt 3 4.814 ± 0.002 us/op
StringCompare.compareLLDiffStringsWithRefactor 15 128 avgt 3 8.395 ± 0.259 us/op
StringCompare.compareLLDiffStringsWithRefactor 31 128 avgt 3 7.615 ± 0.004 us/op
StringCompare.compareLLDiffStringsWithRefactor 47 128 avgt 3 8.817 ± 0.013 us/op
StringCompare.compareLLDiffStringsWithRefactor 63 128 avgt 3 10.413 ± 0.002 us/op
-------------
PR: https://git.openjdk.java.net/jdk/pull/4722
More information about the hotspot-compiler-dev
mailing list