こんばんは、川合です。 先日までせっせとtek4の最終仕上げをしていましたが、どうも満足で きる圧縮率になりませんでした。どうもUC0やUC1を一度捨てることも視 野に入れて、やり直す必要がありそうです。これはかなり長期戦になり そうな気がしてきました(半年とか)。半年もメインの開発を中断しつ づけるわけには行きませんので、tek4の開発は後回しにするべきだとい う結論に達しました。 またtek3はtek4に近いアルゴリズムにすることが僕の希望なので、 tek4が決まらなければtek3も決められないということになります。とい うことで、tek3とtek4は当面白紙です。tek2は結構いいのですが、ちょ っとだけ引っかかっているところがあるので、まだ保留です。 一方、tek1は我ながらバランスに優れたいい出来で問題はなさそうな ので、これはフォーマット確定ということにします。いや、厳密に言う と、フォーマット確定はtek1ではなくstk1ですが。フルセット仕様であ るtek1のほうは、まだいろいろテストしたいことが残っているので、確 定しないでおきます。とにかくtek1もstk1の範囲で使う分には全く問題 ないわけです。 OSASKやKHBIOSでも、とりあえずはstk1をサポートします。たぶんあ る時点でstk1のサポートからtek1のサポートに繰り上げると思いますが その場合は上位互換になりますので、問題はないわけです。 それで、結局新規に確定したフォーマットがstk1だけということにな ってしまうと、圧縮率でtek0の代用になるものがないということになっ てしまい、これでは相変わらずtek0が使いつづけられてしまいます。展 開の遅いtek0を使われるくらいなら、速度は同じくらいだけど圧縮率の 高いLZMAのほうがマシです。 それで、そういえばいつかLZMAライクな圧縮形式をtek5として作ろう と思っていたことを思い出し(つまり、「スライド辞書法+レンジコー ダもしくは算術圧縮」)、いっそのこと、それを今作ってしまおうと思 いました。もちろんゼロから作るのは途方もない時間がかかりますが、 幸いLZMAのソースがLGPLで公開されていますので、これをちょっと手直 しすれば良さそうです。 ASKA版のデコーダを途中まで書いてみて、これはデコードするときの ことをあまり考えていないなと思いました。よっぽどへんな仕様のCPU でないかぎり(繰り下がり時にキャリーフラグが0になるなんていう仕 様でない限り・・・というかそんなCPUは存在するのか?)、今のLZMA の仕様は展開しにくいです。どうしてもビット反転命令を追加しなけれ ばいけなくなります。 ということで、デコードしやすい形式に改造しました。これで1%くら いは展開が速く出来るでしょう(最適化が優秀ではないCコンパイラで は、むしろ遅くなるかもしれないですが、そんなことはもちろんコンパ イラのせいであってフォーマット仕様のせいではない)。 またスライド辞書での一致長が273バイトまでしかエンコードできな いというさみしい制限があり(ちなみにこの手の制限はよくある制限で LHAなどもそうです)、そのせいで圧縮率で損をしているようでした。 ということでフォーマットをいじって一致長の制限をなくしました。こ れで、bim2binc以外のすべてで圧縮率が改善しました。そんなわけで、 今回紹介するstk5はベータ版ながら多くのケースでLZMAと同じかそれを 上回る圧縮率を発揮し、しかも展開速度がLZMAよりも速いという特徴を もちます。もっとも展開速度についてはチューンした展開ルーチンがで きているわけではないので、確証はありませんが。 LZMA stk5 bim2binc 110.2 110.2 kdun00b 101.7 100.0 osaskgo 104.8 104.8 osask.bmp 110.0 100.4 詳しいデータはこちら: http://wiki.osask.jp/?tek1/comp もはやstk5に対しては、bzip2はライバルではありません(というか LZMAがbzip2を既に打ち負かしていた)。ライバルは王者のrkだけです 。 stk5はその名のとおりtek5のサブセットですが、フルセットのtek5で は、さらにLZMAの弱点らしきところを改良しようと予定しています。 LZMAでは僕が今までtek1〜tek4の開発を通して発見した有効なテクニッ クの多くが使われていないのです。それは、このテクニックがレンジコ ーダに対してはもはや足手まといになるからかもしれませんが、でもた とえば先の273バイト制限のように、ただ試していないだけというもの もあるわけです。そんなわけで、tek5になれば、さらに圧縮率が改善し rkにさらに迫れるようになる可能性があります。その上、tek5になって も展開速度はほとんど増えません(というか僕は展開速度に影響するよ うなテクニックは知らないだけですが)。 さて現状をまとめるとこうです。 stk1 : フォーマット確定 stk2 : フォーマット検討中(変更の可能性:3%) stk3 : フォーマット開発そのものを当面中断 stk4 : フォーマット開発そのものを当面中断 stk5 : フォーマット検討中(変更の可能性:5%) 結局tek形式は、1個増えて2個減った、という感じですね。 stk2に関しては、今のところ何も変わっていないので、今回のリリー スは特にありません。stk5に関するリリースはこれです。 http://k.hideyosi.com/bim2bi4m.lzh (161KB) この中には3つの実行ファイルと1つのバッチファイルがあります。い ずれも今の暫定版のstk5を生成したり、展開させたりするためのもので す。今回は時間がなくてbim2bin内には組み込めませんでした。 それぞれのファイルについてのライセンスは、memo.txtを読んでくだ さい。LZMAのライブラリを使っている上に、その中で救えるものはでき るだけKL-01にしてやろうとしているので、ライセンスがちょっとやや こしいです。 まあ結局はこれもベータ版なのですが、まあ次バージョンではOSASK でstk5がサポートされて、そのときになったら、今のstk5とのフォーマ ットの互換性はないかもしれませんが、とにかくこのくらいのサイズに 圧縮して使えるようになりそうだ、ということです。その目安を知って 暇つぶしが出来る、というだけのことです。 圧縮するには、 prompt>enctk5 osask.bmp osask.tk などとしてください。これで圧縮されます。細かいパラメータはなしで す。とりあえずパラメータがデフォルトでも十分に圧縮されますから。 圧縮速度は、今までのbim2bin4よりもずっと速いです。これはひとえに LZMAライブラリのおかげです。 展開するには、 prompt>tstdstk5 osask.tk osask.bmp です。 最後に今後の予定です。まずはstk5のデコードルーチンを完成させま す。stk5のデコードルーチンを書いているうちに、stk5フォーマットの どこに手を加えるべきかも自然に分かると思うので、デコードルーチン が完成すればstk5もフォーマットが確定します。 そしてstk1とstk5がOSASKに組み込まれて、やっと本来の目的の KHBIOSの開発がはじまるわけです。 stk2については、それまでに確定すればOSASKに入れますが、確定し ないかもしれません。確定しなければ、確定しないままにしておくつも りです。圧縮形式の開発が主目的ではない以上、こればかりに時間をか けてもしょうがないでしょうから。バランスの悪いtek0を引退させて、 KHBIOSでバランスのよい形式だけをサポートすることだけが重要なので す。 それでは。 -- 川合 秀実(KAWAI Hidemi) OSASK計画代表 / システム設計開発担当 E-mail:kawai !Atmark! osask.jp Homepage http://osask.jp/