9次发布
0.3.7 | 2023年7月24日 |
---|---|
0.3.6 | 2023年7月24日 |
0.3.5 | 2023年3月13日 |
0.3.4 | 2021年10月12日 |
0.1.0 | 2021年4月9日 |
#65 in 算法
2,236,749 每月下载量
用于 2,750 个crate(直接使用11个)
52KB
1.5K SLoC
simd-adler32
一个SIMD加速的Adler-32哈希算法实现。
功能
- 无依赖项
- 支持
no_std
(使用default-features = false
) - 运行时CPU特性检测(当启用
std
时) - 尽可能多的目标上的极致性能(目前仅限于x86和x86_64)
- 当simd不可用时,默认使用标量实现
快速开始
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特性
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
**
在发布新版本之前,已测试最低支持的Rust版本。 [**] 要在 <1.51
的rustc版本上构建,需要禁用 const-generics
功能,可以通过更新依赖定义如下完成。
Cargo.toml
[dependencies]
simd-adler32 = { version "*", default-features = false, features = ["std"] }
性能
列出的基准测试显示随机生成的字节数(10k / 100k)和库名称。基准测试源代码可以在 bench 目录下找到。用于比较的crate是 adler 和 adler32。
Windows 10 Pro - Intel i5-8300H @ 2.30GHz
名称 | 平均时间 | 平均吞吐量 |
---|---|---|
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微秒 | 33.320 GiB/s |
100k/wuffs | 34733纳秒 | 2.6814 GiB/s* |
100k/adler32 | 48.488微秒 | 1.9207 GiB/s |
100k/adler | 178.36微秒 | 534.69 MiB/s |
* wuffs 在 mingw64/gcc 上运行,使用 wuffs bench -ccompilers=gcc -reps=1 -iterscale=300 std/adler32
运行。
MacBookPro16,1 - Intel i9-9880H CPU @ 2.30GHz
名称 | 平均时间 | 平均吞吐量 |
---|---|---|
10k/simd-adler32 | 200.37纳秒 | 46.480 GiB/s |
10k/adler32 | 4.1516微秒 | 2.2433 GiB/s |
10k/adler | 10.220微秒 | 933.15 MiB/s |
----------------------- | --------------- | ------------------ |
100k/simd-adler32 | 2.3282微秒 | 40.003 GiB/s |
100k/adler32 | 41.130微秒 | 2.2643 GiB/s |
100k/adler | 83.776微秒 | 534.69 MiB/s |
安全
由于对 simd 内置函数的要求,此包包含大量 unsafe
代码。发布前通过 afl
在发布和调试版本上执行模糊测试。模糊测试可以在 fuzz 目录下找到。
资源
致谢
感谢以下项目的贡献者。
贡献
请随时提交问题或拉取请求。 😄