kiyoka.2010_10_15 RSSPLAIN

Related pages: !kiyoka.blog.list !kiyoka.blog.2010_10
55445555555555555555555555555555555
5

[Nendo] Nendoのベンチマークを開始

5
 ktdgO6
4

Nendoで書いたプログラムがPure rubyと比べてどれくらい遅いかを調べ始めた。

4

まずは最初の結果を示そう。

5

竹内関数の処理時間は以下の通り。 ※ 引数は tak( 10, 5, 0 )

5
  Ruby   0.03秒
5
 Nendo  38.89秒
5

その差 およそ1296倍。スゲー。

5

 

5

ソースコードは以下の通り。コーディングの仕方でどちらかが有利になるようなことはないだろう。

5

[Ruby]

5
  def tak( x, y, z )
5
    if y >= x
5
      y
5
    else
5
      tak( tak( x-1, y, z ),
5
           tak( y-1, z, x ),
5
           tak( z-1, x, y ))
5
    end
5
  end
5

 

5

[Nendo]

5
(define (tak x y z)
5
  (if (>= y x)
5
      y
5
      (tak (tak (- x 1) y z)
5
           (tak (- y 1) z x)
5
           (tak (- z 1) x y))))
5

 

5

まず、何から手を付けるか。

5

takは関数呼び出しが全て固定長なので、Nendoの引数の渡しかたを固定長の場合だけ最適化するだけで相当高速化するハズ。とういか以前、Nendoの出力したRubyコードを手で最適化した際にかなり効果があったので、その案を進めてみる。

5

難しい箇所としては、既にNendoに組込んである末尾再帰最適化を壊さないように今回の仕組みを入れないといけないところ。

5

2日程度で作業完了できればいいのだけどなぁ。そんなに簡単ではないんだろうなぁ。

5

 

5

...comment disabled...