3个不稳定版本
0.2.0 | 2023年7月26日 |
---|---|
0.1.1 | 2023年7月4日 |
0.1.0 | 2023年7月4日 |
#271 in 压缩
125KB
2.5K SLoC
快速字节对齐整数编码
此crate是Daniel Lemire的streamvbyte
库的Rust移植。它包含针对不同整数大小和值分布的该格式的多个实现。
每个Coder
实现产生不同的格式,彼此不兼容。名称提供每个值4个可能的标签的长度,因此Coder1234
将每个条目编码为1、2、3或4个字节。标量实现始终可用,但会自动使用针对目标的加速实现(如果可用)。
性能
所有Coder
都提供了标量实现,但通常速度很慢。所有实现还包括在为小端aarch64
构建时使用NEON
指令集和x86_64
使用SSSE3
或SSE4.1
指令集时的加速。
Coder1234
通常是最快的,但还有其他标签长度分布可供选择(包括用于64位值的Coder1248
)。
在M1 Macbook Air上收集了基准测试数据,以生成自己的运行
cargo bench --bench=streamvbyte
每个基准测试都使用具有多达一定长度的1024个元素,并使用zipf-like分布运行。
encode
和decode
基准测试测量值编码吞吐量,deltas
变体在单调递增输入的情况下测量相同的值,并压缩值之间的增量。 data_len
测量基于标签值的确定数据长度的吞吐量,skip_deltas
对增量编码流做同样的事情,并包括跳过的所有值的总和。
Coder1234
基准测试 | 吞吐量 |
---|---|
encode/1 |
4.8Gelem/s |
encode_deltas/1 |
4.1Gelem/s |
decode/1 |
12.7Gelem/s |
decode_deltas/1 |
5.6Gelem/s |
skip_deltas/1 |
19.9Gelem/s |
data_len/1 |
54.2Gelem/s |
encode/2 |
4.8Gelem/s |
encode_deltas/2 |
3.8Gelem/s |
decode/2 |
8.2Gelem/s |
decode_deltas/2 |
4.2Gelem/s |
skip_deltas/2 |
8.5Gelem/s |
encode/4 |
4.8Gelem/s |
encode_deltas/4 |
4.1Gelem/s |
decode/4 |
8.2Gelem/s |
decode_deltas/4 |
4.2Gelem/s |
skip_deltas/4 |
8.4Gelem/s |
Coder0124
基准测试 | 吞吐量 |
---|---|
encode/1 |
4.2Gelem/s |
encode_deltas/1 |
3.6Gelem/s |
decode/1 |
7.2Gelem/s |
decode_deltas/1 |
4.2Gelem/s |
skip_deltas/1 |
7.1Gelem/s |
data_len/1 |
53.8Gelem/s |
encode/2 |
4.2Gelem/s |
encode_deltas/2 |
3.6Gelem/s |
decode/2 |
7.2Gelem/s |
decode_deltas/2 |
4.2Gelem/s |
skip_deltas/2 |
7.3Gelem/s |
encode/4 |
4.2Gelem/s |
encode_deltas/4 |
3.6Gelem/s |
decode/4 |
7.2Gelem/s |
decode_deltas/4 |
4.2Gelem/s |
skip_deltas/4 |
7.5Gelem/s |
Coder1248
基准测试 | 吞吐量 |
---|---|
encode/1 |
3.1Gelem/s |
encode_deltas/1 |
2.5Gelem/s |
decode/1 |
4.6Gelem/s |
decode_deltas/1 |
3.6Gelem/s |
skip_deltas/1 |
6.0Gelem/s |
data_len/1 |
53.8Gelem/s |
encode/4 |
3.1Gelem/s |
encode_deltas/4 |
2.5Gelem/s |
decode/4 |
4.8Gelem/s |
decode_deltas/4 |
3.6Gelem/s |
skip_deltas/4 |
5.7Gelem/s |
encode/8 |
3.0Gelem/s |
encode_deltas/8 |
2.5Gelem/s |
decode/8 |
4.8Gelem/s |
decode_deltas/8 |
3.0Gelem/s |
skip_deltas/8 |
5.4Gelem/s |
依赖项
~160KB