2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

  • 2016-09-05
  • 本文字数:1231 字

    阅读完需:约 4 分钟

近日,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 更快的压缩速度和更低的电量消耗。

查看英文原文 Facebook Open-Sources New Compression Algorithm Outperforming Zlib

2016-09-05 19:009983
用户头像

发布了 1008 篇内容, 共 444.0 次阅读, 收获喜欢 346 次。

关注

评论

发布
暂无评论
发现更多内容

百度商业AI技术创新大赛火热进行中,携手专家大咖一起创新为更好!

百度Geek说

人工智能 AIGC 企业号 5 月 PK 榜

云原生数据库厂商拓数派加入龙蜥社区,打造多样化的数据底座

OpenAnolis小助手

开源 操作系统 龙蜥社区 CLA 拓数派

速来!TDengine 六周年线上生日趴,“送”周边大礼包啦

爱倒腾的程序员

时序数据库 ​TDengine taosdata

探索云原生技术发展与应用实践,赋能企业数字化转型 | 2023开放原子全球开源峰会云原生分论坛即将启幕

开放原子开源基金会

开源 云原生

波司登云原生微服务治理探索

阿里巴巴云原生

阿里云 微服务 云原生

凝心聚力,共创未来 | 2023 开放原子全球开源峰会 OpenCloudOS 社区年会即将启幕

开放原子开源基金会

开源 云原生技术 OpenCloudOS 社区

UniFi USW-Flex 室内-室外 POE 交换机

HoneyMoose

开源赋能 普惠未来|TKEStack诚邀您参与2023开放原子全球开源峰会

开放原子开源基金会

开源 开放原子开源基金会 开放原子全球开源峰会

海量数据运维要给力,GaussDB(for Cassandra)来助力

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

软件测试/测试开发丨学习笔记之Allure2测试报告

测试人

程序员 软件测试 自动化测试 测试开发 Allure

2天时间3个面试,百度进了3面!

王中阳Go

golang 职场 面经 求职面试 提高效率

华秋硬创 | 全国科技工作者日,致敬每一位科技创新者!

华秋电子

M2M场景之客户端凭证模式|OIDC & OAuth2.0 认证协议最佳实践系列 【4】

Authing

OAuth 2.0 Oauth OIDC

火山引擎DataLeap的Catalog系统搜索实践 (二):整体架构

字节跳动数据平台

元数据 catalog DataLeap 文档检索

英特尔持续耕耘锐炫显卡:累计21次驱动更新,支持XeSS游戏达50+

E科讯

支持神经滤镜Photoshop 2023 (ps 2023)Mac v24.5/24.6b中文激活

真大的脸盆

Mac Mac 软件 ps神经滤镜 photoshop神经滤镜

Arm NN 成功适配 openEuler Embedded,提供高性能神经网络推理能力

openEuler

Linux 操作系统 openEuler risc-v embedded

RustChinaConf 2023官网上线,精彩议题早知道

Mike Tang

索信达“数据资产管理解决方案”全解析

索信达控股

OpenMLDB v0.8 新功能:离线引擎数据源支持 Amazon S3

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

Flink CEP 在抖音电商的业务实践|电商行业实践专栏上线

Apache Flink

大数据 flink 实时计算

从Google、创业再到字节跳动,我在开源领域的实践与思考

开源雨林

创业 字节跳动 开源治理

软件测试/测试开发丨Web自动化测试常见控件交互方法

测试人

SeaTunnel毕业!首个国人主导的数据集成项目成为Apache顶级项目

Apache SeaTunnel

大数据 开源 数据集成 国产开源 Apache SeaTunnel

一分钟跑出 AI 图像的生成平台

CODING DevOps

AI Cloud Studio 云端IDE

Tomcat 安装与启动

Andy

Facebook开源新的压缩算法,性能超zlib_开源_Sergio De Simone_InfoQ精选文章