diff options
Diffstat (limited to 'vendor/simd-adler32/README.md')
-rw-r--r-- | vendor/simd-adler32/README.md | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/vendor/simd-adler32/README.md b/vendor/simd-adler32/README.md new file mode 100644 index 0000000..4eeec46 --- /dev/null +++ b/vendor/simd-adler32/README.md @@ -0,0 +1,131 @@ +<h1 align="center">simd-adler32</h1> +<p align="center"> + <a href="https://docs.rs/simd-adler32"> + <img alt="docs.rs badge" src="https://img.shields.io/docsrs/simd-adler32?style=flat-square"> + </a> + <a href="https://crates.io/crates/simd-adler32"> + <img alt="crates.io badge" src="https://img.shields.io/crates/v/simd-adler32?style=flat-square"> + </a> + <a href="https://github.com/mcountryman/simd-adler32/blob/main/LICENSE.md"> + <img alt="mit license badge" src="https://img.shields.io/github/license/mcountryman/simd-adler32?style=flat-square"> + </a> +</p> + +A SIMD-accelerated Adler-32 hash algorithm implementation. + +## Features + +- No dependencies +- Support `no_std` (with `default-features = false`) +- Runtime CPU feature detection (when `std` enabled) +- Blazing fast performance on as many targets as possible (currently only x86 and x86_64) +- Default to scalar implementation when simd not available + +## Quick start + +> Cargo.toml + +```toml +[dependencies] +simd-adler32 = "*" +``` + +> example.rs + +```rust +use simd_adler32::Adler32; + +let mut adler = Adler32::new(); +adler.write(b"rust is pretty cool, man"); +let hash = adler.finish(); + +println!("{}", hash); +// 1921255656 +``` + +## Support + +**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 + +```toml +[dependencies] +simd-adler32 = { version "*", default-features = false, features = ["std"] } +``` + +## Performance + +Benchmarks listed display number of randomly generated bytes (10k / 100k) and library +name. Benchmarks sources can be found under the [bench](/bench) directory. Crates used for +comparison are [adler](https://crates.io/crates/adler) and +[adler32](https://crates.io/crates/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 | + +## Safety + +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](/fuzz) the directory. + +## Resources + +- [LICENSE](./LICENSE.md) - MIT +- [CHANGELOG](./CHANGELOG.md) + +## Credits + +Thank you to the contributors of the following projects. + +- [adler](https://github.com/jonas-schievink/adler) +- [adler32](https://github.com/remram44/adler32-rs) +- [crc32fast](https://github.com/srijs/rust-crc32fast) +- [wuffs](https://github.com/google/wuffs) +- [chromium](https://bugs.chromium.org/p/chromium/issues/detail?id=762564) +- [zlib](https://zlib.net/) + +## Contributing + +Feel free to submit a issue or pull request. :smile: |