[osask 7075] bim2bin4p

  こんばんは、川合です。

  bim2bin4pができたのでMLリリースします。

  今回のバージョンアップのポイントは、tek5周りの拡張です。今まで
はstk5レベル(つまり僕が考えた仕様全部ではなくサブセット)でしか
なかったのですが、今回はアイデアをもっとたくさん反映しました。し
かしまだ全てではありません。まだたくさんあるのですがそれらは補助
的なもので、一部のファイルを除いてはあまり劇的には効かないと思う
ので、このバージョンでたいていの場合は、tek5のベストになるはずで
す。

    http://k.hideyosi.com/bim2bin4p.lzh  (175KB)

  とりあえず、使い方を説明します。まず、相変わらずtek5圧縮には
t5lzmaが必要なのですが、これは昨日(というかまあ本日なのですが)
リリースした最新版を使います。旧バージョンと組み合わせるとうまく
いきません。

    prompt>bim2bin -osacmp -tek5 in:ファイル名 out:ファイル名

これで、早速今回のtek5をいち早く体験できます。デフォルトでは、
stk5互換ではなく、tek5の機能を全部活用しようとします。展開のほう
は今までどおり、-restoreだけで十分です。

  stk5互換の出力を得るためには、

    bim2bin -osacmp -tek5 eprm:z0 in:ファイル名 out:ファイル名

と、eprmオプションを併用します。z0というのがstk5互換で、z1が小規
模・中規模ファイル用オプション、z2が大規模ファイル用オプションで
す。z0ですと、圧縮も展開も比較的高速です(といっても従来程度です
が)。デフォルトはz2です。なお、bim2binのrestore用の展開ルーチン
は速度が出るようにはなっていないので、多分bim2bin4oと比べても
stk5の展開速度に関しては遅くなっていると思います。

  速度最適化を施したASKA版展開ルーチンは現在開発中で、たぶんこれ
は今までの展開ルーチンよりも若干速いと思います(stk5の場合)。
しかしtek5モードは本質的にstk5よりも複雑なので、stk5モードよりは
多少速度が落ちると思います。

  圧縮時には、従来どおり、eoptオプションも使えます。効果も今まで
どおりです。eprmとの併用も可能です。ただし、t5lzmaの改良により、
デフォルトがpb0、lc0になっているため、このような設定ならeoptを書
かなくてもよくなっています。

  -osacmpではなくて、リンク時にlcパラメータをいじる場合の最低ス
タックサイズが、z1やz2のときは違います。z0の場合は従来どおりです
。これについてはbim2bin4pのドキュメントを見てください。

  また、eprmにz2を指定した場合、さらにd、e、f、g、hのオプション
を追加して、さらに圧縮率を上げられます。これらのオプションは展開
時のメモリ消費量とは関係ありませんし、展開速度にもほとんど影響し
ません。これらのオプションについても、詳細はbim2bin4pのドキュメ
ントを見てください。

  おまけでついてくるtek/stk展開ライブラリですが、仕様が変わりま
した。といっても、関数名が少し変わっただけですが。

    旧:tek1_checkformat  →  新:tek_checkformat
    旧:tek1_decode       →  新:tek_decode

他の仕様は全く変わっていません。

  またstk5の展開ライブラリについては、今まではLZMAのものを流用し
ていましたが、今回はLZMAのアルゴリズムを完全に把握したこともあっ
て、全部書き直してみました。これで行数が417→321と激減しています
。ちなみにtek5の展開ルーチンは、528行です(註:もちろんこれは
stk5も展開できる)。

---

  さて、tek5がどのくらい改善したのかを紹介したいと思います。

                 stk1    stk2    stk5    LZMA    tek5     PAQ
    hellok1       144     135     126     121     124     116
    bim2binc    17166   16323   12716   12708   12582    9215
    kdun00b     49855   46794   33582   34037   32945   29157
    osaskgo   1274931 1172344  942375  942369  936928  748512
    osaskbmp     7740    7135    3988    4236    3744    2429

  (註:kdun00bとosaskgoは、OSASK-Wikiでの結果との整合性のために
        あえてrjc:0で圧縮しています。)

                 stk1    stk2    stk5    LZMA    tek5     PAQ
    hellok1     124.1   116.4   108.6   104.3   106.9   100.0
    bim2binc    186.3   177.1   138.0   137.9   136.5   100.0
    kdun00b     171.0   160.5   115.2   116.7   113.0   100.0
    osaskgo     170.3   156.6   125.9   125.9   125.2   100.0
    osaskbmp    318.6   293.7   164.2   174.4   154.1   100.0

  特に注目してもらいたいのは、親であるLZMAとの関係です。stk5と
LZMAを比べると、stk5は2勝3敗なので、LZMAに負けている数のほうが多
かったのです。もちろん、ワースト値を下げるということのほうが重要
だと僕は考えていますから、これはそれほど重大な問題ではありません
。でもやはりちょっとくやしいです。

  しかしLZMAとtek5を比べてみてください。ヘッダのオーバーヘッドが
大きいtek5は、hellok1でこそ負けているままですが、他では十分な差
をつけて勝っています。

  また、こんな問題も解消しました。先日ベータリリースした
twitch3a.sarではこんな情けないことが起きていました。

      無圧縮     stk2      stk5     tek5
       81379    80229     80421    79590
          (0)   (1150)     (958)   (1789)  ← 無圧縮との差

zero4kやzero64kなどのごくごく簡単な内容のファイルでもないのに、
stk5よりも、stk2のほうが圧縮率が良かったのです。しかしtek5では、
こんな情けない逆転現象は起きずに、stk2の結果をきれいに抜き去って
います。ちなみに、このstk5の結果はLHAよりも悪い結果です。同様の
問題はLZMAに由来しており、LZMAもstk5くらいの圧縮率しか出ません。

  今度は毎度のinvader5です。

    stk5 : 1179バイト
    tek5 : 1160バイト

ということで、19バイトも小さくなります。これは1.6%の縮小です。

  このtek5があれば、10/24の1024バイトコンテストも、それなりに楽
ができるのではないかと思っていまして、だからOSASK ver.4.7のベー
タリリースくらいは、10/24に間に合わせたいと思っています。

  その他にも、たとえばOSASK/ATにバンドルしている全角フォントが
1KB以上も小さくなるとか、いろいろ確認が取れています。ASKA版の展
開ルーチンができて、OSASKに搭載するのが楽しみです。

  それでは。

--
    川合 秀実(KAWAI Hidemi)
OSASK計画代表 / システム設計開発担当
E-mail:kawai !Atmark! osask.jp
Homepage http://osask.jp/

ML番号でジャンプ
ML単語検索