展示 HN: misa77 - 一种解码速度比 LZ4 快 2 倍(并且比率更好)的编解码器
misa77 (0.2.0) misa77 是一种基于 LZ 的编解码器,专注于一次写入多次读取的细分市场。特别是,它旨在满足以下标准:极高的解压缩吞吐量(单线程)。适度的压缩比(它没有熵后端,因此显而易见无法与像 zstd 这样的算法进行比较,但在高努力水平下的 LZ4 是一个很好的参考点)。恒定的内存使用,无论输入大小如何(在所有压缩模式下都 <= 5 MB,解压缩时为 0 MB)。缓慢的压缩是为了实现上述目标而作出的明显妥协。此外,misa77 对高压缩文件的解压缩速度有一定的协同作用,导致以下结果:它在高度可压缩的文件上提供特别高的解压缩吞吐量。即使对于适度可压缩的文件,在压缩时投入更多精力以获得更压缩的结果也会提高解压缩吞吐量(并带来更好的比率的自然优势)。这使得高努力压缩对 misa77 特别有吸引力,并激发了一些实验性压缩模式(请参阅 src/experimental/),旨在在压缩时投入更多努力,以生成对大多数 CPU 微架构解压缩时友好的压缩流。misa77 从 v0.2.0 版本开始还具有两个压缩努力级别:级别 0:提供更好的解码吞吐量、稍差的比率、相似的编码吞吐量;级别 1(默认):提供稍差的解码吞吐量、更好的比率、相似的编码吞吐量。 文档库函数使用的底层流格式以及 CLI 生成的 .misa77 文件的容器格式可以在 docs/ 中找到。基准测试详细结果列在前面,但这里有一个简短的摘要:misa77 在大多数数据形状的解压缩吞吐量与压缩比的帕累托前沿上。即使在竞争者的比率显著较差时,它也经常解压缩得更快。压缩速度相当慢。v0.1.0 的跨平台结果(在 Intel x86-64、AMD x86-64、ARM64 上)可以在这里找到。请注意,这些数据在您阅读时可能已过时。以下是 Intel x86-64 的一些详细结果。 设置:CPU:Intel(R) Core(TM) i7-14650HX (@2.2 GHz)(禁用 Intel Turbo)。单线程,固定到单个性能核心。CPU 节能模式设置为性能模式。基准测试工具是 lzbench 的公共分支,可以在这里访问。 Silesia 语料库的结果。 misa77 行在前,竞争者按解压速度排序。压缩器名称 压缩 解压 比率 文件名 misa77 0.2.0 -0 54.5 MB/s 5219 MB/s 42.64 silesia.tar misa77 0.2.0 -1 51.2 MB/s 4274 MB/s 39.65 silesia.tar zxc 0.12.0 -3 115 MB/s 2841 MB/s 45.46 silesia.tar zxc 0.12.0 -4 80.8 MB/s 2726 MB/s 42.63 silesia.tar lzsse8fast 2019-04-18 183 MB/s 2661 MB/s 44.80 silesia.tar zxc 0.12.0 -5 48.6 MB/s 2599 MB/s 40.25 silesia.tar lz4hc 1.10.0 -12 7.31 MB/s 2531 MB/s 36.45 silesia.tar lzsse4fast 2019-04-18 186 MB/s 2522 MB/s 45.26 silesia.tar lz4 1.10.0 371 MB/s 2505 MB/s 47.59 silesia.tar lizard 2.1 -10 320 MB/s 2452 MB/s 48.79 silesia.tar zstd 1.5.7 -1 297 MB/s 901 MB/s 34.54 silesia.tar snappy 1.2.2 375 MB/s 855 MB/s 47.89 silesia.tar enwik8 的结果。 压缩器名称 压缩 解压 比率 文件名 misa77 0.2.0 -0 38.7 MB/s 4802 MB/s 48.59 enwik8 misa77 0.2.0 -1 40.6 MB/s 4134 MB/s 44.05 enwik8 zxc 0.12.0 -3 70.1 MB/s 2674 MB/s 52.05 enwik8 zxc 0.12.0 -5 38.7 MB/s 2627 MB/s 46.85 enwik8 zxc 0.12.0 -4 52.7 MB/s 2593 MB/s 48.60 enwik8 lzsse4fast 2019-04-18 141 MB/s 2581 MB/s 47.11 enwik8 lzsse8fast 2019-04-18 135 MB/s 2553 MB/s 47.25 enwik8 lizard 2.1 -10 240 MB/s 2462 MB/s 57.31 enwik8 lz4 1.10.0 276 MB/s 2355 MB/s 57.26 enwik8 lz4hc 1.10.0 -12 9.89 MB/s 2167 MB/s 41.91 enwik8 zstd 1.5.7 -1 225 MB/s 831 MB/s 40.66 enwik8 snappy 1.2.2 240 MB/s 568 MB/s 55.93 enwik8 由于 misa77 的性能相当“突发”(取决于被压缩数据的形状),对 silesia 语料库的文件级分解会揭示一些有趣的性能见解。注意:以下可视化来源于在 misc/lzbench-results-archive/0.2.0/intel.txt 中的基准测试结果。此结果与上文提到的相同的 x86-64 (Intel) 设置。与 lz4 的解码速度比较在级别 0,misa77 在所有 12 个文件中解码速度均快于 lz4(其中一些文件的速度差距很大)。所有其他级别在 11/12 个文件中解码更快。例外是 x-ray,因为它的压缩率极低(lz4 在该文件上的比率几乎为 1.0,实际上退化为 memcpy)。 吞吐量与比率,针对流行的快速解码编解码器在可压缩文件中,misa77 位于解码吞吐量/比率的帕累托前沿:在解码速度最快的同时,基本上与其他快速 LZ 编解码器的比率相匹配或超越。sao 和 x-ray 是由于之前提到的原因而出现的例外。 系统需求:一个 C++20 编译器(GCC 和 Clang 都可以)。CMake >= 3.20。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡