Skip to content

Instantly share code, notes, and snippets.

@rkmathi
Last active August 29, 2015 14:04
Show Gist options
  • Save rkmathi/8dec4456c3b2b9faee3a to your computer and use it in GitHub Desktop.
Save rkmathi/8dec4456c3b2b9faee3a to your computer and use it in GitHub Desktop.
集中講義「Rubyインタプリタに見る実際のシステムソフトウェア」
題字:
C拡張による竹内関数の実装と速度比較
概要:
竹内関数[1]をC拡張で実装し、PureRubyで実装したものとの速度比較を行う。
開発した拡張ライブラリの説明:
竹内関数のオリジナル版(tarai)と、Tak関数を実行できるライブラリを作成。
開発したプログラム(もしくは、github などのプログラムの閲覧方法):
https://github.com/rkmathi/tarai-ruby
評価(実行結果など):
tarai関数とtak関数を実装したが、tak関数での実行時間を比較した。
- 実行環境
MacBook Air Late 13-inch, Mid 2013
Intel Core i7 1.7GHz
8GB RAM
OSX 10.9.4
ruby 2.2.0dev (2014-06-12 trunk 46413) [x86_64-darwin13]
- tak(18, 9, 0)
- C拡張版
9
real 0m0.032s
user 0m0.024s
sys 0m0.006s
- PureRuby版
9
real 0m0.823s
user 0m0.814s
sys 0m0.007s
- tak(19, 10, 0)
- C拡張版
10
real 0m0.031s
user 0m0.024s
sys 0m0.005s
- PureRuby版
10
real 0m3.162s
user 0m3.152s
sys 0m0.006s
考察:
C拡張版とPureRuby版では約100倍ものの実行速度の差が出ることもあった。
この関数は再帰呼び出しの回数が非常に多くなるものなのだが、C言語での再帰呼び出しとRubyでの再帰呼び出しではかなり大きな時間差が出ることがわかった。
まとめ:
竹内関数のような、再帰呼び出しの回数が非常に多い関数についてはC拡張版が非常に高速に実行できることがわかった。
参考
[1]: スライド10 http://jp.franz.com/base/seminar/2005-11-18/SeminarNov2005-Takeuchi.files/v3_document.htm
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment