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と差が無くなってきます。