これらの単純なスクリプトは、piz 並列コンプレッサー用のさまざまな zlib 圧縮ライブラリのベンチマークを行います。並列圧縮では、最新のコンピューターで利用可能な複数のコアを使用して、データを迅速に圧縮できます。この手法は、最新のハードウェアの他の機能を使用して圧縮を高速化する CloudFlare zlib と組み合わせることができます。ここでは、NIfTI 形式の脳画像の .gz 圧縮を評価するようにスクリプトを調整しました。 AFNI や FSL などのツールでは、gzip 圧縮 (.nii.gz ファイル) を使用して NIfTI イメージを保存するのが一般的です。マルチバンドなどの最新の MRI 手法では巨大なデータセットが生成されるため、これらの画像の圧縮にかなりの時間がかかります。
以下のグラフは、デフォルトのシングルスレッド pigz と pigz のパフォーマンスを示しており、「1」は同等のパフォーマンスを示します。パフォーマンスは、高速 (3、ベースライン 35 秒)、デフォルト (6、50 秒)、低速 (9、183 秒) の 3 つの圧縮レベルで表示されます。横軸は、圧縮に費やされるスレッドの数を示します。低い圧縮レベル (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 は優れた解凍パフォーマンスを示します。
速度 (MB/秒) | ピグズCF | ピグズン | pigz-Sys | gzip | pbzip2 | pbzip2 |
---|---|---|---|---|---|---|
減圧 | 278 | 300 | 274 | 244 | 122 | 236 |
次のようなコマンドを使用してベンチマークを実行します。
1compile.sh
2test.sh
5decompress.sh
1compile.sh
さまざまな zlib バリアント (system、CloudFlare、ng) を使用して pigz のコピーをダウンロードしてビルドします。また、圧縮をテストするためのサンプル画像、特にフォルダーcorpus
にコピーされるサンプル MRI スキャンもダウンロードします。他のスクリプトの前に、このスクリプトを最初に 1 回実行する必要があります。他のすべてのスクリプトは、互いに独立して実行できます。2test.sh
piz のさまざまなバージョンとシステムのシングル スレッド gzip の速度を比較します。 corpus
フォルダー内のファイルを、データセットをより代表するファイルに置き換えることができます。3slowtest.sh
Silesia コーパスをダウンロードし、圧縮速度をテストします。このコーパスは人気があります: ベンチマーク 1、ベンチマーク 2、ベンチマーク 3。4verify.sh
各メソッドの圧縮と解凍をテストし、データを損失なく保存できることを確認します。5decompress.sh
解凍速度を評価します。一般に、gzip 形式は圧縮には時間がかかりますが、解凍には高速です (特に同時に開発された形式と比較して)。ただし、gzip 解凍は最新の zstd に比べて時間がかかります。さらに、gzip 圧縮は並列処理の恩恵を受けることができますが、解凍はそうではありません。このスクリプトの重要な特徴は、zlib の各バリアントが圧縮ファイルをテスト コーパスに提供し、各ツールがこの完全なコーパスでテストされることです。一部の zlib 圧縮方法では、解凍に時間がかかるファイルの作成を犠牲にして、より小さなファイルが生成される可能性があるため、これにより、類似したタスクを比較することが保証されます。6speed_size.sh
シレジア コーパスを圧縮するために pigz のさまざまなバリアントを gzip、zstd、および bzip2 と比較します。各ツールは異なる圧縮レベルでテストされますが、常に推奨されるスレッド数が使用されます。 blocksize
を設定する必要があります。このリポジトリには、このツールを評価するためのtest_mgzip.py
スクリプトが含まれています。