Crates.io | simd-adler32 |
lib.rs | simd-adler32 |
version | 0.3.7 |
source | src |
created_at | 2021-04-09 02:14:04.400491 |
updated_at | 2023-07-24 18:54:48.756556 |
description | A SIMD-accelerated Adler-32 hash algorithm implementation. |
homepage | |
repository | https://github.com/mcountryman/simd-adler32 |
max_upload_size | |
id | 381134 |
size | 60,254 |
A SIMD-accelerated Adler-32 hash algorithm implementation.
no_std
(with default-features = false
)std
enabled)Cargo.toml
[dependencies]
simd-adler32 = "*"
example.rs
use simd_adler32::Adler32;
let mut adler = Adler32::new();
adler.write(b"rust is pretty cool, man");
let hash = adler.finish();
println!("{}", hash);
// 1921255656
CPU Features
impl | arch | feature |
---|---|---|
✅ | x86 , x86_64 |
avx512 |
✅ | x86 , x86_64 |
avx2 |
✅ | x86 , x86_64 |
ssse3 |
✅ | x86 , x86_64 |
sse2 |
🚧 | arm , aarch64 |
neon |
✅ | wasm32 |
simd128 |
MSRV 1.36.0
**
Minimum supported rust version is tested before a new version is published. [**] Feature
const-generics
needs to disabled to build on rustc versions <1.51
which can be done
by updating your dependency definition to the following.
Cargo.toml
[dependencies]
simd-adler32 = { version "*", default-features = false, features = ["std"] }
Benchmarks listed display number of randomly generated bytes (10k / 100k) and library name. Benchmarks sources can be found under the bench directory. Crates used for comparison are adler and adler32.
Windows 10 Pro - Intel i5-8300H @ 2.30GHz
name | avg. time | avg. thrpt |
---|---|---|
10k/simd-adler32 | 212.61 ns | 43.805 GiB/s |
10k/wuffs | 3843 ns | 2.63 GiB/s* |
10k/adler32 | 4.8084 us | 1.9369 GiB/s |
10k/adler | 17.979 us | 530.43 MiB/s |
----------------------- | --------------- | ------------------ |
100k/simd-adler32 | 2.7951 us | 33.320 GiB/s |
100k/wuffs | 34733 ns | 2.6814 GiB/s* |
100k/adler32 | 48.488 us | 1.9207 GiB/s |
100k/adler | 178.36 us | 534.69 MiB/s |
* wuffs ran using mingw64/gcc, ran with wuffs bench -ccompilers=gcc -reps=1 -iterscale=300 std/adler32
.
MacBookPro16,1 - Intel i9-9880H CPU @ 2.30GHz
name | avg. time | avg. thrpt |
---|---|---|
10k/simd-adler32 | 200.37 ns | 46.480 GiB/s |
10k/adler32 | 4.1516 us | 2.2433 GiB/s |
10k/adler | 10.220 us | 933.15 MiB/s |
----------------------- | --------------- | ------------------ |
100k/simd-adler32 | 2.3282 us | 40.003 GiB/s |
100k/adler32 | 41.130 us | 2.2643 GiB/s |
100k/adler | 83.776 us | 534.69 MiB/s |
This crate contains a significant amount of unsafe
code due to the requirement of unsafe
for simd intrinsics. Fuzzing is done on release and debug builds prior to publishing via
afl
. Fuzzy tests can be found under fuzz the directory.
Thank you to the contributors of the following projects.
Feel free to submit a issue or pull request. :smile: