Skip to content

Commit 23536e3

Browse files
chore: update benchmarks
1 parent 0d983c2 commit 23536e3

1 file changed

Lines changed: 49 additions & 49 deletions

File tree

benchmark/README.md

Lines changed: 49 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -38,69 +38,69 @@
3838

3939
### Low-level hash building block
4040

41-
| Operation | Linux GCC | Linux Clang | Windows MinGW GCC | Windows Clang-GNU-CLI | Windows Clang-MSVC-CLI | Windows MSVC |
42-
| --------------------- | ------------ | ------------ | ----------------- | --------------------- | ---------------------- | ------------ |
43-
| FNV1a (single byte) | **0.105 ns** | 0.106 ns | 0.151 ns | 0.238 ns | 0.243 ns | 0.698 ns |
44-
| CRC32C (single byte) | **0.374 ns** | 0.376 ns | 0.465 ns | 0.665 ns | 0.665 ns | 1.05 ns |
45-
| CRC32C SW (single) | **0.105 ns** | 0.107 ns | 0.151 ns | 2.31 ns | 2.33 ns | 7.44 ns |
46-
| Larson (single byte) | **0.106 ns** | 0.107 ns | 0.141 ns | 0.298 ns | 0.289 ns | 0.698 ns |
47-
| Seed mix (32-bit) | 0.108 ns | **0.106 ns** | 0.141 ns | 0.727 ns | 0.718 ns | 1.06 ns |
48-
| FNV1a64 (single byte) | **0.106 ns** | **0.106 ns** | 0.167 ns | 0.283 ns | 0.651 ns | 0.773 ns |
49-
| Larson64 (single) | 0.107 ns | **0.106 ns** | 0.171 ns | 0.340 ns | 0.651 ns | 0.785 ns |
50-
| Seed mix (64-bit) | **0.106 ns** | **0.106 ns** | 0.171 ns | 0.921 ns | 1.92 ns | 1.33 ns |
41+
| Operation | Linux GCC | Linux Clang | Windows MinGW GCC | Windows Clang-GNU-CLI | Windows Clang-MSVC-CLI | Windows MSVC |
42+
| --------------------- | ------------ | ----------- | ----------------- | --------------------- | ---------------------- | ------------ |
43+
| FNV1a (single byte) | **0.838 ns** | 1.06 ns | 0.849 ns | 1.35 ns | 1.49 ns | 1.25 ns |
44+
| CRC32C (single byte) | **0.629 ns** | 0.645 ns | 0.632 ns | 0.837 ns | 0.907 ns | 1.09 ns |
45+
| CRC32C SW (single) | **5.12 ns** | 5.77 ns | 5.21 ns | 7.61 ns | 8.44 ns | 14.4 ns |
46+
| Larson (single byte) | **1.05 ns** | 1.06 ns | **1.05 ns** | 1.55 ns | 1.72 ns | 2.13 ns |
47+
| Seed mix (32-bit) | **2.31 ns** | 2.33 ns | 2.44 ns | 3.69 ns | 3.85 ns | 4.59 ns |
48+
| FNV1a64 (single byte) | 0.839 ns | 1.06 ns | **0.837 ns** | 1.40 ns | 1.26 ns | 1.41 ns |
49+
| Larson64 (single) | **1.05 ns** | 1.07 ns | 1.06 ns | 1.34 ns | 1.22 ns | 1.37 ns |
50+
| Seed mix (64-bit) | **3.56 ns** | 3.60 ns | 3.58 ns | 4.45 ns | 3.99 ns | 5.77 ns |
5151

5252
### String hashing (32-bit)
5353

54-
| Operation | Linux GCC | Linux Clang | Windows MinGW GCC | Windows Clang-GNU-CLI | Windows Clang-MSVC-CLI | Windows MSVC |
55-
| ------------------------ | ----------- | ----------- | ----------------- | --------------------- | ---------------------- | ------------ |
56-
| Hash short (5 chars) | 350 ns | **338 ns** | 384 ns | 417 ns | 427 ns | 567 ns |
57-
| Hash medium (30 chars) | 1006 ns | **958 ns** | 1074 ns | 1107 ns | 1090 ns | 1509 ns |
58-
| Hash long (1000 chars) | 7907 ns | **7492 ns** | 8998 ns | 8371 ns | 8545 ns | 8022 ns |
59-
| ByteByByte FNV1a short | 207 ns | **200 ns** | 251 ns | 279 ns | 244 ns | 242 ns |
60-
| ByteByByte FNV1a medium | 635 ns | **625 ns** | 767 ns | 632 ns | 609 ns | 952 ns |
61-
| ByteByByte FNV1a long | 7585 ns | **7444 ns** | 10045 ns | 8487 ns | 7906 ns | 7615 ns |
62-
| ByteByByte CRC32C short | 351 ns | **332 ns** | 366 ns | 417 ns | 653 ns | 450 ns |
63-
| ByteByByte CRC32C medium | 1000 ns | **998 ns** | 1569 ns | 1123 ns | 1980 ns | 1535 ns |
64-
| ByteByByte CRC32C long | 7390 ns | **7374 ns** | 9208 ns | 8859 ns | 13939 ns | 8487 ns |
65-
| Hash64 short (5 chars) | 631 ns | **613 ns** | 1311 ns | 928 ns | 1688 ns | 732 ns |
66-
| Hash64 medium (30 chars) | 1964 ns | **1959 ns** | 4098 ns | 2783 ns | 5052 ns | 2930 ns |
67-
| Hash64 long (1000 chars) | 9124 ns | **8997 ns** | 14125 ns | 17648 ns | 27274 ns | 14881 ns |
68-
| Single string (reuse) | **19.6 ns** | 19.9 ns | 24.6 ns | 37.5 ns | 51.6 ns | 32.6 ns |
54+
| Operation | Linux GCC | Linux Clang | Windows MinGW GCC | Windows Clang-GNU-CLI | Windows Clang-MSVC-CLI | Windows MSVC |
55+
| ------------------------ | --------- | ----------- | ----------------- | --------------------- | ---------------------- | ------------ |
56+
| Hash short (5 chars) | 208 ns | **195 ns** | 221 ns | 344 ns | 348 ns | 433 ns |
57+
| Hash medium (30 chars) | 453 ns | **378 ns** | 474 ns | 593 ns | 632 ns | 993 ns |
58+
| Hash long (1000 chars) | 4837 ns | **3638 ns** | 5052 ns | 5781 ns | 6042 ns | 10463 ns |
59+
| ByteByByte FNV1a short | 194 ns | **192 ns** | 207 ns | 490 ns | 510 ns | 423 ns |
60+
| ByteByByte FNV1a medium | 591 ns | **526 ns** | 614 ns | 830 ns | 872 ns | 1256 ns |
61+
| ByteByByte FNV1a long | 7334 ns | **6959 ns** | 7533 ns | 10882 ns | 11347 ns | 15276 ns |
62+
| ByteByByte CRC32C short | 188 ns | **184 ns** | 220 ns | 361 ns | 361 ns | 446 ns |
63+
| ByteByByte CRC32C medium | 473 ns | **380 ns** | 465 ns | 609 ns | 625 ns | 1011 ns |
64+
| ByteByByte CRC32C long | 4827 ns | **3625 ns** | 4948 ns | 5859 ns | 5885 ns | 10114 ns |
65+
| Hash64 short (5 chars) | 259 ns | **258 ns** | 259 ns | 289 ns | 265 ns | 363 ns |
66+
| Hash64 medium (30 chars) | 775 ns | **760 ns** | 796 ns | 889 ns | 802 ns | 1246 ns |
67+
| Hash64 long (1000 chars) | 7133 ns | **6405 ns** | 7022 ns | 7440 ns | 6743 ns | 10742 ns |
68+
| Single string (reuse) | 8.40 ns | **7.96 ns** | 8.37 ns | 11.9 ns | 10.9 ns | 18.7 ns |
6969

7070
### Integer hashing
7171

7272
| Operation | Linux GCC | Linux Clang | Windows MinGW GCC | Windows Clang-GNU-CLI | Windows Clang-MSVC-CLI | Windows MSVC |
7373
| --------------------- | ---------- | ----------- | ----------------- | --------------------- | ---------------------- | ------------ |
74-
| Hash uint32 (1000×) | 363 ns | **357 ns** | 465 ns | 628 ns | 901 ns | 665 ns |
75-
| Hash uint64 (1000×) | 612 ns | **593 ns** | 820 ns | 274 ns | 326 ns | 698 ns |
76-
| Hash int32 (1000×) | 362 ns | **358 ns** | 476 ns | 646 ns | 889 ns | 670 ns |
77-
| Hash64 uint64 (1000×) | **727 ns** | 734 ns | 1099 ns | 1358 ns | 2100 ns | 956 ns |
74+
| Hash uint32 (1000×) | **452 ns** | 771 ns | 469 ns | 1107 ns | 1082 ns | 1496 ns |
75+
| Hash uint64 (1000×) | 706 ns | **227 ns** | 730 ns | 332 ns | 327 ns | 1911 ns |
76+
| Hash int32 (1000×) | **453 ns** | 772 ns | 469 ns | 1081 ns | 1042 ns | 1442 ns |
77+
| Hash64 uint64 (1000×) | 842 ns | 838 ns | **825 ns** | 872 ns | 849 ns | 1172 ns |
7878

7979
### Algorithm comparison
8080

81-
| Operation | Linux GCC | Linux Clang | Windows MinGW GCC | Windows Clang-GNU-CLI | Windows Clang-MSVC-CLI | Windows MSVC |
82-
| ------------------------------- | ------------ | ------------ | ----------------- | --------------------- | ---------------------- | ------------ |
83-
| CRC32C HW short (5 chars) | 2.13 ns | **2.11 ns** | 2.61 ns | 3.77 ns | 3.75 ns | 3.64 ns |
84-
| CRC32C SW short (5 chars) | 18.8 ns | **18.6 ns** | 25.1 ns | 21.5 ns | 21.8 ns | 43.0 ns |
85-
| CRC32C HW medium (30 chars) | **22.4 ns** | 23.6 ns | 28.9 ns | 29.1 ns | 31.4 ns | 34.5 ns |
86-
| CRC32C SW medium (30 chars) | **206 ns** | 208 ns | 283 ns | 259 ns | 259 ns | 372 ns |
87-
| std::hash short (5 chars) | 363 ns | **360 ns** | 328 ns | 247 ns | 436 ns | 353 ns |
88-
| std::hash medium (30 chars) | 405 ns | **391 ns** | 445 ns | 670 ns | 1413 ns | 628 ns |
89-
| std::hash long (1000 chars) | 1147 ns | **1116 ns** | 1444 ns | 8859 ns | 19950 ns | 7789 ns |
90-
| std::hash uint32 (1000×) | 109 ns | **106 ns** | 141 ns | 1883 ns | 3023 ns | 1025 ns |
91-
| std::hash uint64 (1000×) | 300 ns | **294 ns** | 401 ns | 2493 ns | 4050 ns | 1904 ns |
92-
| std::hash single string (reuse) | 4.49 ns | **4.43 ns** | 6.42 ns | 15.7 ns | 35.0 ns | 16.2 ns |
93-
| Combine64 FNV | 0.107 ns | **0.106 ns** | 0.173 ns | 0.319 ns | 0.505 ns | 0.866 ns |
94-
| Combine64 BoostMurmur | **0.106 ns** | **0.106 ns** | 0.176 ns | 1.07 ns | 1.87 ns | 1.59 ns |
81+
| Operation | Linux GCC | Linux Clang | Windows MinGW GCC | Windows Clang-GNU-CLI | Windows Clang-MSVC-CLI | Windows MSVC |
82+
| ------------------------------- | ----------- | ----------- | ----------------- | --------------------- | ---------------------- | ------------ |
83+
| CRC32C HW short (5 chars) | **1.07 ns** | 1.18 ns | 1.11 ns | 1.62 ns | 1.79 ns | 2.41 ns |
84+
| CRC32C SW short (5 chars) | **18.3 ns** | 19.1 ns | 18.4 ns | 27.5 ns | 29.8 ns | 74.4 ns |
85+
| CRC32C HW medium (30 chars) | 15.6 ns | 11.5 ns | **10.8 ns** | 16.8 ns | 19.1 ns | 24.6 ns |
86+
| CRC32C SW medium (30 chars) | **205 ns** | 229 ns | 212 ns | 343 ns | 361 ns | 688 ns |
87+
| std::hash short (5 chars) | 350 ns | 370 ns | **273 ns** | 253 ns | 314 ns | 408 ns |
88+
| std::hash medium (30 chars) | 396 ns | 381 ns | **374 ns** | 849 ns | 830 ns | 1180 ns |
89+
| std::hash long (1000 chars) | **1088 ns** | 1095 ns | 1144 ns | 11149 ns | 10905 ns | 15230 ns |
90+
| std::hash uint32 (1000×) | **101 ns** | 103 ns | 103 ns | 2252 ns | 2083 ns | 1688 ns |
91+
| std::hash uint64 (1000×) | 287 ns | **159 ns** | 294 ns | 2849 ns | 2679 ns | 3248 ns |
92+
| std::hash single string (reuse) | 4.41 ns | **4.24 ns** | 4.55 ns | 17.4 ns | 16.3 ns | 25.7 ns |
93+
| Combine64 FNV | **1.05 ns** | 1.07 ns | 1.08 ns | 1.15 ns | 1.15 ns | 1.43 ns |
94+
| Combine64 BoostMurmur | 3.67 ns | **3.52 ns** | 3.77 ns | 3.68 ns | 3.68 ns | 4.71 ns |
9595

9696
### Memory access patterns
9797

98-
| Operation | Linux GCC | Linux Clang | Windows MinGW GCC | Windows Clang-GNU-CLI | Windows Clang-MSVC-CLI | Windows MSVC |
99-
| --------------------------- | --------- | ------------ | ----------------- | --------------------- | ---------------------- | ------------ |
100-
| Cache test (100 strings) | 3350 ns | **3274 ns** | 4143 ns | 4202 ns | 7580 ns | 5677 ns |
101-
| Sequential (100 strings) | 4333 ns | **4262 ns** | 5781 ns | 6789 ns | 11626 ns | 6278 ns |
102-
| Random access (100 strings) | 12838 ns | **12520 ns** | 20996 ns | 15381 ns | 37202 ns | 18892 ns |
98+
| Operation | Linux GCC | Linux Clang | Windows MinGW GCC | Windows Clang-GNU-CLI | Windows Clang-MSVC-CLI | Windows MSVC |
99+
| --------------------------- | --------- | ----------- | ----------------- | --------------------- | ---------------------- | ------------ |
100+
| Cache test (100 strings) | 20.8 ns | 21.4 ns | **20.4 ns** | 33.7 ns | 27.6 ns | 38.5 ns |
101+
| Sequential (100 strings) | 31.2 ns | **21.9 ns** | 23.7 ns | 28.7 ns | 26.4 ns | 45.2 ns |
102+
| Random access (100 strings) | 94.2 ns | **42.8 ns** | 100 ns | 57.7 ns | 52.1 ns | 140 ns |
103103

104104
---
105105

106-
_Benchmarks executed on November 13, 2025_
106+
_Benchmarks executed on November 15, 2025_

0 commit comments

Comments
 (0)