|
38 | 38 |
|
39 | 39 | ### Low-level hash building block |
40 | 40 |
|
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 | |
51 | 51 |
|
52 | 52 | ### String hashing (32-bit) |
53 | 53 |
|
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 | |
69 | 69 |
|
70 | 70 | ### Integer hashing |
71 | 71 |
|
72 | 72 | | Operation | Linux GCC | Linux Clang | Windows MinGW GCC | Windows Clang-GNU-CLI | Windows Clang-MSVC-CLI | Windows MSVC | |
73 | 73 | | --------------------- | ---------- | ----------- | ----------------- | --------------------- | ---------------------- | ------------ | |
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 | |
78 | 78 |
|
79 | 79 | ### Algorithm comparison |
80 | 80 |
|
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 | |
95 | 95 |
|
96 | 96 | ### Memory access patterns |
97 | 97 |
|
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 | |
103 | 103 |
|
104 | 104 | --- |
105 | 105 |
|
106 | | -_Benchmarks executed on November 13, 2025_ |
| 106 | +_Benchmarks executed on November 15, 2025_ |
0 commit comments