yarv-dev:28
From: SASADA Koichi <ko1 atdot.net>
Date: Mon, 17 May 2004 21:17:52 +0900
Subject: [yarv-dev:28] method cache availability
ささだです。
日記にも書いてたんですが、いんちきをしてはやくしてみました。
インチキインラインメソッドキャッシュ:ぽりもふぃずむとかまっ
たく無視して、キャッシュが入っていれば、チェックせずに無条件
で利用するようなキャッシュ。一番速い、というか正確に動かない。
どうやっても、これ以上速いキャッシュは作れないだろう。多分。
tak:
def tak x, y, z
unless y < x
z
else
tak( tak(x-1, y, z),
tak(y-1, z, x),
tak(z-1, x, y))
end
end
tak(16, 8, 0)
--
インチキキャッシュ適用前:
user system total real
ruby 2.844000 0.000000 2.844000 ( 2.912000)
yarv 1.703000 0.000000 1.703000 ( 1.732000)
インチキキャッシュ適用後:
user system total real
ruby 2.875000 0.000000 2.875000 ( 2.910000)
yarv 0.781000 0.000000 0.781000 ( 0.787000)
*この評価では、Fixnum + Fixnum などの演算を特殊化していません。
この規模のプログラムであると、メソッドキャッシュの改善は
ある程度(大きく?)有効であることが示された、ということだ
と思っています。
もうすこし、どの辺が現状のメソッド探索のボトルネックに
なっているのか見てみようと思いますが。
多分、CLASS_OF がやっぱり遅いのかなぁ、と思わなくもない
んですが、やってみればわかりますね。まさか、この規模でグロー
バルメソッドキャッシュでミス(追い出し)が発生するとも思えな
いし。
それとも、ただ単にC関数コールのオーバヘッドかなあ。
--
// SASADA Koichi at atdot dot net
//
--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml