On Sat, 25 Jan 2025 02:20:34 GMT, Shaojin Wen <s...@openjdk.org> wrote:
>> This is an optimization for decimal Integer.parseInt and Long.parseLong, >> which improves performance by about 10%. The optimization includes: >> 1. Improve performance by parsing 2 numbers at a time, which has performance >> improvements for numbers with length >= 3. >> 2. It uses charAt(0) for the first number. Assuming that the optimization >> can eliminate boundary checks, this will be more friendly to parsing numbers >> with length 1. >> 3. It removes the reliance on the Character.digit method and eliminates the >> reliance on the CharacterDataLatin1#DIGITS cache array, which avoids >> performance degradation caused by cache misses. > > Shaojin Wen has updated the pull request incrementally with one additional > commit since the last revision: > > use & After accepting rgiulietti's suggestion, the performance was further improved, and the performance numbers are as follows ## 1. Script git remote add wenshao g...@github.com:wenshao/jdk.git git fetch wenshao #master git checkout 5bb9644202a8b961faad02439c95a81ca6862168 make test TEST="micro:java.lang.Longs.parseLong" make test TEST="micro:java.lang.Integers.parseInt" git checkout f97093d324fbb7de322c86d52db11cafcff2de87 make test TEST="micro:java.lang.Longs.parseLong" make test TEST="micro:java.lang.Integers.parseInt" # current git checkout dc2a6758f33daacde63189a2239b1fac1470a937 make test TEST="micro:java.lang.Longs.parseLong" make test TEST="micro:java.lang.Integers.parseInt" ## 2. aliyun_ecs_c8a_x64 (CPU AMD EPYC™ Genoa) Benchmark (size) Mode Cnt Score Error Units (5bb9644) Longs.parseLong 500 avgt 15 3.538 ± 0.019 us/op Integers.parseInt 500 avgt 15 3.276 ± 0.004 us/op Benchmark (size) Mode Cnt Score Error Units (f97093d) Longs.parseLong 500 avgt 15 2.960 ± 0.013 us/op +19.52% Integers.parseInt 500 avgt 15 3.116 ± 0.004 us/op +5.13% Benchmark (size) Mode Cnt Score Error Units (dc2a675) Longs.parseLong 500 avgt 15 2.911 ± 0.016 us/op +21.58% Integers.parseInt 500 avgt 15 2.985 ± 0.011 us/op +9.74% ## 3. aliyun_ecs_c8i_x64 (CPU Intel®Xeon®Emerald Rapids) Benchmark (size) Mode Cnt Score Error Units (5bb9644) Longs.parseLong 500 avgt 15 3.468 ± 0.010 us/op Integers.parseInt 500 avgt 15 3.137 ± 0.007 us/op Benchmark (size) Mode Cnt Score Error Units (f97093d) Longs.parseLong 500 avgt 15 2.996 ± 0.020 us/op +15.75% Integers.parseInt 500 avgt 15 2.822 ± 0.005 us/op +11.16% Benchmark (size) Mode Cnt Score Error Units (dc2a675) Longs.parseLong 500 avgt 15 2.850 ± 0.009 us/op +21.68% Integers.parseInt 500 avgt 15 2.772 ± 0.004 us/op +13.16% ## 4. aliyun_ecs_c8y_aarch64 (CPU Aliyun Yitian 710) Benchmark (size) Mode Cnt Score Error Units (5bb9644) Longs.parseLong 500 avgt 15 3.827 ± 0.033 us/op Integers.parseInt 500 avgt 15 3.589 ± 0.038 us/op Benchmark (size) Mode Cnt Score Error Units (f97093d) Longs.parseLong 500 avgt 15 3.394 ± 0.033 us/op +12.75% Integers.parseInt 500 avgt 15 3.090 ± 0.014 us/op +16.14% Benchmark (size) Mode Cnt Score Error Units (dc2a675) Longs.parseLong 500 avgt 15 3.293 ± 0.080 us/op +16.21% Integers.parseInt 500 avgt 15 3.102 ± 0.010 us/op +15.69% ## 5. orange_pi5_aarch64 (CPU RK3588S) Benchmark (size) Mode Cnt Score Error Units Longs.parseLong 500 avgt 15 9.342 ± 0.610 us/op (5bb9644) Integers.parseInt 500 avgt 15 9.217 ± 0.572 us/op Benchmark (size) Mode Cnt Score Error Units (f97093d) Longs.parseLong 500 avgt 15 7.986 ± 0.499 us/op +16.97% Integers.parseInt 500 avgt 15 6.093 ± 0.020 us/op +15.13% Benchmark (size) Mode Cnt Score Error Units (dc2a675) Longs.parseLong 500 avgt 15 6.882 ± 0.240 us/op +35.74% Integers.parseInt 500 avgt 15 6.104 ± 0.226 us/op +50.99% # 6. MacBook M1 Pro (aarch64) Benchmark (size) Mode Cnt Score Error Units (5bb9644) Longs.parseLong 500 avgt 15 2.673 ? 0.026 us/op Integers.parseInt 500 avgt 15 2.358 ? 0.035 us/op Benchmark (size) Mode Cnt Score Error Units (f97093d) Longs.parseLong 500 avgt 15 2.283 ? 0.027 us/op +17.08% Integers.parseInt 500 avgt 15 2.045 ? 0.027 us/op +15.30% Benchmark (size) Mode Cnt Score Error Units (dc2a675) Longs.parseLong 500 avgt 15 2.212 ? 0.016 us/op +20.84% Integers.parseInt 500 avgt 15 1.994 ? 0.010 us/op +18.25% ------------- PR Comment: https://git.openjdk.org/jdk/pull/22919#issuecomment-2613746684