|
xxHash
0.8.2
Extremely fast non-cryptographic hash function
|
xxHash is an extremely fast non-cryptographic hash algorithm, working at RAM speed limits.
It is proposed in four flavors, in three families:
The reference system uses an Intel i7-9700K CPU, and runs Ubuntu x64 20.04. The open source benchmark program is compiled with clang v10.0 using -O3 flag.
| Hash Name | ISA ext | Width | Large Data Speed | Small Data Velocity |
|---|---|---|---|---|
| XXH3_64bits() | AVX2 | 64 | 59.4 GB/s | 133.1 |
| MeowHash | AES-NI | 128 | 58.2 GB/s | 52.5 |
| XXH3_128bits() | AVX2 | 128 | 57.9 GB/s | 118.1 |
| CLHash | PCLMUL | 64 | 37.1 GB/s | 58.1 |
| XXH3_64bits() | SSE2 | 64 | 31.5 GB/s | 133.1 |
| XXH3_128bits() | SSE2 | 128 | 29.6 GB/s | 118.1 |
| RAM sequential read | N/A | 28.0 GB/s | N/A | |
| ahash | AES-NI | 64 | 22.5 GB/s | 107.2 |
| City64 | 64 | 22.0 GB/s | 76.6 | |
| T1ha2 | 64 | 22.0 GB/s | 99.0 | |
| City128 | 128 | 21.7 GB/s | 57.7 | |
| FarmHash | AES-NI | 64 | 21.3 GB/s | 71.9 |
| XXH64() | 64 | 19.4 GB/s | 71.0 | |
| SpookyHash | 64 | 19.3 GB/s | 53.2 | |
| Mum | 64 | 18.0 GB/s | 67.0 | |
| CRC32C | SSE4.2 | 32 | 13.0 GB/s | 57.9 |
| XXH32() | 32 | 9.7 GB/s | 71.9 | |
| City32 | 32 | 9.1 GB/s | 66.0 | |
| Blake3* | AVX2 | 256 | 4.4 GB/s | 8.1 |
| Murmur3 | 32 | 3.9 GB/s | 56.1 | |
| SipHash* | 64 | 3.0 GB/s | 43.2 | |
| Blake3* | SSE2 | 256 | 2.4 GB/s | 8.1 |
| HighwayHash | 64 | 1.4 GB/s | 6.0 | |
| FNV64 | 64 | 1.2 GB/s | 62.7 | |
| Blake2* | 256 | 1.1 GB/s | 5.1 | |
| SHA1* | 160 | 0.8 GB/s | 5.6 | |
| MD5* | 128 | 0.6 GB/s | 7.8 |
All xxHash variants use a similar API. Changing the algorithm is a trivial substitution.
input, input + length) is valid, readable memory.length is 0, input may be NULL.unsigned char.These functions are stateless functions which hash a contiguous block of memory, immediately returning the result. They are the easiest and usually the fastest option.
XXH32(), XXH64(), XXH3_64bits(), XXH3_128bits()
These groups of functions allow incremental hashing of unknown size, even more than what would fit in a size_t.
XXH32_reset(), XXH64_reset(), XXH3_64bits_reset(), XXH3_128bits_reset()
1.8.14