Mac OS X でコンパイルした Ruby インタプリタは遅いのか?
某 国内有名 SNS に「自前でコンパイルした Ruby インタプリタは遅い」というトピックがあったので、実際に試してみた。
ベンチマークに使ったのは、みんなが大好きなフィボナッチ数列。
def fib(n) i = n.to_i case when i <= 0; 0 when i == 1; 1 else fib(i-1) + fib(i-2) end end fib(-1) # => 0 fib(0) # => 0 fib(1) # => 1 fib(2) # => 1 fib(3) # => 2 fib(4) # => 3 fib(5.5) # => 5 fib("6") # => 8 def fibonacci(n) (1..n).map{|i| fib i} end fibonacci 8 # => [1, 1, 2, 3, 5, 8, 13, 21] if defined? Profiler__ fibonacci 10 else require 'benchmark' puts Benchmark.measure{fibonacci 32} end
自前でコンパイルした Ruby と Mac OS X 標準の Ruby で試してみる。
ついでに Ruby1.9 でも試してみる。
$ ruby -v # 自前 ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9.4.0] $ ruby fib.rb 51.740000 18.080000 69.820000 ( 70.403618) $ /usr/bin/ruby -v # Mac OS X 標準 ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0] $ /usr/bin/ruby fib.rb 14.310000 0.050000 14.360000 ( 14.442732) $ ruby19 -v # Ruby 1.9 ruby 1.9.0 (2008-10-04 revision 19669) [i386-darwin9.5.0] $ ruby19 fib.rb 4.080000 0.020000 4.100000 ( 4.121011)
ほんとに遅い (;_;)
いろいろ試してみた結果 configure --enable-pthread だと遅いみたい。(本当か?)
pthread なしだと普通の速度。
$ ruby -v ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9.5.0] $ ruby fib.rb 13.710000 0.100000 13.810000 ( 14.032186)
ちょっとフィボナッチで遊んでみたかっただけなのに (^_^;;
でも速くなって良かった。