Let's start Scheme

2011-09-06

竹内関数

最近ベンチマークとってないなぁと思って図ってみた。
使用コードは下記。

(import (rnrs))

(define (tak x y z)
  (if (not (< y x))
      y
      (tak (tak (- x 1) y z)
       (tak (- y 1) z x)
       (tak (- z 1) x y))))
(let ((args (command-line)))
  (let ((n (string->number (cadr args))))
    (tak (* n 2) n 0)))

図ったのは以下の3つ。
Sagittarius pre0.1.4
mosh 0.2.6
Ypsilon 0.9.6update3
結果は以下の通り
Sagittarius

real    0m0.725s
user    0m0.702s
sys     0m0.046s

real    0m0.723s
user    0m0.733s
sys     0m0.015s
-------------------
mosh
GC Warning: Repeated allocation of very large block (appr. size 69632):
        May lead to memory leak and poor performance.

real    0m0.794s
user    0m0.780s
sys     0m0.015s
GC Warning: Repeated allocation of very large block (appr. size 69632):
        May lead to memory leak and poor performance.

real    0m0.797s
user    0m0.796s
sys     0m0.015s
-------------------
Ypsilon

real    0m0.931s
user    0m0.015s
sys     0m0.030s

real    0m0.920s
user    0m0.015s
sys     0m0.015s

両方とも超えてる!最近施したインストラクションのチューニングが効いてるのかな。
竹内関数だけしかベンチマークとってないのであんまり参考にはならないけど・・・
まじめにベンチマークとろうかな。

追記:
試しにgambitのベンチマークを走らせて見たら爆死した。遅い上に途中でエラーで落ちよる。
まだまだだね(こしまえ風)

No comments:

Post a Comment