100ドルSqueakの最適化

おおしまさんの日記にいわく、

Squeakは、JITとあとは2D accelerationがあればこのスペックでもいけます。eToysでいくつかのオブジェクトを回転させたりしているときは、一番遅いのは画像の回転でそれだけでCPUパワーの50%とか70%とか使ってしまいますので。

IA32用のVMにはJITがあるんですね。どんなCPUでも正常に動くJITなんて魔法の技術があればいいんでしょうけど、それは望めないだろうしなぁ(あわよくば、最適化のおこぼれに預かろうという下心があったらしい(^^;))。
でも、いくつか気になる部分があります。

  • Hardware 2D accelerationがあっても、パフォーマンスは向上しないのではないか?

この危惧の前提として、以下の仮定があります。

  • Hardware 2D accelerationは、VRAM->VRAM間(もしくはMainRAM->VRAM間)の転送をDMAによってサポートするものである

その上で、

  • Squeak(Morph?)の描画モデルとして 1.アプリケーションがバックバッファ(MainRAM)に変更部分を転送 2.バックバッファのDirty部分をフレームバッファ(VRAM)に転送
  • 回転描画は、MainRAM内のSqueak内部形式イメージ(MainRAM)を、一次の逆変換をかけながらバックバッファ(MainRAM)に転送することによって実現される

という実装の推理が正しいとすると、Hardware 2D accelerationはあっても意味が無いのではないかって気がします。
もちろん、内部形式イメージもバックバッファも機種依存形式でもつことができるのであれば解決できるんでしょうけど。


もう一つ。これ、私がHardware 2D accelerationのチップ仕様をきちんと知らないだけなんでしょうけど、拡大や縮小しながらの転送をサポートしたものはあっても、回転描画を補佐する機能を見たことが無いのです。


最適化の実装として、この辺ってどうなっているんでしょうか?