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