#base64 #simd #codec #decoding #avx2 #simd-accelerated

dev bin+lib bs64

基于 SIMD 加速的 Base64 编码和解码库

3 个版本

0.1.2 2023年10月16日
0.1.1 2023年10月15日
0.1.0 2023年10月15日

963编码

Download history 36/week @ 2024-04-14 22/week @ 2024-04-21 11/week @ 2024-04-28 35/week @ 2024-05-05 37/week @ 2024-05-12 42/week @ 2024-05-19 30/week @ 2024-05-26 32/week @ 2024-06-02 17/week @ 2024-06-09 31/week @ 2024-06-16 32/week @ 2024-06-23 5/week @ 2024-06-30 14/week @ 2024-07-07 26/week @ 2024-07-14 23/week @ 2024-07-21 24/week @ 2024-07-28

每月 87 次下载
5 crates 中使用

MIT/Apache

49KB
747

🚀 Base 64

Docs

✨ Rust 的 SIMD 加速 Base64 ✨

🌟 特点

  • 💡 使用 AVX2 指令实现超快编码和解码
  • 🔄 当 AVX2 不可用时,使用任何可用的 SIMD 作为回退

🎯 项目目标

  • 🔧 简单、惯用的 API
  • 📦 合理的默认值
  • ⚡ 快速

安装

cargo add bs64

使用方法

use bs64;

fn main() {
  // Encode
  let input = vec![2, 3, 4, 5];
  let output: String = bs64::encode(&input);

  // Decode
  let decoded_output = bs64::decode(output.as_bytes());
}

基准测试

在 Intel® Core™ i7-1065G7 上使用 100k 输入,10000 次迭代运行。与 base64data-encoding crate 进行比较。

cargo run --features "cli" --release -- -b 100000 -i 10000

编码

名称 MB/s
🚀 bs64::encode() 4813.70
🚀 bs64::encode_mut() 6579.17
🚀 bs64 回退 944.18
data_encoding 858.51
data_encoding mut 873.28
base64 748.02
base64 mut 870.99

解码

名称 MB/s
🚀 bs64::decode() 3899.26
🚀 bs64::decode_mut() 3965.25
🚀 bs64 回退 837.17
data_encoding 647.33
data_encoding mut 684.01
base64 761.68
base64 mut 805.60

实现细节

代码最初是从 https://github.com/lemire/fastbase64 转移过来的

简单回退实现基于 fastbase64 仓库中的 chromium 实现。Rust 实现中使用迭代器和将输入分块,使得编译器能够轻松地向量化处理。

与原始的 fastbase64 实现相比,AVX2 实现几乎没有变化。

代码针对 x86_64 进行了优化,因此假定存在足够大的缓存来存储查找表。我创建了一个简单的实现,它索引了一个静态有效 Base64 字符数组 - 其性能仅略低于铬 LUT 实现,因此我可能将其添加为低内存目标的选项(例如嵌入式)。

有用的链接

TODO

  • 集成测试
  • 基准测试套件
  • 符合 MIME、UTF-7 和其他 Base64 标准
  • 回归测试 + Github Actions 中的基准测试
  • 使用功能标志更改默认实现
  • 在运行时创建自定义配置的构建器

依赖关系

~0.3–1MB
~22K SLoC