zstd : zstandard ANS 熵編碼法

最近組了台電腦 , 想看看現在的 CPU 能跑多快時, 偶然間發現這個 zstd. 

ZStandard (Zstd) 是一個免費開源的壓縮程式, 

由 Facebook 的 Yann Collet 主導開發在 2016 年公佈, 是用 C 語言編寫的 無失真壓縮演算法. 

這是基於近年來 Duda 的 ANS (Asymmetric Numeral Systems) 熵編碼法而來, 之前常見的是使用 Huffman 熵編碼法. 這個 ANS 熵編碼法, 既有AC算法的壓縮率, 又有 Huffman 算法的壓縮速度, 很適合用在 影音串流即時壓縮. 近年來的手機遊戲 3D 建模, 也是利用這個技術, server 端壓縮, 手機端解壓縮, 來短時間傳遞. 相信將來 AR/VR 也會利用這個技術. 

對數學有興趣想深入研究的話, 可以參考 知乎的這篇 熵編碼無損壓縮 ,

--

Facebook Zstd 的 github link

用 clang build 的話, 可以: 

    make CC=clang MOREFLAGS=-fPIE -j16

clang 說明可以參考這篇先前的網誌 clang

--

Benchmarks

可以使用 lzbench 這支程式
資料可以用:

     Silesia compression corpus.


檔案可以用   wget http://sun.aei.polsl.pl/~sdeor/corpus/silesia.zip

方式來獲得, 然後解開再壓成 tar 檔,

指令: 

    lzbench -t16,16 -ezstd,1 silesia.tar

在 lzbench github readme 使用 core i7 8700K

Compressor nameCompress.Decompress.Compr. sizeRatio
memcpy10362 MB/s10790 MB/s211947520100.00
zstd 1.4.3 -1             480 MB/s    1203 MB/s      73508823    34.68

而我所跑出來 core i7 10700K 的數據為

Compressor nameCompress.Decompress.Compr. sizeRatio
memcpy12028 MB/s11885 MB/s211957760100.00
zstd 1.5.0 -1             473 MB/s    1386 MB/s      73504997    34.68

壓縮速度差不多, 解壓縮快一些

PS: 在 http://facebook.github.io/zstd/ 中, 提到 Benchmark

PS: 另外看到一篇華為 Kunpeng 920 和 Intel 的比較

--

以後有機會來深入瞭解一下這個演算法

這方式應該可以用在很多地方





留言

熱門文章