← 输入框|github.com|刷新
Skip to content
GenboxPublic

About

No description, website, or topics provided.

Resources

Contributing

Stars

23 stars

Watchers

1 watching

Forks

Repository files navigation

FastHash - High-performance non-cryptographic hashes

NuGet

Features

  • API supports ReadOnlySpan for optimal performance and flexibility
  • Unsafe API that takes byte* as input. Use this when performance is important.
  • Most of the hashes are verified with test vectors from the original author
  • High-performance zero-allocation implementations
  • Index variants of each hash function that give the same output as if using the hash function, but takes in a 32bit/64bit integer.

Hashes

These hash functions are included in the library.

Name Version Authors License
AbslHash - The Abseil Authors Apache 2.0
AesniHash ae11846 Ruan Kunliang BSD 3-Clause
CityHash 1.1.1 (4726e30) Geoff Pike, Jyrki Alakuijala MIT
CLHash 1.0.0 (fd0331c) Daniel Lemire, Owen Kaser Apache 2.0
DJBHash - Daniel J. Bernstein Public domain
FarmHash 1.1.0 (0d859a8) Geoff Pike MIT
FarshHash 0.2.0 (d74ef3a) Bulat Ziganshin MIT
FNVHash - Glenn Fowler, Landon Curt Noll, Kiem-Phong Vo Public domain
FoldHash 0.2.0 (8f878c6) Orson Peters Zlib
Gx2Hash 3.5.0 (6438a7b) Orso G. MIT
HighwayHash - Jyrki Alakuijala, Bill Cox, Jan Wassenberg Apache 2.0
MarvinHash 4017327 Niels Ferguson, Reid Borsuk, Jeffrey Cooperstein, Matthew Ellis MIT
MeowHash 0.5/calico (b080caa) Molly Rocket, Inc. Zlib
MurmurHash 3.0.0 (92cf370) Austin Appleby Public domain
PolymurHash 2.0.0 (c6cc688) Orson Peters Zlib
PolyXorHash 0.1.0 (3123eb6) Orson Peters Zlib
RapidHash 3.0.0 (bc4b4ba) Nicolas De Carli MIT
SipHash 1.0.0 (dfaa38e) Jean-Philippe Aumasson, Daniel J. Bernstein MIT
SuperFastHash - Paul Hsieh Paul Hsieh derivative
T1ha2Hash 2.1.1 (0db5d6b) Positive Technologies, Leonid Yuriev Zlib
WyHash final 2 (59aacba), final 3 (991aa3d), 4.3.0 (2ac9a50) Wang Yi Unlicense
xxHash 0.8.3 (e626a72) Yann Collet BSD 2-Clause

License

FastHash is licensed under the MIT license.

The hash functions are ports of the projects listed above and remain subject to their original licenses. The license column shows the license FastHash uses where upstream offers a choice. See THIRD-PARTY-NOTICES.txt for the full notices.

Implementation status

The table below gives an overview of the implementations.

Name Managed Unsafe 32bit 64bit 128bit Index Seeded Secret Verified
AbslHash x x x x x
AesniHash x x x x x
CityHash x x x x x x x x
CLHash x x x x x x
DJBHash x x x x x
FarmHash x x x x x x x x
FarshHash x x x x x x x
FNVHash x x x x x
FoldHash x x x x x
Gx2Hash x x x x x x
HighwayHash x x x x x x x
MarvinHash x x x x x
MeowHash x x x x
MurmurHash x x x x x x -
PolymurHash x x x x
PolyXorHash x x x x x x x
RapidHash x x x x x
SipHash x x x x x x x
SuperFastHash x x x x x
T1ha2Hash x x x x x
WyHash2 x x x x x x x
WyHash3 x x x x x x x
WyHash4 x x x x x x x
xxHash x x x x x x x
xxHash3 x x x x x x x
  • Managed: Fully managed C# implementation.
  • Unsafe: Pointer-based implementation.
  • Bits: Output widths exposed by the implementation.
  • Index: Hashes a 32-bit or 64-bit integer directly.
  • Seeded: Accepts an input seed to vary hash results.
  • Secret: Accepts caller-provided key material.
  • Verified: Tested against vectors supplied by the original author. A '-' means vectors exist but are not yet included.
  • WYHASH_CONDOM: Define this compilation symbol when building from source to select upstream mode 2 (blind multiplication). Default builds use upstream mode 1.

Performance

Hash functions

Measured on 32 KiB data. The unsafe versions are implemented using C# unsafe code.

Note: Speed is not everything. The quality of a hash is just as important, but much more difficult to measure. See SMHasher for more details on hash quality.

Method Mean Error StdDev MiB/s
Gx2Hash32 273.3 ns 2.00 ns 1.32 ns 114,346
Gx2Hash128 273.8 ns 2.78 ns 1.84 ns 114,123
Gx2Hash64 274.4 ns 5.37 ns 3.88 ns 113,885
MeowHash128Unsafe 530.1 ns 0.37 ns 0.19 ns 58,953
MeowHash64Unsafe 531.5 ns 2.39 ns 1.58 ns 58,799
FoldHashQuality64 785.1 ns 0.95 ns 0.50 ns 39,805
FoldHash64 787.6 ns 3.62 ns 2.39 ns 39,680
Wy2Hash64Unsafe 888.4 ns 2.24 ns 1.48 ns 35,176
AesniHash64 956.9 ns 9.70 ns 6.41 ns 32,656
AesniHash128 957.9 ns 10.05 ns 5.98 ns 32,624
Rapid3HashMicro64 1,023.7 ns 3.61 ns 2.39 ns 30,527
Rapid3HashNano64 1,027.4 ns 2.32 ns 1.22 ns 30,415
Rapid3Hash64 1,034.5 ns 15.90 ns 9.46 ns 30,208
Wy2Hash64 1,113.5 ns 7.36 ns 4.38 ns 28,065
FarmHash64Unsafe 1,264.9 ns 2.77 ns 1.65 ns 24,706
FarmHash64 1,265.0 ns 1.02 ns 0.53 ns 24,704
CityHash128 1,554.8 ns 5.24 ns 2.74 ns 20,099
CityHash128Unsafe 1,560.2 ns 8.06 ns 5.33 ns 20,029
CityHash64Unsafe 1,573.0 ns 1.81 ns 1.08 ns 19,866
CityHash64 1,622.3 ns 31.70 ns 32.56 ns 19,262
XxHash64Unsafe 1,697.1 ns 13.65 ns 9.03 ns 18,414
XxHash64 1,718.7 ns 33.71 ns 26.32 ns 18,182
FarshHash64Unsafe 2,370.7 ns 23.88 ns 15.79 ns 13,182
FarshHash64 2,927.0 ns 21.70 ns 12.91 ns 10,677
XxHash32Unsafe 3,392.1 ns 26.25 ns 15.62 ns 9,212
XxHash32 3,395.9 ns 29.93 ns 19.80 ns 9,202
Murmur3Hash128Unsafe 3,713.3 ns 2.30 ns 1.37 ns 8,416
Murmur3Hash128 3,804.6 ns 14.37 ns 9.51 ns 8,214
CityHash32Unsafe 3,917.9 ns 10.12 ns 6.02 ns 7,976
FarmHash32 3,942.2 ns 10.61 ns 7.01 ns 7,927
CityHash32 3,956.8 ns 16.46 ns 9.80 ns 7,898
FarmHash32Unsafe 3,964.4 ns 42.80 ns 25.47 ns 7,883
Xx3Hash64Unsafe 4,109.6 ns 16.47 ns 9.80 ns 7,604
Xx3Hash128Unsafe 4,112.9 ns 25.21 ns 13.19 ns 7,598
Polymur2Hash64 4,159.1 ns 8.17 ns 4.86 ns 7,514
MarvinHash64 8,552.2 ns 38.51 ns 25.47 ns 3,654
MarvinHash32 8,586.4 ns 60.45 ns 39.98 ns 3,639
Murmur3Hash32Unsafe 8,808.0 ns 8.33 ns 4.96 ns 3,548
Murmur3Hash32 8,822.5 ns 15.04 ns 7.87 ns 3,542
SuperFastHash32Unsafe 10,088.7 ns 25.39 ns 15.11 ns 3,098
SuperFastHash32 10,092.9 ns 27.41 ns 18.13 ns 3,096
SipHash64 10,201.6 ns 41.62 ns 21.77 ns 3,063
SipHash64Unsafe 10,377.6 ns 2.38 ns 1.25 ns 3,011
Djb2Hash32Unsafe 20,187.0 ns 8.72 ns 4.56 ns 1,548
Djb2Hash64 20,187.2 ns 19.96 ns 13.20 ns 1,548
Djb2Hash32 20,195.8 ns 33.28 ns 22.01 ns 1,547
Djb2Hash64Unsafe 20,197.7 ns 26.61 ns 15.84 ns 1,547
Fnv1aHash32 26,892.0 ns 22.45 ns 14.85 ns 1,162
Fnv1aHash32Unsafe 26,893.7 ns 20.96 ns 10.96 ns 1,162
Fnv1aHash64 26,918.9 ns 55.92 ns 33.27 ns 1,161
Fnv1aHash64Unsafe 27,149.7 ns 247.35 ns 147.20 ns 1,151

Index functions

Method Mean Error StdDev
Gx2Hash64 0.0796 ns 0.0198 ns 0.0175 ns
Fnv1aHash32 0.1131 ns 0.0102 ns 0.0068 ns
XxHash32 0.1249 ns 0.0141 ns 0.0093 ns
FarmHash64 0.1299 ns 0.0069 ns 0.0041 ns
FoldHash64 0.1302 ns 0.0157 ns 0.0104 ns
AesniHash64 0.1352 ns 0.0083 ns 0.0055 ns
Murmur3Hash32 0.1373 ns 0.0267 ns 0.0209 ns
Djb2Hash32 0.1886 ns 0.0065 ns 0.0034 ns
Gx2Hash32 0.1997 ns 0.0149 ns 0.0078 ns
CityHash64 0.3420 ns 0.0210 ns 0.0125 ns
Wy2Hash64 0.3537 ns 0.0048 ns 0.0029 ns
Xx3Hash64 0.3700 ns 0.0167 ns 0.0099 ns
SuperFastHash32 0.3980 ns 0.0073 ns 0.0044 ns
FoldHashQuality64 0.4183 ns 0.0319 ns 0.0231 ns
Rapid3HashNano64 0.4331 ns 0.0283 ns 0.0221 ns
Rapid3HashMicro64 0.4446 ns 0.0278 ns 0.0184 ns
XxHash64 0.4563 ns 0.0137 ns 0.0091 ns
Rapid3Hash64 0.4869 ns 0.0556 ns 0.0617 ns
MarvinHash32 0.6195 ns 0.0053 ns 0.0032 ns
FarshHash64 0.8928 ns 0.0050 ns 0.0033 ns
Fnv1aHash64 1.2018 ns 0.0386 ns 0.0230 ns
Djb2Hash64 1.3681 ns 0.0443 ns 0.0293 ns
MarvinHash64 1.3807 ns 0.0078 ns 0.0047 ns
FarmHash32 1.4742 ns 0.0076 ns 0.0040 ns
CityHash32 1.5003 ns 0.0066 ns 0.0040 ns
Polymur2Hash64 1.8500 ns 0.0177 ns 0.0093 ns
SipHash64 7.0921 ns 0.0919 ns 0.0608 ns
MeowHash64Unsafe 39.4472 ns 0.7643 ns 0.6382 ns
HighwayHash64Unsafe 81.4736 ns 1.5304 ns 1.4315 ns

Mixer functions

Method spec Mean Error StdDev
Mix64 JM_xmrx_Depth12_64 1.136 ns 0.0187 ns 0.0111 ns
Mix64 DS_xmxmx_Mix01_64 1.159 ns 0.0104 ns 0.0062 ns
Mix64 YC_xmx_XXH3_64 1.167 ns 0.0177 ns 0.0105 ns
Mix64 DS_xmxmx_Mix09_64 1.168 ns 0.0115 ns 0.0076 ns
Mix64 DS_xmxmx_Mix11_64 1.169 ns 0.0023 ns 0.0014 ns
Mix64 DS_xmxmx_Mix05_64 1.172 ns 0.0252 ns 0.0150 ns
Mix64 EZ_xmx_FastHash_64 1.172 ns 0.0130 ns 0.0086 ns
Mix64 JM_mxrmx_Depth14_64 1.179 ns 0.0191 ns 0.0126 ns
Mix64 JM_mrm_Depth7_64 1.180 ns 0.0151 ns 0.0100 ns
Mix64 JM_xmx_Depth9_64 1.183 ns 0.0357 ns 0.0236 ns
Mix64 JM_mxm_Depth8_64 1.184 ns 0.0136 ns 0.0090 ns
Mix64 PE_xmxmx_Moremur_64 1.205 ns 0.0335 ns 0.0222 ns
Mix64 JM_xmxmx_Mx2_64 1.351 ns 0.0121 ns 0.0072 ns
Mix64 JM_mxmx_Depth11_64 1.357 ns 0.0105 ns 0.0063 ns
Mix64 DL_xmxmx_Lea_64 1.369 ns 0.0059 ns 0.0035 ns
Mix64 PE_rrxrrxmxxmxx_Nasam_64 1.372 ns 0.0165 ns 0.0109 ns
Mix64 DS_xmxmx_Mix12_64 1.375 ns 0.0288 ns 0.0190 ns
Mix64 JM_mxmxmx_Depth15_64 1.376 ns 0.0347 ns 0.0230 ns
Mix64 DE_xmxmx_Degski_64 1.378 ns 0.0265 ns 0.0175 ns
Mix64 TE_rlxrlmrlxrlx_AxMix_64 1.379 ns 0.0106 ns 0.0070 ns
Mix64 AA_xmxmx_Murmur_64 1.382 ns 0.0280 ns 0.0185 ns
Mix64 DS_xmxmx_Mix03_64 1.385 ns 0.0203 ns 0.0106 ns
Mix64 WF_amxmx_Wymix_64 1.386 ns 0.0141 ns 0.0093 ns
Mix64 DS_xmxmx_Mix08_64 1.387 ns 0.0184 ns 0.0121 ns
Mix64 WF_amx_Wymix_64 1.389 ns 0.0204 ns 0.0135 ns
Mix64 DS_xmxmx_Mix10_64 1.389 ns 0.0324 ns 0.0234 ns
Mix64 DS_xmxmx_Mix02_64 1.390 ns 0.0483 ns 0.0377 ns
Mix64 PE_rrxrrxmxmx_rrmxmx_64 1.391 ns 0.0219 ns 0.0145 ns
Mix64 DS_xmxmx_Mix07_64 1.392 ns 0.0329 ns 0.0196 ns
Mix64 PK_rlxrlx_Umash_64 1.392 ns 0.0194 ns 0.0128 ns
Mix64 DS_xmxmx_Mix04_64 1.394 ns 0.0207 ns 0.0137 ns
Mix64 PE_rrxrrmrrxrrxmx_rrxmrrxmsx0_64 1.396 ns 0.0445 ns 0.0295 ns
Mix64 JM_mxma_Depth11_64 1.399 ns 0.0296 ns 0.0196 ns
Mix64 JM_mxmxm_Depth13_64 1.411 ns 0.0425 ns 0.0253 ns
Mix64 DS_xmxmx_Mix14_64 1.413 ns 0.0507 ns 0.0335 ns
Mix64 YC_xmxmx_XXH_64 1.415 ns 0.0331 ns 0.0219 ns
Mix64 DS_xmxmx_Mix06_64 1.425 ns 0.0382 ns 0.0227 ns
Mix64 DS_xmxmx_Mix13_64 1.454 ns 0.0522 ns 0.0580 ns
Mix64 JM_xmxmxmx_Mx3_64 1.569 ns 0.0120 ns 0.0063 ns
Mix64 GP_mxxmxxm_CityHash_64 1.591 ns 0.0262 ns 0.0174 ns
Mix32 CW_xmxmxmx_Triple_32 1.947 ns 0.0484 ns 0.0320 ns
Mix32 AA_xmxmx_Murmur_32 2.045 ns 0.0407 ns 0.0242 ns
Mix32 DE_xmxmx_Degski_32 2.203 ns 0.0160 ns 0.0095 ns
Mix32 YC_xmxmx_XXH_32 2.222 ns 0.0138 ns 0.0092 ns
Mix32 FP_xsxxmx_Fp64_32 2.234 ns 0.0140 ns 0.0093 ns
Mix32 CW_xmxmx_LowBias_32 2.255 ns 0.0656 ns 0.0702 ns

About

No description, website, or topics provided.

Resources

Contributing

Stars

23 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages