komihash (rust)

Komihash is a hash function passes all [smhasher] tests with extremely high performance. A PRNG named komirand is also provided that passes PractRand test. See [the original C implementation] for more details.

Performance

This crate archives almost the same performance with the original C implementation. The benchmark is done on an Apple Macbook Pro (Apple M1 Pro).

``` test benchsimplewith00000bytesx10input ... bench: 16 ns/iter (+/- 0) test benchsimplewith00001bytesx10input ... bench: 25 ns/iter (+/- 0) test benchsimplewith00002bytesx10input ... bench: 24 ns/iter (+/- 1) test benchsimplewith00003bytesx10input ... bench: 25 ns/iter (+/- 0) test benchsimplewith00004bytesx10input ... bench: 23 ns/iter (+/- 0) test benchsimplewith00005bytesx10input ... bench: 24 ns/iter (+/- 0) test benchsimplewith00006bytesx10input ... bench: 25 ns/iter (+/- 0) test benchsimplewith00007bytesx10input ... bench: 27 ns/iter (+/- 0) test benchsimplewith00008bytesx10input ... bench: 22 ns/iter (+/- 0) test benchsimplewith00009bytesx10input ... bench: 25 ns/iter (+/- 1) test benchsimplewith00010bytesx10input ... bench: 26 ns/iter (+/- 0) test benchsimplewith00011bytesx10input ... bench: 28 ns/iter (+/- 0) test benchsimplewith00012bytesx10input ... bench: 25 ns/iter (+/- 1) test benchsimplewith00013bytesx10input ... bench: 26 ns/iter (+/- 0) test benchsimplewith00014bytesx10input ... bench: 26 ns/iter (+/- 0) test benchsimplewith00015bytesx10input ... bench: 26 ns/iter (+/- 1) test benchsimplewith00016bytesx10input ... bench: 25 ns/iter (+/- 0) test benchsimplewith00024bytesx10input ... bench: 26 ns/iter (+/- 0) test benchsimplewith00032bytesx10input ... bench: 32 ns/iter (+/- 0) test benchsimplewith00048bytesx10input ... bench: 39 ns/iter (+/- 1) test benchsimplewith00064bytesx10input ... bench: 56 ns/iter (+/- 0) test benchsimplewith00096bytesx10input ... bench: 68 ns/iter (+/- 0) test benchsimplewith00128bytesx10input ... bench: 76 ns/iter (+/- 3) test benchsimplewith00192bytesx10input ... bench: 98 ns/iter (+/- 2) test benchsimplewith00256bytesx10input ... bench: 120 ns/iter (+/- 3) test benchsimplewith01024bytesx10input ... bench: 433 ns/iter (+/- 8) test benchsimplewith04096bytesx10input ... bench: 1,734 ns/iter (+/- 54) test benchsimplewith16384bytesx10input ... bench: 6,955 ns/iter (+/- 96) test benchsimplewith65536bytesx10_input ... bench: 27,840 ns/iter (+/- 601)

test result: ok. 0 passed; 0 failed; 0 ignored; 29 measured; 0 filtered out; finished in 21.00s

```

or in a more readable format

| Input size (Byte) | Time (ns) | Throughput(GB/s) | |-------------------|-----------|------------------| | 0 | 1.6 | N/A | | 1 | 2.5 | 0.4 | | 2 | 2.4 | 0.83 | | 3 | 2.5 | 1.2 | | 4 | 2.3 | 1.73 | | 5 | 2.4 | 2.08 | | 6 | 2.5 | 2.4 | | 7 | 2.7 | 2.59 | | 8 | 2.2 | 3.64 | | 9 | 2.5 | 3.6 | | 10 | 2.6 | 3.85 | | 11 | 2.8 | 3.93 | | 12 | 2.5 | 4.8 | | 13 | 2.6 | 5.0 | | 14 | 2.6 | 5.38 | | 15 | 2.6 | 5.77 | | 16 | 2.5 | 6.4 | | 24 | 2.6 | 9.23 | | 32 | 3.2 | 10 | | 48 | 3.9 | 12.3 | | 64 | 5.6 | 11.4 | | 96 | 6.8 | 14.1 | | 128 | 7.6 | 16.8 | | 192 | 9.8 | 19.6 | | 256 | 12 | 21.3 | | 1024 | 43.3 | 23.6 | | 4096 | 173.4 | 23.6 | | 16384 | 695.5 | 23.6 | | 65536 | 2784.0 | 23.6 |

License

MIT