2013-05-05

rbenv 版 ruby の高速化

rbenv 版の ruby が rvm 版の ruby よりも遅いという話がある。理由を調べてみると、最適化オプションに違いがある。rvm には -O3 オプションが使われていたのに対して、rbenv では -O2 オプションが使われていた。この最適化オプションの違いが ruby のスピード差になっている。

ruby-build log

ruby-build の git log を見るとこうある。

commit 9f8d53365aef52c940095f583cdc82f02caba90f
Author: Erik Michaels-Ober <sferik@gmail.com>
Date:   Wed May 1 07:38:43 2013 -0700

    ruby-build 20130501

commit 2f8dcafb0ec2c5f478e7f45d7eca3a0f0a5ae8c0
Merge: 28b9bcb b219192
Author: Sam Stephenson <sstephenson@gmail.com>
Date:   Fri Apr 26 16:00:19 2013 -0700

    Merge pull request #351 from jeremy/restore-o3-cflags
    
    Restore -O3 default when we build with clang

commit b219192020b4641e057c9f168089f8488624ec64
Author: Jeremy Kemper <jeremy@bitsweat.net>
Date:   Fri Apr 26 15:06:43 2013 -0700

    Restore -O3 default when we build with clang

2013-04-26 に -O3 オプションが適用されるよう修正が入っている。

rbenv reinstall

rbenv に reinstall サブコマンドはない。ただ、install サブコマンドに --force オプションを付けると、強制的にもう一度インストールできる。これを使って、ruby を再インストールする:

$ cd ~/build/ruby-build
$ git pull
$ sudo ./install.sh
$ cd ~/.rbenv
$ git pull
$ cd
$ rbenv install --force 2.0.0-p0

あとがき

rbenv で -O3 オプションが適用される様になったことは書いた。ログを見るとコンパイラーが clang の場合に -O3 オプションが使われる様になっている。GNU gcc の場合はどうなのかな? そこまでは調べていない。

ref

1 comment:

  1. rbenv 版ではなく正しく書くなら ruby-build でインストールされた ruby です。
    rvm の方も「rvm 版」ではなく「rvm でインストールされた ruby」です。

    多少冗長ですが、今の表記だとカスタマイズが入っているように見えてしまうため、正しく書く事をおすすめします

    (rvm の方は実際にパッチを当てているケースがあって rvm 版で正しい事もたまにありますが)

    ReplyDelete