Skip to content
Rust implementation for T1HA (Fast Positive Hash)
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
benches add memory sum Mar 8, 2019
src
.gitignore
.travis.yml
Cargo.toml
LICENSE
README.md
appveyor.yml
build.rs fix typo issue Mar 5, 2019

README.md

rust-t1ha travis appveyor crate docs

An implementation of the T1HA (Fast Positive Hash) hash function.

Briefly, it is a portable 64-bit hash function:

  • Intended for 64-bit little-endian platforms, predominantly for Elbrus and x86_64, but portable and without penalties it can run on any 64-bit CPU.
  • In most cases up to 15% faster than StadtX hash, xxHash, mum-hash, metro-hash, etc. and all others portable hash-functions (which do not use specific hardware tricks).
  • Provides a set of terraced hash functions.
  • Currently not suitable for cryptography.
  • Licensed under zlib License.

Usage

To include this crate in your program, add the following to your Cargo.toml:

[dependencies]
t1ha = "0.1"

Using t1ha in a HashMap

The T1haHashMap type alias is the easiest way to use the standard library’s HashMap with t1ha.

use t1ha::T1haHashMap;

let mut map = T1haHashMap::default();
map.insert(1, "one");
map.insert(2, "two");

map = T1haHashMap::with_capacity_and_hasher(10, Default::default());
map.insert(1, "one");
map.insert(2, "two");

Note: the standard library’s HashMap::new and HashMap::with_capacity are only implemented for the RandomState hasher, so using Default to get the hasher is the next best option.

Using t1ha in a HashSet

Similarly, T1haHashSet is a type alias for the standard library’s HashSet with `t1ha.

use t1ha::T1haHashSet;

let mut set = T1haHashSet::default();
set.insert(1);
set.insert(2);

set = T1haHashSet::with_capacity_and_hasher(10, Default::default());
set.insert(1);
set.insert(2);

Performance

t1ha can use AES, AVX or AVX2 instructions as hardware acceleration.

Implementation Platform/CPU
t1ha0_ia32aes_avx() x86 with AES-NI and AVX extensions
t1ha0_ia32aes_avx2() x86 with AES-NI and AVX2 extensions
t1ha0_ia32aes_noavx() x86 with AES-NI without AVX extensions
t1ha0_32le() 32-bit little-endian
t1h0a_32be() 32-bit big-endian
t1ha1_le() 64-bit little-endian
t1ha1_be() 64-bit big-endian
t1ha2_atonce() 64-bit little-endian

You could choose the right implementation base on your target_cpu.

$ RUSTFLAGS="-C target-cpu=native" cargo build

Benchmark

rust-t1ha provide a rough performance comparison to other Rust implemenation of non-cryptographic hash functions, you can run the benchmark base on your envrionment and usage scenario.

$ RUSTFLAGS="-C target-cpu=native" cargo bench

Native t1ha Library

rust-t1ha major focus Rust implementation, if you intent to use the origin native t1ha library, please check rust-fasthash project and it's benchmark, which provides a suite of non-cryptographic hash functions from SMHasher.

You can’t perform that action at this time.