Ruby実装fib VS C拡張なRuby実装fib
C拡張とRuby実装でどのくらい違いがあるのか気になったのでfibでベンチマークをとってみました。
gem にしているので
bundle install && bundle exec rake compile && cat fib.rb && bundle exec ruby fib.rb
で実行できます。
https://github.com/jiikko/sandbox/tree/bd8f29a60af354f940744659989390c022593e71/ruby/gem/fib
C拡張Ruby実装
int fib_internal(int n)
{
if (n < 2) {
return n;
} else {
return fib_internal(n-1)+fib_internal(n-2);
}
}
Ruby実装
module Fib
def self.ruby(n)
if(n < 2)
return n
else
return ruby(n - 1) + ruby(n - 2)
end
end
end
結果
$ cat fib.rb
require 'benchmark'
Benchmark.bm do |r|
r.report { Fib.c(40) }
r.report { Fib.ruby(40) }
end
$ bundle exec ruby fib.rb
user system total real
0.520000 0.000000 0.520000 ( 0.523696)
11.520000 0.020000 11.540000 ( 11.555269)
C拡張のほうが22倍早い。
Rubyは関数呼び出しが遅いらしいです。Cの世界で完結するとすごく早いですね。
謝辞
千葉さん(会社の人)から再帰処理についてご助言をいただきました。ありがとうございましたm(_ _)m
-
category:
- ruby