7-zipの辞書サイズとWordサイズの影響。

7z圧縮の3Dグラフ

〜(2007年10月8日追記)〜
LZMA、PPMd、BZip2の各圧縮メソッドの比較はこちら↓
http://d.hatena.ne.jp/aglassofwater/20071008
〜〜


どうも風邪を引いたようで、かなりあれな感じなので今日は休みました。
ロッパー。


ただ寝てるだけのゲロ生産機と化すのもどうかと思ったので、
拡張子 .7zの7-zipについてしらべてみました。
以前、処理形式の違いによる圧縮の効果を調べましたが、
今回は、辞書サイズとWordサイズの効果を調べました。
圧縮元ファイルは前回と同じものです。
2006年05月20日■.7zの圧縮試験〜プッシュ!!とテックジャイアンの7月号を購入
圧縮レベルは最高で、圧縮メソッドはLZMA、ソリッド書庫として圧縮を行いました。


辞書サイズを大きくするとメモリの占有量が増加し、
Wordサイズを大きくすると処理時間が増加するというトレードオフがあります。
ハードウェアに対する処理の負荷は、家の環境*1では大まかに言って、
辞書サイズ64kB、Wordサイズ8の場合、処理時間が20秒ほど、占有メモリは35MBですが、
辞書サイズ128MB、Wordサイズ273の場合、処理時間は5分30秒ほど、占有メモリは1375MBとなります。
LZMAは圧縮時にメモリを食いますが、解凍時には、1/10以下しかメモリを食いません。


圧縮した43枚の2次元壁紙ファイルは1280×960,24bitのBMPで一枚あたり3.6MB(3,686,454Byte)で合計151MB(158,517,522Byte)。
辞書サイズが一枚のファイルサイズを越えると、急激に圧縮率が上がるようです。
辞書サイズが一枚のファイルサイズの2倍を越えると、圧縮率はほぼ一定になりました。
(3倍、4倍、5倍あたりにも肩があるけど、よく見ないとわからないレベル。)
また、Wordサイズに反比例?指数関数的?にファイルサイズが減少します。
しかし、私のやった実験では、128wordあたりにローカル極大があって単調減少というわけでもなさそう。

Wordサイズに関しては、辞書サイズほどの急峻な変化が見られないので、ほどほどでよさそうな感じがします。


このファイルの場合、辞書32MB、Word96あたりで十分な気が。(14,129,973Byteになる。128MB-273だと、14,001,688Byte)
朦朧とした状態でやってたので、マトリックスの埋め間違いがあるかもしれないけど、生データも下に載せときました。


7zの圧縮では、圧縮元の個々のファイルサイズをチェックして、
辞書サイズをそのファイルサイズの2倍以上にしておけばそれなりの圧縮が得られそうです。
バックアップ、記録保存、テンポラリなどなど、アーカイブの目的に合わせて、
マシンのメモリ・CPUパワーと解凍する頻度から、推奨するパラメータを算出してくれるソフトがあれば便利な人も多いだろう。

  Wordサイズ8 12 16 24 32 48 64 96 128 192 256 273
辞書サイズ0.064 21509112 20739849 20321132 19850882 19587433 19257043 19073670 18882044 18798836 18724423 18701822 18694236
1 21707870 20888157 20449416 19938010 19640520 19279908 19067041 18830473 18725098 18630314 18598669 18592050
2 21731389 20906751 20466645 19950778 19658405 19296742 19080543 18837278 18727844 18628226 18594102 18585116
3 21797140 20963755 20520625 19994300 19658405 19327416 19104334 18851154 18733799 18628855 18595177 18587353
4 17356829 16417894 15851360 15348548 15046180 14774828 14651096 14539481 14490119 14443160 14419088 14414459
6 17455875 16425793 15859423 15350016 15048406 14774197 14651988 14542331 14490506 14439952 14419176 14413658
8 17356829 16299160 15708523 15181503 14868236 14598968 14481172 14376029 14326673 14282500 14258217 14251630
12 17225921 16128881 15519181 14980800 14659851 14392910 14281436 14184248 14138685 14094379 14071703 14066846
16 17219399 16114186 15500451 14956524 14638065 14369382 14256718 14160514 14115946 14070213 14047672 14045079
24 17228768 16100053 15483224 14934908 14617941 14349759 14237775 14140905 14093078 14048368 14024596 14019751
32 17244666 16104057 15483315 14931726 14609745 14343250 14229338 14129973 14083321 14036825 14012456 14008583
48 17280608 16126339 15494871 14937343 14613507 14343546 14229137 14130463 14080351 14034356 14009598 14005666
64 17298229 16139641 15501918 14937789 14614912 14343490 14230701 14127800 14078917 14029953 14008168 14003005
96 17318819 16151745 15510053 14944366 14616326 14345056 14229038 14128861 14077964 14031940 14006720 14003663
128 17327629 16158624 15514613 14946476 14618539 14345587 14003005 14003663 14077512 14030896 14006294 14001688

*1:Athlon64 x2 4400+ を夏仕様のFSB200MHz、10.0倍で動かしてます