yarv-dev:375
From: SASADA Koichi <ko1 atdot.net>
Date: Mon, 13 Dec 2004 14:46:03 +0900
Subject: [yarv-dev:375] Re: Exception Problem with Register Allocated Variable
ささだです. >>> 他の処理系で不安なのと,書き込み時の安全性はやっぱりほしいような >>>気がするのと,あんまりコストは変わらないような気がするので,volatile >>>な変数に毎回一緒に代入しようかと考えております. >> >>VM 命令 1命令ごと (?) にメモリ (スタック?) に PC を書き込むというのは、 >>性能的にはオッケーなんですか? > > > VM命令ごと、というわけではなくて、longjmp()する可能性のある処理(VM > loopの外にある、メソッドの実体)を呼び出すごと、ですよね。もしVM命令ご > とだと、そもそもレジスタ割り付けした意味がなくなっちゃいます。 pc_R (on register) と pc_S (on stack) があったとして,たとえ ば命令開始時オペランドをフェッチしようとすると,pc_S の値をス タックからロードするコスト 1命令だけ減るかなー,とか思ってまし た.pc_S へのストアのコストはある程度減らせないかなあ(命令間 依存があまりないので,IPC はあがりそう)とか. まぁ,あんまり変わらないかも. 実際問題,そもそもそのオーバヘッドが性能に響くかなあ,とか. あ,これは自己否定だ. > Cで書いたVMだと、VM loopの外のコードを呼び出す時に、VMの状態(VM loopの > 局所変数)の一部を渡したり、外から見える場所に書き込む処理は必要になっ > てくると思います。 > > たとえば、私が書いたVMだと、VM loopの外のルーチンでGCが起きた時にVM ス > タックをスキャンできるように、スタックトップのキャッシュやスタックポイ > ンタをグローバル変数に書き出しています(exact GCなので)。 > > どうせメソッド呼び出しの時には、引数もメモリに書き込んで渡すので、相対 > 的なオーバーヘッドは大したことないかも知れません。 命令ごとに,ストアするべき,しなくてもいい,などを別々に書い ておくといいのかもしれませんね.ローカル変数アクセスでは例外発 生しない(と思うけど),文字列を生成する命令 putstring では, GC が発生して,その中でなんか例外起こる可能性がありますので. ちなみに,SP ですが,現在の YARV の実装ではそのスコープで伸 びる限界の箇所を指しています.GC はそれを参考に行います.この 計算はスタックフレームを新しく作るとき,一度計算してストアする だけで済みます. >>例外発生時の大域脱出に setjmp/longjmp を使うことに、 >>何か必然性はあるんでしょうか。 >>setjmp/longjmp を使わないように現 Ruby インタプリタを書き換える >>というのはナシでしょうか? > > > これは、すでに存在するCで書かれた拡張ライブラリとの互換性ということで > はないでしょうか。 そのとおりです. > > 書き換えて良いなら、「例外が起きた時のPCの値を、longjmpの引数に渡して > もらう」とするのが良さそうですけどね。 ・longjmp の引数はそのジャンプの原因を示す値(互換性の問題) ・callee である C 関数などから,Caller の Ruby PC はわからない という点で難しいかと思っております. -- // SASADA Koichi at atdot dot net // -- ML: yarv-dev quickml.atdot.net 使い方: http://www.atdot.net/~ko1/quickml
366 2004-12-11 02:51 [ko1 atdot.net ] Exception Problem with Register Allocated Variable 368 2004-12-11 10:08 ┗[nobu.nokada softhome] 369 2004-12-11 11:34 ┗[ko1 atdot.net ] 373 2004-12-12 22:25 ┗[shudo computer.org ] 374 2004-12-13 01:05 ┗[maeda-yarv atusi.org] -> 375 2004-12-13 14:46 ┗[ko1 atdot.net ] 376 2004-12-13 18:13 ┗[shudo computer.org ] 377 2004-12-13 18:18 ┗[ko1 atdot.net ] 378 2004-12-13 19:47 ┗[shudo computer.org ]