Benchmarks
----------
The benchmark uses the
[Open-Source SMHasher program by Austin Appleby](http://code.google.com/p/smhasher/wiki/SMHasher)
compiled with Visual C on Windows Seven 32-bits in single-thread mode.
The reference system uses a Core 2 Duo @3.0GHz.
| Name | Speed | Quality | Author |
|---------------|----------|:-------:|------------------|
| xxHash | 5.4 GB/s | 10 | Y.C. |
| MurmurHash 3a | 2.7 GB/s | 10 | Austin Appleby |
| SBox | 1.4 GB/s | 9 | Bret Mulvey |
| Lookup3 | 1.2 GB/s | 9 | Bob Jenkins |
| CityHash64 | 1.05 GB/s| 10 | Pike & Alakuijala|
| FNV | 0.55 GB/s| 5 | Fowler, Noll, Vo |
| CRC32 | 0.43 GB/s| 9 | |
| MD5-32 | 0.33 GB/s| 10 | Ronald L.Rivest |
| SHA1-32 | 0.28 GB/s| 10 | |
Q.Score is a measure of quality of the hash function.
It depends on successfully passing SMHasher test set.
10 is a perfect score.
Algorithms with a score < 5 are not listed on this table.
A new version, XXH64, has been created thanks to [Mathias Westerdahl](https://github.com/JCash)'s contribution,
which offers superior speed and dispersion for 64-bits systems.
Note however that 32-bits applications will still run faster using the 32-bits version.
SMHasher speed test, compiled using GCC 4.8.2, on Linux Mint 64-bits.
The reference system uses a Core i5-3340M @2.7GHz
| Version | Speed on 64-bits | Speed on 32-bits |
|------------|------------------|------------------|
| XXH64 | 13.8 GB/s | 1.9 GB/s |
| XXH32 | 6.8 GB/s | 6.0 GB/s |
## Multiple languages
The following versions produce xxHash-compatible results in different languages.
|Language |Author |URL |
|-- |-- |-- |
|__Java__ (XXH32 and XXH64) |Adrien Grand |https://github.com/jpountz/lz4-java |
|__Java__ (XXH64) |Vsevolod Tolstopyatov|https://github.com/OpenHFT/Zero-Allocation-Hashing
|__JavaScript__ (port) |Pierre Curto |https://npmjs.org/package/xxhashjs |
|__JavaScript__ (nodeJS) |Brian White |https://npmjs.org/package/xxhash |
|__JavaScript__ (nodeJS, xxh3)|Nhan Khong |https://github.com/ktrongnhan/xxhash-addon
|__JSX__ (static JavaScript)|Yoshiki Shibukawa |https://www.npmjs.org/package/xxhash.jsx |
|__C#__ (XXH32) |Seok-ju Yun |https://github.com/noricube/xxHashSharp |
|__C#__ (XXH64) |Brandon Dahler |http://www.nuget.org/packages/System.Data.HashFunction.xxHash
|__C#__ (endian independent)|Otaku |https://github.com/differentrain/YYProject.XXHash
|__C#__ (.net std 2.0) |Sedat Kapanoğlu |https://github.com/ssg/HashDepot#xxhash
|__C++ 17__ |Red Gavin |https://github.com/RedSpah/xxhash_cpp
|__Python__ (XXH32) |Ewen Cheslack-Postava|https://pypi.python.org/pypi/pyhashxx/
|__Python__ (XXH64) |Yue Du |https://pypi.python.org/pypi/xxhash/
|__PHP__ |Nir Heimann |https://github.com/nheimann1/php-xxhash
|__PHP7__ |Craig R Megasaxon |https://github.com/Megasaxon/php-xxhash
|__PHP__ (port) |Scott Dutton |https://github.com/exussum12/xxhash
|__Perl__ |Sanko Robinson |https://metacpan.org/module/Digest::xxHash
|__Perl__ (streaming) |Bela Bodecs |https://github.com/DoubleBB/digest-xxhash64
|__Ruby__ (port) |Justin W Smith |http://rubygems.org/gems/ruby-xxHash
|__Ruby__ (wrapper) |Vasiliy Ermolovich |https://rubygems.org/gems/xxhash
|__Ruby__ (digest::class) |konsolebox |https://rubygems.org/gems/digest-xxhash
|__Swift__ |Daisuke T |https://github.com/daisuke-t-jp/xxHash-Swift
|__Pascal__ |Vojtěch Čihák |http://sourceforge.net/projects/xxhashfpc
|__Go__ (XXH32) |Stéphane Bunel |https://bitbucket.org/StephaneBunel/xxhash-go
|__Go__ (XXH64) |Ahmed Waheed |https://github.com/OneOfOne/xxhash
|__Go + ASM__ |Caleb Spare |https://github.com/cespare/xxhash
|__Rust__ |Jake Goulding |https://libraries.io/cargo/twox-hash
|__R__ |Dirk Eddelbuettel |https://github.com/eddelbuettel/digest
|__R__ (XXH3) |mikefc |https://github.com/coolbutuseless/xxhashlite
|__D__ |Masahiro Nakagawa |https://github.com/repeatedly/xxhash-d
|__Scala__ |Desmond Yeung |https://github.com/desmondyeung/scala-hashing
|__Lua__ (binding) |Masatoshi Teruya |https://github.com/mah0x211/lua-xxhash
|__Lua__ (jit, XXH32) |szensk |https://github.com/szensk/luaxxhash
|__Lua__ (jit, XXH64) |Soojin Nam |https://github.com/sjnam/luajit-xxHash
|__Julia__ |Hanan Rosemarin |https://github.com/hros/XXhash.jl
|__Erlang__ |Pierre Matri |https://github.com/pierresforge/erlang-xxhash
|__Haskell__ |Christian Marie |http://hackage.haskell.org/package/xxhash
|__PicoLisp__ |mpech |https://git.envs.net/mpech/xxhash-picolisp
|__Elixir__ |Mykola Konyk |https://github.com/ttvd/elixir-xxhash
|__Tcl__ (XXH32, port) |D. Bohdan |https://wiki.tcl-lang.org/48790
|__Bash__ (port) |Devin Hussey |https://github.com/easyaspi314/xxbash
|__sh__ (port) |Jan Chren |https://gitlab.com/rindeal/xxHashish
|__Crystal__ |Lucjan Suski |https://github.com/methyl/xxhash
|__Zig__ |clownpriest |https://github.com/clownpriest/xxhash
## xxHash is used by
#### Databases
#### Games
#### Filters
#### File Transfer
#### Other
### Special Thanks to
- [Takayuki Matsuoka](https://github.com/t-mat/) for creating `xxhsum -c` and the canvas of this webpage.
- [Mathias Westerdahl](https://github.com/JCash) for introducing the first version of XXH64.
- [Devin Hussey](https://github.com/easyaspi314) for the excellent low-level optimizations on XXH3 and XXH128.
---