yarv-dev:153
From: SASADA Koichi <ko1 atdot.net>
Date: Sat, 28 Aug 2004 01:32:54 +0900
Subject: [yarv-dev:153] inline cache with VM version
ささだです. 以下の文章を書いてたんですが,すでに前田さんに >(3) グローバルな「副作用カウンタ」を設け、メソッド定義が起きるごとにイン > クリメントする。キャッシュエントリには、その時点でのカウンタの値を記 > 録し、キャッシュアクセス時のカウンタ値と違っていたらミスと判定する。 って教えてもらってるじゃん.はずかしー. というか,私が > (3) は、分岐が増えて嫌だなぁ、と思ったんですが、殆どカウンタの値が変わ > んないんなら、投機実行ヒットしまくりで問題ないかもしれませんね。でも、メ > モリアクセス2個増えるか。 > > あと、副作用カウンタの影響力が大きすぎな気がしました。 なんて偉そうなこと言ってるし.はずかしー. 影響力の問題は,多分ループの中では定数の再定義もメソッドの再定 義もしないから問題ないですよね.多分. 結局実装の手間を考えると,これが楽でいいような気がしてきました. これ以上計算量,またはメモリ消費量が減らないか考えてるんですが, 無理ぽいですねぇ. 定数用にこのカウンタは用意するつもりですので,それを流用すれば いいかなぁ,と考えています. 本当はVM用定数にしたいんだけど,そうするとずいぶんとポインタを たぐる手間が増えるので(thread -> vm -> counter),グローバル変数 にします.あー,あとで後悔するかなぁ. ------------------------------------------------------------ メソッドのインラインキャッシュで,VMのバージョンとともに 記録しておいて,無効になる「可能性のある」操作のたびにその バージョンを上げる,という手法を考えてたんですが, 1. 正当性は保たれるか?(多分大丈夫) 2. 新規性は?(多分ない) 3. 有効性は?(結構いい) って昨日一日考えてました.寝ながら. 昔,同じような方法を考えた気がしたんですが,そのときは捨 てた気がしました.それが気になって,有効性,正当性に自身が ありません.どんなもんでしょうか. * 3. について 検索手法は, if(CLASS_OF(recv) == cached_recv_class) && cache_vm_version == global_vm_version){ // hit method = cached; } else{ // miss method = normal_search(recv, id); } 最低,CLASS_OF のコスト + メモリアクセス3回 + 比較が2回 となります. とりあえず,これだとキャッシュのクリアの問題がなくなるので いいんじゃないかなー,などと考えてます. -- // SASADA Koichi at atdot dot net // -- ML: yarv-dev quickml.atdot.net 使い方: http://www.atdot.net/~ko1/quickml
-> 153 2004-08-28 01:32 [ko1 atdot.net ] inline cache with VM version 154 2004-08-28 06:31 ┗[maeda-yarv atusi.org] 155 2004-08-29 02:57 ┗[ko1 atdot.net ] 157 2004-08-29 15:10 ┗[shudo computer.org ] 160 2004-08-29 17:44 ┗[ko1 atdot.net ] 162 2004-08-29 18:22 ┗[shudo computer.org ] 163 2004-08-29 18:27 ┗[ko1 atdot.net ]