這些簡單的腳本對 Pigz 平行壓縮器的不同 zlib 壓縮函式庫進行了基準測試。並行壓縮可以使用現代電腦可用的多個核心來快速壓縮資料。該技術可與 CloudFlare zlib 結合使用,後者利用現代硬體的其他功能來加速壓縮。在這裡,我修改了腳本來評估 NIfTI 格式大腦影像的 .gz 壓縮。 AFNI 和 FSL 等工具通常使用 gzip 壓縮(.nii.gz 檔案)來保存 NIfTI 映像。現代 MRI 方法(例如多波段)會產生龐大的資料集,因此需要花費大量時間來壓縮這些影像。
下圖顯示了 Pigz 與預設單執行緒 Pigz 的效能,因此「1」表示效能相當。顯示 3 個壓縮等級的效能:快速(3,基線 35 秒)、預設(6、50 秒)和慢速(9、183 秒)。橫軸顯示用於壓縮的執行緒數。在較低的壓縮等級 (1) 下,所有工具都相對較快,從磁碟讀取和寫入是速率限制因素。在更高的壓縮等級下,多執行緒和 CloudFlare 增強功能的組合相對於預設 gzip 顯著提高了效能。測試系統為24核心(48執行緒)Intel Xeon Platinum 8260:
下圖顯示了每個工具在 4 核(8 線程)計算機上使用其首選線程數來壓縮流行的西里西亞語料庫。 Pigz 的所有版本都優於系統的單執行緒 gzip。可以看出,現代 zstd 格式主導了較舊且更簡單的 gzip。 gzip 已在許多領域中廣泛採用(例如,在腦部造影中,它用於 NIfTI、NRRD 和 AFNI)。 gzip 格式的簡單性意味著開發人員可以輕鬆地在他們的工具中包含支援。因此,gzip 在社區中佔有重要地位。然而,專為現代硬體設計並利用新技術的現代格式具有固有的優勢。
腳本5decompress.sh
允許我們比較解壓縮速度。解壓縮比壓縮更快。然而,gzip 解壓縮不能利用多線程,並且通常比現代壓縮格式慢。在此測試中,所有 gz 工具都會解壓縮該資料。相比之下,bzip2 和 ztd 正在解壓縮已壓縮為較小大小的資料。每秒兆位元組數是根據解壓縮的大小計算的。通常,更緊湊的壓縮需要使用更複雜的演算法,因此格式之間的比較具有挑戰性。無論如何,在 gz 工具中,zlib-ng 表現出了優越的解壓縮性能:
速度(兆/秒) | Pigz-CF | 豬豬 | Pigz系統 | 壓縮包 | 壓縮包2 | 壓縮包2 |
---|---|---|---|---|---|---|
減壓 | 278 | 300 | 274 | 244 | 122 | 236 |
使用以下命令運行基準測試:
1compile.sh
2test.sh
5decompress.sh
1compile.sh
將使用不同的 zlib 變體(system、CloudFlare、ng)下載並建立 Pigz 的副本。它還下載樣本影像來測試壓縮,特別是複製到資料夾corpus
樣本 MRI 掃描。您必須先執行此腳本一次,然後再執行其他腳本。所有其他腳本都可以彼此獨立運行。2test.sh
比較不同版本pigz以及系統單執行緒gzip的速度。您可以將corpus
資料夾中的檔案替換為更能代表您的資料集的檔案。3slowtest.sh
下載西里西亞語料庫並測試壓縮速度。該語料庫很受歡迎:基準1、基準2、基準3。4verify.sh
測試了每種方法的壓縮和解壓,確保它們能夠無損地儲存資料。5decompress.sh
評估解壓縮速度。一般來說,gzip 格式壓縮速度慢,但解壓縮速度快(特別是與同時開發的格式相比)。然而,gzip 解壓縮相對於現代 zstd 來說很慢。此外,雖然 gzip 壓縮可以從平行處理中受益,但解壓縮卻不能。這個腳本的一個重要特徵是 zlib 的每個變體都向測試語料庫貢獻壓縮文件,然後在這個完整語料庫上測試每個工具。這可以確保我們比較類似的任務,因為某些 zlib 壓縮方法可能會產生較小的文件,但代價是建立解壓縮速度較慢的文件。6speed_size.sh
比較了 Pigz 與 gzip、zstd 和 bzip2 的不同變體,以壓縮西里西亞語料庫。每個工具都在不同的壓縮等級進行測試,但始終使用首選的執行緒數。 blocksize
。該儲存庫包含用於評估該工具的test_mgzip.py
腳本。