下のファイル:「Unexpected Efficiency Dept」 man parallel
によると、それはgzip
さんがに異なるCPUを入力を切り刻んで大きなファイルをアーカイブし、使用してスピードアップすることができますgnuの並列チャンクがgzipの圧縮サイズを改善するのはなぜですか?
seq 90000000
:
最初9000万数字がで出力として、761メガバイトについて取り上げますチャンクを圧縮する。だから、gzip
はこの技術シングルスレッドであっても、それマルチスレッドます:
seq 90000000 | parallel --pipe --recend '' -k gzip -9 >bigfile.gz
2.2GHzの@(4)インテルCore i3-2330Mに、46秒を要しました。
seq 90000000 | gzip -9 > bigfile2.gz
が同じCPU上で、80秒を要した:昔ながら
gzip
に
パイプ。今驚き:
ls -log bigfile*.gz
出力:
-rw-rw-r-- 1 200016306 Jul 3 17:27 bigfile.gz
-rw-rw-r-- 1 200381681 Jul 3 17:30 bigfile2.gz
300Kより大きい?それは正しく見えませんでした。最初に、ファイルに同じ内容がある場合はzdiff
とチェックしました。私は、コンプレッサーは、チャンクされたものよりも連続したデータストリームでうまくいくと思います。 bigfile2.gz
がbigfile.gz
より小さいのはなぜですか?
興味深いことに、私のiMacでは、 'bigfile2.gz'が小さくなり、経過時間は並列呼び出しと標準呼び出しでほぼ同じになります。 –
@ MarkSetchell何らかの理由で、Mac OS Xの 'seq'は同じ出力を生成しません。代わりに 'jot'を試すことができます。 –
'pigz'は' parallel' + 'gzip'(ここでは198345773、gzipでは200381681、userは52分、realは6分の1、userとrealは36分の1)よりも小さくて速いことに注意してください。 –