Giter Site home page Giter Site logo

rust-t1ha's Introduction

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.

rust-t1ha's People

Contributors

flier avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.