2013-08-31

たらい回し関数を使ったsbclのベンチマーク

Categories: ベンチマーク Lisp
tak-function.jpg

[ PR ]


SBCL (Steel Bank Common Lisp) についてのベンチマークを検索するといくつかヒットしますが、自分のMacbookAir (2009 Late) で確かめてみました。

Tak(たらい回し関数)の実装は、以下のものです。

(defun tak (x y z)
    (if (<= x y )
        z 
        (tak (tak (- x 1) y z) (tak (- y 1) z x) (tak (- z 1) x y)))) 

(print (tak 18 9 0))

これと同様のコードを C言語、Ocaml、SBCLの3種類で実装し、ベンチマークしました。簡単のため、Unixのtimeコマンドのuserを利用しました。(グラフと表の順序が逆ですいません。。)

言語 時間(ms)
C (gcc -O3) 0.001
ocamlopt 0.110
C (gcc) 0.207
SBCL (native) 0.350
SBCL (script) 0.373
ocamlc 6.620

20130831170246.png

ちなみにJavaでも行ったのですが、何故か10分もかかってしまったので載せませんでした。

この結果をどう見るかというところですが、SBCLのネイティブコードはocamloptには及ばないものの、Cの1.7倍ほどの速度で、かなり速いことが分かります。他のベンチマークもやってみたいですね。

コメントはTwitterアカウントにお願いします。

RECENT POSTS


[ PR ]

.