RFR: 8311207: Cleanup for Optimization for UUID.toString [v13]
Roger Riggs
rriggs at openjdk.org
Fri Sep 8 20:21:42 UTC 2023
On Fri, 8 Sep 2023 20:01:20 GMT, 温绍锦 <duke at openjdk.org> wrote:
>> [PR 14578 ](https://github.com/openjdk/jdk/pull/14578) still has unresolved discussions, continue to make improvements.
>>
>> # Benchmark Result
>>
>>
>> sh make/devkit/createJMHBundle.sh
>> bash configure --with-jmh=build/jmh/jars
>> make test TEST="micro:java.util.UUIDBench.toString"
>>
>>
>> ## 1. [aliyun_ecs_c8i.xlarge](https://help.aliyun.com/document_detail/25378.html#c8i)
>> * cpu : intel xeon sapphire rapids (x64)
>>
>> ``` diff
>> -Benchmark (size) Mode Cnt Score Error Units (baseline)
>> -UUIDBench.toString 20000 thrpt 15 62.019 ± 0.622 ops/us
>>
>> +Benchmark (size) Mode Cnt Score Error Units
>> +UUIDBench.toString 20000 thrpt 15 82.998 ± 0.739 ops/us (+33.82%)
>>
>>
>> ## 2. [aliyun_ecs_c8a.xlarge](https://help.aliyun.com/document_detail/25378.html#c8a)
>> * cpu : amd epc genoa (x64)
>>
>> ``` diff
>> -Benchmark (size) Mode Cnt Score Error Units (baseline)
>> -UUIDBench.toString 20000 thrpt 15 88.668 ± 0.672 ops/us
>>
>> +Benchmark (size) Mode Cnt Score Error Units
>> +UUIDBench.toString 20000 thrpt 15 89.229 ± 0.271 ops/us (+0.63%)
>>
>>
>>
>> ## 3. [aliyun_ecs_c8y.xlarge](https://help.aliyun.com/document_detail/25378.html#c8y)
>> * cpu : aliyun yitian 710 (aarch64)
>> ``` diff
>> -Benchmark (size) Mode Cnt Score Error Units (baseline)
>> -UUIDBench.toString 20000 thrpt 15 49.382 ± 2.160 ops/us
>>
>> +Benchmark (size) Mode Cnt Score Error Units
>> +UUIDBench.toString 20000 thrpt 15 49.636 ± 1.974 ops/us (+0.51%)
>>
>>
>> ## 4. MacBookPro M1 Pro
>> ``` diff
>> -Benchmark (size) Mode Cnt Score Error Units (baseline)
>> -UUIDBench.toString 20000 thrpt 15 103.543 ± 0.963 ops/us
>>
>> +Benchmark (size) Mode Cnt Score Error Units
>> +UUIDBench.toString 20000 thrpt 15 110.976 ± 0.685 ops/us (+7.17%)
>>
>>
>> ## 5. Orange Pi 5 Plus
>>
>> ``` diff
>> -Benchmark (size) Mode Cnt Score Error Units (baseline)
>> -UUIDBench.toString 20000 thrpt 15 33.532 ± 0.396 ops/us
>>
>> +Benchmark (size) Mode Cnt Score Error Units (PR)
>> +UUIDBench.toString 20000 thrpt 15 33.054 ± 0.190 ops/us (-4.42%)
>
> 温绍锦 has updated the pull request incrementally with one additional commit since the last revision:
>
> add DIGITS description
Thank you improvements.
src/java.base/share/classes/java/util/HexDigits.java line 81:
> 79: for (int j = 0; j < 16; j++) {
> 80: short hi = (short) ((j < 10 ? j + '0' : j - 10 + 'a') << 8);
> 81: digits[(i << 4) + j] = (short) (lo | hi);
The part that is counter-intuitive is that the bits that are shifted left appear to the right of the bits that are not shifted. (the actual bits are correct, either way, but it reads oddly). In a short, the resulting bits would be `hhll`.
Suggestion:
digits[(i << 4) + j] = (short) (hi | lo);
Similarly, the returns of the other `packDigits` methods do not read MSB to LSB.
-------------
Marked as reviewed by rriggs (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/14745#pullrequestreview-1618197721
PR Review Comment: https://git.openjdk.org/jdk/pull/14745#discussion_r1320299608
More information about the core-libs-dev
mailing list