Facebook開源新的壓縮演算法,效能超zlib

2021-09-23 13:45:41 字數 1425 閱讀 3090

近日,facebook開源了新的壓縮演算法zstandard 1.0。據facebook工程師yann collet和chip turner介紹,該演算法是少數能夠在效能和效率方面超過zlib的壓縮演算法之一,而後者當前是「佔統治地位的標準」。facebook zstandard利用了collet之前所做的工作。collet是lz4的作者,他在2023年發布了其新演算法的第乙個版本。

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) / 無分支版本 */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開源新的壓縮演算法,效能超zlib

近日,facebook開源了新的壓縮演算法zstandard 1.0。據facebook工程師yann collet和chip turner介紹,該演算法是少數能夠在效能和效率方面超過zlib的壓縮演算法之一,而後者當前是 佔統治地位的標準 facebook zstandard利用了collet之前...

Apple開源新的壓縮演算法LZFSE

蘋果開源了新的無失真壓縮演算法lzfse,該演算法是去年在ios 9和os x 10.10中引入的。按照蘋果公司的說法,lzfe的壓縮增益和zlib level 5相同,但速度要快2 3倍,能源效率也更高。lzfse基於lempel ziv 並使用了有限狀態熵編碼,後者基於jarek duda在非對...

Apple開源新的壓縮演算法LZFSE

蘋果開源了新的無失真壓縮演算法lzfse,該演算法是去年在ios 9和os x 10.10中引入的。按照蘋果公司的說法,lzfe的壓縮增益和zlib level 5相同,但速度要快2 3倍,能源效率也更高。lzfse基於lempel ziv 並使用了有限狀態熵編碼,後者基於jarek duda在非對...