RFR: 8359424: Eliminate table lookup in Integer/Long toHexString
Shaojin Wen
swen at openjdk.org
Fri Jun 13 13:25:29 UTC 2025
On Tue, 7 Jan 2025 10:39:18 GMT, Shaojin Wen <swen at openjdk.org> wrote:
> In PR #22928, UUID introduced long-based vectorized hexadecimal to string conversion, which can also be used in Integer::toHexString and Long::toHexString to eliminate table lookups. The benefit of eliminating table lookups is that the performance is better when cache misses occur.
Performance test figures show that using the vectorized method toHex can improve performance in most cases by eliminating table lookups.
## 1. Script
git remote add wenshao git at github.com:wenshao/jdk.git
git fetch wenshao
# baseline
git checkout 7731f4df6ba12b4e38f17f87bd42b1da6dc68f95
make test TEST="micro:java.lang.Integers.toHexString"
make test TEST="micro:java.lang.Longs.toHexString"
# current
git checkout 6f491cedc2311115ab81b479620da3eb71385fc8
make test TEST="micro:java.lang.Integers.toHexString"
make test TEST="micro:java.lang.Longs.toHexString"
## 2. aliyun_ecs_c8a_x64 (CPU AMD EPYC™ Genoa)
-# 7731f4df6ba12b4e38f17f87bd42b1da6dc68f95
-Benchmark (size) Mode Cnt Score Error Units
-Longs.toHexStringBig 500 avgt 15 5.984 ± 0.009 us/op
-Longs.toHexStringSmall 500 avgt 15 3.989 ± 0.036 us/op
-Integers.toHexStringBig 500 avgt 15 4.473 ± 0.029 us/op
-Integers.toHexStringSmall 500 avgt 15 4.166 ± 0.120 us/op
-Integers.toHexStringTiny 500 avgt 15 3.394 ± 0.014 us/op
+# 6f491cedc2311115ab81b479620da3eb71385fc8
+Benchmark (size) Mode Cnt Score Error Units
+Longs.toHexStringBig 500 avgt 15 4.622 ± 0.011 us/op +29%
+Longs.toHexStringSmall 500 avgt 15 3.957 ± 0.035 us/op +0.8%
+Integers.toHexStringBig 500 avgt 15 3.985 ± 0.019 us/op +12.24%
+Integers.toHexStringSmall 500 avgt 15 3.617 ± 0.020 us/op +15.17%
+Integers.toHexStringTiny 500 avgt 15 3.033 ± 0.015 us/op +11.90%
## 3. aliyun_ecs_c8i_x64 (CPU Intel®Xeon®Emerald Rapids)
-# 7731f4df6ba12b4e38f17f87bd42b1da6dc68f95
-Benchmark (size) Mode Cnt Score Error Units
-Longs.toHexStringBig 500 avgt 15 5.685 ± 0.019 us/op
-Longs.toHexStringSmall 500 avgt 15 3.914 ± 0.009 us/op
-Integers.toHexStringBig 500 avgt 15 4.262 ± 0.025 us/op
-Integers.toHexStringSmall 500 avgt 15 4.049 ± 0.012 us/op
-Integers.toHexStringTiny 500 avgt 15 3.323 ± 0.015 us/op
+# 6f491cedc2311115ab81b479620da3eb71385fc8
+Benchmark (size) Mode Cnt Score Error Units
+Longs.toHexStringBig 500 avgt 15 4.791 ± 0.005 us/op
+Longs.toHexStringSmall 500 avgt 15 3.994 ± 0.022 us/op
+Integers.toHexStringBig 500 avgt 15 4.184 ± 0.034 us/op
+Integers.toHexStringSmall 500 avgt 15 3.771 ± 0.019 us/op
+Integers.toHexStringTiny 500 avgt 15 3.133 ± 0.021 us/op
## 4. aliyun_ecs_c8y_aarch64 (CPU Aliyun Yitian 710)
-# 7731f4df6ba12b4e38f17f87bd42b1da6dc68f95
-Benchmark (size) Mode Cnt Score Error Units
-Longs.toHexStringBig 500 avgt 15 8.319 ± 0.139 us/op
-Longs.toHexStringSmall 500 avgt 15 4.985 ± 0.028 us/op
-Integers.toHexStringBig 500 avgt 15 5.489 ± 0.041 us/op
-Integers.toHexStringSmall 500 avgt 15 5.028 ± 0.033 us/op
-Integers.toHexStringTiny 500 avgt 15 3.921 ± 0.023 us/op
+# 6f491cedc2311115ab81b479620da3eb71385fc8
+Benchmark (size) Mode Cnt Score Error Units
+Longs.toHexStringBig 500 avgt 15 5.346 ± 0.033 us/op
+Longs.toHexStringSmall 500 avgt 15 4.383 ± 0.027 us/op
+Integers.toHexStringBig 500 avgt 15 4.821 ± 0.052 us/op
+Integers.toHexStringSmall 500 avgt 15 4.428 ± 0.036 us/op
+Integers.toHexStringTiny 500 avgt 15 3.800 ± 0.046 us/op
## 5. MacBook M1 Pro (aarch64)
-# 7731f4df6ba12b4e38f17f87bd42b1da6dc68f95
-Benchmark (size) Mode Cnt Score Error Units
-Longs.toHexStringBig 500 avgt 15 6.878 ± 0.230 us/op
-Longs.toHexStringSmall 500 avgt 15 4.975 ± 0.381 us/op
-Integers.toHexStringBig 500 avgt 15 11.646 ± 2.699 us/op
-Integers.toHexStringSmall 500 avgt 15 5.040 ± 0.319 us/op
-Integers.toHexStringTiny 500 avgt 15 2.717 ± 0.023 us/op
+# 6f491cedc2311115ab81b479620da3eb71385fc8
+Benchmark (size) Mode Cnt Score Error Units
+Longs.toHexStringBig 500 avgt 15 4.007 ± 0.023 us/op
+Longs.toHexStringSmall 500 avgt 15 3.058 ± 0.024 us/op
+Integers.toHexStringBig 500 avgt 15 3.399 ± 0.017 us/op
+Integers.toHexStringSmall 500 avgt 15 3.163 ± 0.026 us/op
+Integers.toHexStringTiny 500 avgt 15 2.909 ± 0.026 us/op
-------------
PR Comment: https://git.openjdk.org/jdk/pull/22942#issuecomment-2970383406
More information about the core-libs-dev
mailing list