Facebook开源新的压缩算法,性能超zlib

简介:

近日,Facebook开源了新的压缩算法Zstandard 1.0。据Facebook工程师Yann Collet和Chip Turner介绍,该算法是少数能够在性能和效率方面超过zlib的压缩算法之一,而后者当前是“占统治地位的标准”。Facebook Zstandard利用了Collet之前所做的工作。Collet是LZ4的作者,他在2015年发布了其新算法的第一个版本。

Facebook的基准测试显示,在任意压缩率和压缩带宽组合下,Zstandard的性能都要高于zlib。

特别地,当使用标准无损压缩语料库Silesia时,相比zlib,Zstandard展示了出色的性能:

在压缩率相同的情况下,它的速度快大约3到5倍; 在压缩速度相同的情况下,它生成的文件小10%到15%; 不管压缩率多大,它解压缩的速度都要快2倍; 它的最大压缩率要高许多(大约为4比3.15)。
Zstandard使用了有限状态熵,并以Jarek Duda在熵编码非对称数字系统(ANS)方面的工作为基础。ANS的目标是“避免在压缩速度和压缩率之间进行取舍”,它既可以用于精确编码,也可以用于快速编码,并且支持数据加密。但是,从根本上讲,Zstandard之所以提供了更好的性能是因为它的多项设计和实现选择。

zlib受一个32KB的窗口限制,而Zstandard并没有任何固有的限制,它可以更充分地利用现代环境中的内存,包括移动和嵌入式环境。 一个新的Huffman解码器Huff0。它可以借助多个ALU并行解码符号,减少算术操作之间的依赖。
Zstandard设法尽量减少分支,从而将因为分支预测错误而导致的、开销很高的管道清理最小化。下面的例子展示了如何在不使用分支的情况下重写while循环:

/ 经典版本 /while (nbBitsUsed >= 8) { / 每个while测试都是一个分支 / accumulator <<= 8; accumulator += byte++; nbBitsUsed -= 8;}/ 无分支版本 */nbBytesUsed = nbBitsUsed >> 3;nbBitsUsed &= 7;ptr += nbBytesUsed;accumulator = read64(ptr);
对于差别只有几个字节的序列,重复码建模极大地改善了压缩。

Zstandard是使用C语言编写的。它既是一个命令行工具,也是一个库。它提供了20多个压缩级别,让用户可以根据具体可用的硬件、待压缩的数据和待优化的瓶颈进行仔细地调整。Facebook建议开始时使用默认级别3。该级别适合大多数情况。然后,可以尝试9以下的级别,合理地平衡速度和空间,或者使用更高的级别获得更高的压缩率,而20以上的级别则适合那些你不关心压缩速度的情况。

对于Zstandard的未来版本会带来什么特性,Collet和Turner也提供了一些信息,其中包括支持多线程,以及可以提供更快压缩速度和更高压缩率的新的压缩级别。

Zstandard是继苹果的ZLFSE和谷歌的Brotli之后的又一个开源压缩算法。ZLFSE和Brotli都是开源的,每一种算法都针对特定的应用场景进行了优化:Brotli似乎为实现Web资产和Android APK的高压缩率进行了优化,而LZFSE的目标是,在压缩率相同的情况下,提供比zlib更快的压缩速度和更低的电量消耗。

本文转自d1net(转载)

相关文章
|
1月前
|
机器学习/深度学习 算法 数据挖掘
提高时钟置换算法的性能
【10月更文挑战第25天】通过上述一种或多种方法的综合应用,可以在不同程度上提高时钟置换算法的性能,使其更好地适应各种复杂的系统环境和应用场景,提高虚拟内存管理的效率和系统的整体性能。
125 62
|
22天前
|
存储 人工智能 自然语言处理
Delta-CoMe:清华联合OpenBMB等高校开源的新型增量压缩算法
Delta-CoMe是由清华大学NLP实验室联合OpenBMB开源社区、北京大学和上海财经大学提出的新型增量压缩算法。该算法通过结合低秩分解和低比特量化技术,显著减少了大型语言模型的存储和内存需求,同时保持了模型性能几乎无损。Delta-CoMe特别适用于处理数学、代码和多模态等复杂任务,并在推理速度上有所提升。
56 6
Delta-CoMe:清华联合OpenBMB等高校开源的新型增量压缩算法
|
4月前
|
存储 算法 C语言
"揭秘C语言中的王者之树——红黑树:一场数据结构与算法的华丽舞蹈,让你的程序效率飙升,直击性能巅峰!"
【8月更文挑战第20天】红黑树是自平衡二叉查找树,通过旋转和重着色保持平衡,确保高效执行插入、删除和查找操作,时间复杂度为O(log n)。本文介绍红黑树的基本属性、存储结构及其C语言实现。红黑树遵循五项基本规则以保持平衡状态。在C语言中,节点包含数据、颜色、父节点和子节点指针。文章提供了一个示例代码框架,用于创建节点、插入节点并执行必要的修复操作以维护红黑树的特性。
115 1
|
25天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
56 1
|
1月前
|
机器学习/深度学习 算法 5G
基于MIMO系统的SDR-AltMin混合预编码算法matlab性能仿真
基于MIMO系统的SDR-AltMin混合预编码算法通过结合半定松弛和交替最小化技术,优化大规模MIMO系统的预编码矩阵,提高信号质量。Matlab 2022a仿真结果显示,该算法能有效提升系统性能并降低计算复杂度。核心程序包括预编码和接收矩阵的设计,以及不同信噪比下的性能评估。
49 3
|
2月前
|
机器学习/深度学习 算法 决策智能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
|
2月前
|
搜索推荐 Shell
解析排序算法:十大排序方法的工作原理与性能比较
解析排序算法:十大排序方法的工作原理与性能比较
79 9
|
1月前
|
存储 JSON 算法
TDengine 检测数据最佳压缩算法工具,助你一键找出最优压缩方案
在使用 TDengine 存储时序数据时,压缩数据以节省磁盘空间是至关重要的。TDengine 支持用户根据自身数据特性灵活指定压缩算法,从而实现更高效的存储。然而,如何选择最合适的压缩算法,才能最大限度地降低存储开销?为了解决这一问题,我们特别推出了一个实用工具,帮助用户快速判断并选择最适合其数据特征的压缩算法。
55 0
|
2月前
|
缓存 分布式计算 监控
算法优化:提升程序性能的艺术
【10月更文挑战第20天】算法优化:提升程序性能的艺术
|
3月前
|
缓存 算法 数据处理
时间&空间复杂度,Python 算法的双重考验!如何优雅地平衡两者,打造极致性能?
在Python算法中,时间与空间复杂度的平衡至关重要。时间复杂度反映算法执行时间随输入规模的变化趋势,空间复杂度则关注额外存储空间的需求。优秀的算法需兼顾两者,如线性搜索时间复杂度为O(n),空间复杂度为O(1);二分查找在时间效率上显著提升至O(log n),空间复杂度保持为O(1);动态规划通过牺牲O(n)空间换取O(n)时间内的高效计算。实际应用中,需根据具体需求权衡,如实时数据处理重视时间效率,而嵌入式系统更关注空间节约。通过不断优化,我们能在Python中找到最佳平衡点,实现高性能程序。
80 3