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
檔案可以用 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 name | Compress. | Decompress. | Compr. size | Ratio |
---|---|---|---|---|
memcpy | 10362 MB/s | 10790 MB/s | 211947520 | 100.00 |
zstd 1.4.3 -1 | 480 MB/s | 1203 MB/s | 73508823 | 34.68 |
而我所跑出來 core i7 10700K 的數據為
Compressor name | Compress. | Decompress. | Compr. size | Ratio |
---|---|---|---|---|
memcpy | 12028 MB/s | 11885 MB/s | 211957760 | 100.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 的比較
--
以後有機會來深入瞭解一下這個演算法
這方式應該可以用在很多地方
留言
張貼留言