mingw版のRuby1.9.1

いやはや、参りました。

約50%の負荷で約1000オブジェクト、Rubyのコードだけで動くようになってしまった。
何をしたかと言うと、いままでmswin32版のRuby1.9.1を使っていたのを、mingw32版に換えただけ。
正確には
ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-mswin32]

ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-mingw32]
にした。
別の言い方をすると、こちらからダウンロードさせていただいていたものを
http://www.artonx.org/data/asr/
こちらにかえた。
http://rubyforge.org/projects/rubyinstaller/


どうなったのかというと、
http://d.hatena.ne.jp/mirichi/20100212/p2
の記事のベンチを動かした結果が

  2.063000   0.000000   2.063000 (  2.062500)
  1.781000   0.000000   1.781000 (  1.781250)
  1.766000   0.000000   1.766000 (  1.765625)
  1.219000   0.000000   1.219000 (  1.234375)

となった。
whileが一番速く、mswin32版と比べてなんと3倍強という速さ。


なんでそんなことをしたかと言うと、RubyVMのコードの最適化がGCC専用のものだったから。
VCでコンパイルすると最適化が効かないわけだ。
ちょっとは変わるはずだと思ってはいたが、ここまで差が出るとは思わなかった。
完全に想定外。
mingw32版はmswin32版と互換性があるから、DXRubyもそのままで動く。


ところで、mswin32版がダメだとかそういうことを言ってるわけではなく、実行速度という切り口で見た場合について、mingw32版にはこのようなメリットがあるよ、という話。
まだインストールして動かしてみただけなのでその他の違いについてはわからない。