[Ruby]YARVの成果を実感してみる
ちまたでは「Ruby 1.9は1.8より平均5倍速い」というニュースが話題になっているようです。
ちょっと前に野球ゲームのテストプログラム(GUIとかはなくってひたすら計算するだけ)を書いたのですが、 こいつで数千試合とか数万試合をシミュレートすると それなり実行時間がかかります。 そうだYARVに行こう、じゃなくて久しぶりにYARVを使ってみようと思いました。
開発版のRuby1.9にはもう既にYARVが組み込まれています。 というわけで最新の開発版RubyをインストールすればYARVが使えるわけです。
結論
先に結論だけ先に書いてしまうと、ruby1.8.5に比べて、ちょうど2倍の速度で計算が終わるようになりました。 やっぱり5倍じゃなかったのですが、手元のスクリプトが実際に2倍の速さで動いたのにはちょっと驚きました。
具体的には、3.776秒→1.881秒です。
ruby a.rb 1.25s user 2.51s system 99% cpu 3.776 total ~/local/ruby19/bin/ruby -v a.rb 0.05s user 1.79s system 97% cpu 1.881 total
環境はcoLinux上のDebianです。 RubyのRevは13466です。
もちろん今回の結果はほんの一例であって、 たぶん検証に使うスクリプトによって結果が変わってくるのではないでしょうか。
検証に使ったプログラム
殴り書きのコードなのであまり出したくないのですが、次のような感じのものを 9 * 15000 回くらいまわしました。
while outs < 3 batter = batters[number] r = batter.update if r == :H or r == :HR or r == :BB bases.unshift batter n = r == :HR ? 3 : 0 n.times { bases.unshift nil } rbi = bases[3, 4].compact.size batter.result[:rbi] += rbi score += rbi bases = bases[0, 3] else # 略
1.9は仕様の変わったところがあって、1.8のコードは動かないことがありますが、 小さなソースならエラーや警告のメッセージを見ればだいたい動くように修正できると思います(一度この作業をやっておくと、将来1.9ベースに移行するときの心の準備ができるかもしれません)。 ちなみに今回検証に使ったプログラムはまったく手を入れずに動きました。
Ruby1.9のインストール手順
Rubyをソースからコンパイルしたことのない方も多いと思います。 私も数回程度しか試したことがありませんが、思ったより簡単なので、その手順を紹介します。 環境はDebianです。また既存のRubyに影響を与えないよう、ユーザーのローカル環境にインストールします。準備以降はすべてユーザー権限で実行します。
あらかじめこのあたりは入れてありました。
apt-get install gcc make libc6-dev zlib1g-dev
それからconfigureの生成にautoconfとbisonが必要なようです。
apt-get install autoconf bison
準備は以上です(もしかしたら足りなかったり、余計なものがあったりするかも)。
ここから先はすべてユーザー権限で実行します。 svnコマンドを使って最新のソースをダウンロードします。
svn co http://svn.ruby-lang.org/repos/ruby/trunk ruby
svnが使えない場合は、公式ページより最新のtar.gzを落としてくればOKだと思います。
次にダウンロードしたrubyディレクトリに移動してautoconfを実行します。
cd ruby autoconf
autoconfを実行するとconfigureが作成されます。
次にconfigureを実行します。このときrubyがインストールされる場所を指定します。
./configure --prefix=/home/dan/local/ruby19
上の例では/home/dan/local/ruby19にインストールされるよう指定しています。 configureを実行するとMakefileが作成されます。
あとはmakeしてインストールすれば終わりです。
make make install
実行方法
直接パスを指定して実行します。
/home/dan/local/ruby19/bin/ruby -v => ruby 1.9.0 (2007-09-15 patchlevel 0) [i686-linux]
スクリプトも実行できます。
/home/dan/local/ruby19/bin/ruby a.rb