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.
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: 17 ns/iter (+/- 0) test benchsimplewith00001bytesx10input ... bench: 26 ns/iter (+/- 0) test benchsimplewith00002bytesx10input ... bench: 27 ns/iter (+/- 1) test benchsimplewith00003bytesx10input ... bench: 28 ns/iter (+/- 1) test benchsimplewith00004bytesx10input ... bench: 25 ns/iter (+/- 0) test benchsimplewith00005bytesx10input ... bench: 26 ns/iter (+/- 0) test benchsimplewith00006bytesx10input ... bench: 28 ns/iter (+/- 1) test benchsimplewith00007bytesx10input ... bench: 29 ns/iter (+/- 2) test benchsimplewith00008bytesx10input ... bench: 21 ns/iter (+/- 1) test benchsimplewith00009bytesx10input ... bench: 27 ns/iter (+/- 1) test benchsimplewith00010bytesx10input ... bench: 29 ns/iter (+/- 0) test benchsimplewith00011bytesx10input ... bench: 30 ns/iter (+/- 1) test benchsimplewith00012bytesx10input ... bench: 27 ns/iter (+/- 1) test benchsimplewith00013bytesx10input ... bench: 29 ns/iter (+/- 2) test benchsimplewith00014bytesx10input ... bench: 29 ns/iter (+/- 0) test benchsimplewith00015bytesx10input ... bench: 29 ns/iter (+/- 1) test benchsimplewith00016bytesx10input ... bench: 26 ns/iter (+/- 1) test benchsimplewith00024bytesx10input ... bench: 27 ns/iter (+/- 1) test benchsimplewith00032bytesx10input ... bench: 33 ns/iter (+/- 1) test benchsimplewith00048bytesx10input ... bench: 42 ns/iter (+/- 3) test benchsimplewith00064bytesx10input ... bench: 58 ns/iter (+/- 3) test benchsimplewith00096bytesx10input ... bench: 70 ns/iter (+/- 4) test benchsimplewith00128bytesx10input ... bench: 79 ns/iter (+/- 2) test benchsimplewith00192bytesx10input ... bench: 101 ns/iter (+/- 5) test benchsimplewith00256bytesx10input ... bench: 124 ns/iter (+/- 7) test benchsimplewith01024bytesx10input ... bench: 445 ns/iter (+/- 18) test benchsimplewith04096bytesx10input ... bench: 1,760 ns/iter (+/- 125) test benchsimplewith16384bytesx10input ... bench: 7,036 ns/iter (+/- 445) test benchsimplewith65536bytesx10_input ... bench: 28,130 ns/iter (+/- 944)
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 | 17 | N/A | | 1 | 26 | 0.38 | | 2 | 27 | 0.74 | | 3 | 28 | 1.07 | | 4 | 25 | 1.16 | | 5 | 26 | 1.54 | | 6 | 28 | 1.71 | | 7 | 29 | 2.41 | | 8 | 21 | 2.38 | | 9 | 27 | 2.67 | | 10 | 29 | 3.45 | | 11 | 30 | 3.67 | | 12 | 27 | 4.44 | | 13 | 29 | 4.48 | | 14 | 29 | 4.83 | | 15 | 29 | 5.17 | | 16 | 26 | 6.15 | | 24 | 27 | 8.89 | | 32 | 33 | 9.70 | | 48 | 42 | 11.43 | | 64 | 58 | 11.03 | | 96 | 70 | 13.71 | | 128 | 79 | 16.22 | | 192 | 101 | 18.91 | | 256 | 124 | 20.65 | | 1024 | 445 | 22.86 | | 4096 | 1760 | 23.25 | | 16384 | 7036 | 23.37 | | 65536 | 28130 | 23.31 |
MIT