matz / ruby-lang.org (Yukihiro Matsumoto) wrote :
    [ [ruby-dev:22497] Re: [ANN] YARV: Yet another RubyVM 0.0.0- ]
    at Tue, 6 Jan 2004 14:40:10 +0900

 ささだです。

> とはいえ、ほとんどがメソッド呼び出しなんでそこを高速化するこ
> とでとりあえず今よりは大幅に速くなりそうなんですが、少なくと
> も「Ruby向け」と銘打ったVM(プロトタイプ)で今より大幅に速いも
> のにはお目にかかってませんね。

http://www.namikilab.tuat.ac.jp/~sasada/diary/200401.html#d8
に挙げたような最適化で、結構な高速化を図ることができました。
(これは、大幅かどうかはわかりませんが・・・)

      fib(32)
      ruby:           24.95
      yarv/dt/no opt: 16.08 # dt: direct threaded code
      yarv/dt/opt:     7.35 # dt: direct threaded code
      yarv/no opt:    16.50 # switch loop
      yarv/opt:        8.00 # switch loop
(on メビウスPC-MT1-H1/win2000/cygwin/gcc3.3.1)

 この例の場合、あまりに露骨に効いていますが、通常のプログラム
でも i+=1 のような部分が高速化されるんじゃないかなぁと思ってい
ます。IRC でも言っていたのですが、これは現在の ruby インタプリ
タでも十分適用可能だとおもうのですがどうでしょうか。
(誰がやるか、の問題ですか)

 本当にこれが一般的に効果的であるか、定量的な評価をまだ行って
いないため、確かではないんですが。

(文字列関係のメソッドなどにもこのような最適化は十分効くと思う
 んですが、Fixnum を離れると特異メソッドとかその辺のチェックが
 入ってしまって微妙)


 switch loop -> threaded code のような最適化では、全然速度向上
になりませんでした。(上の評価結果参照)やっぱり、メソッドコール
の最適化で殆ど決まるようですね。

-- 
// SASADA Koichi @ namikilab.tuat.ac.jp
//
// 日記中の前田さんは筑波大の前田敦司さんです。