Hatena::ブログ(Diary)

miura1729の日記 このページをアンテナに追加 RSSフィード

2009-02-08

AOベンチを移植した

18:22 |  AOベンチを移植したを含むブックマーク  AOベンチを移植したのブックマークコメント

yarv2llvmにAOベンチを移植しました。AOベンチはSyoyo Fujitaさんが作成したレンダラでベンチマークに使うため色々な言語に移植されています。詳しくは、http://lucille.atso-net.jp/aobench/を参照してください。

今回移植したyarv2llvm版はRuby1.9でも動くのですが、yarv2llvmに合せているため、もっといい書き方があるのにーって思うことと思います。特に、ファイルのopenをまだ作っていないので、イメージファイルを標準出力に出すという暴挙に出ています。

ベンチマークのソースはこれです。

http://github.com/miura1729/yarv2llvm/blob/a888d8ce6855e70b630a8673d4cfe075a8e44f0e/sample/ao-render.rb

yarv2llvmとruby1.9で動かしてみました。

time (ruby19 yarv2llvm.rb --no-type-message sample/ao-render.rb > ao.ppm)

real	3m20.883s
user	3m1.982s
sys	0m0.809s


time (ruby19 sample/ao-render.rb > ao2.ppm)

real	9m16.033s
user	8m34.140s
sys	0m0.155s

うーん、3倍弱のスピード。コンパイル込みとはいえ、実用的なプログラムだとだんだんRuby1.9と差が無くなってきます。

ささだささだ 2009/02/08 19:32 例の tagged Float (Flonum) だと,どれくらい効くかなー.

miura1729miura1729 2009/02/08 20:25 私もちょっと興味があります。yarv2llvmもruby19も、minilightと同じくらいの割合で効くんじゃないかなと想像しています。(http://d.hatena.ne.jp/miura1729/20071209/1197195635)

ささだささだ 2009/02/08 20:58 あら,yarv2llvm は double 即値じゃないんですか.

miura1729miura1729 2009/02/08 21:09 インスタンス変数はRubyのランタイムを使っているからそこで型変換が入ってしまうのですよ。GCも含めてyarv2llvm用に全部書けばいいのですが。

syoyosyoyo 2009/02/09 00:09 こんにちは. ao bench の移植ありがとうございます. ao bench はほとんど動的言語の機能を使わないので(もともと静的言語で書かれたものですし)、py2llvm での BlackScholes サンプルのように、うまく yarv2llvm で静的変換ができればネイティブと同じくらいの速度で実行できるのでは... と踏んでいます.

miura1729miura1729 2009/02/09 07:03 ao benchを公開してくださってありがとうございます。こういうリアルな絵が出てくると張り合いがあります。
速度の件、私もそう思います。配列とオブジェクトがネックになっていると思います。とりあえず、yarv2llvmで作ったメソッドはRubyで定義したものと区別無く使えるという原則は守りたいと思うので、独自のランタイムは最後の手段にして、うまくキャッシュできないか考えてみます。実は、まっいいかー、動いたしと思ったのですが、活を入れてくださってありがとうございます。

syoyosyoyo 2009/02/10 00:36 なるほど、ルールがあるのならばそれに則した中で高速化すべきですね. いずれにせよ、とくになにもしなくて 3 倍出るなら、それだけでもたとえばサーバ利用での ruby 処理の高速化などに有効ではないかと思っていますがどうでしょう?

miura1729miura1729 2009/02/10 07:00 ルールといってもそんなに厳密ではないのですが。ルールといえるのは「面白いこと」だけで、区別無く使えると将来プロファイルして重いとこだけコンパイルとかできるかなと思っているからです。
実際問題、3倍速いだけだと数値計算には使ってくれないし、文字列処理なんかだとメリットがないという状態かなと思います。せめてLuaくらい(10倍くらいだったと思います)のパフォーマンスが出ると色々使ってくれそうなんですけど。といっても、実用性が無くても面白ければいいのですけど。

トラックバック - http://d.hatena.ne.jp/miura1729/20090208/1234084920