5个版本 (3个重大更改)
0.4.0 | 2022年11月8日 |
---|---|
0.3.0 | 2022年3月2日 |
0.2.0 | 2022年3月1日 |
0.1.1 | 2022年2月19日 |
0.1.0 | 2022年2月15日 |
#2514 in 算法
14KB
217 代码行
fletcher-simd
Fletcher校验和算法的SIMD实现。
注意:此实现使用模数 2^k
,其中 k
是校验和块大小(位),因为这可以通过包装数学快速完成。其他实现可能使用 2^k - 1
。
功能
- 使用
std::simd
,当前需要 nightly。 - 支持
std::simd
支持的所有架构。 - 通过
multiversion
包提供运行时和编译时检测。 - 标量回退。
Cargo功能
有一个默认启用的 cargo 功能,runtime_dispatch
。启用时,包将在运行时使用CPU功能检测来调度适当的SIMD实现。禁用此功能将仅进行静态调度。
示例
use byteorder::{ByteOrder, LittleEndian};
use fletcher_simd::Fletcher128;
fn main() {
const DATA: &str = "abcdefgh";
let mut fletcher = Fletcher128::new();
// Read bytes in little endian. Endianness matters!
fletcher.update_with_iter(
DATA.as_bytes()
.chunks(8)
.map(|chunk| LittleEndian::read_u64(chunk)),
);
assert_eq!(fletcher.value(), 0x68676665646362616867666564636261);
}
依赖项
~2MB
~45K SLoC