[前][次][番号順一覧][スレッド一覧][生データ]

yarv-dev:382

From: Hiroki Asakawa <ml asakawa.net>
Date: Mon, 20 Dec 2004 08:44:50 +0900
Subject: [yarv-dev:382] Re: IronPython

淺川です。

> | MS の CLR はかなりバイトコードの最適化が研究されており (詳しくは知ら
> | ないが、MS はこの分野で世界でも数えるほどの技術者を大量に仕入れてい
> | るはずだ、SQL server もそうだが、かれらは金をつんで世界じゅうからい
> | ちばん優秀な技術者をかき集めているらしい)、Python そのものが最適化さ
> | れなくても、CLR の最適化が進歩すれば 勝手に Python も速くなるから
> | いいんだそうな。
JIT では定数たたみ込みや定数伝搬、メソッドのインライン化やループ展開
など一般的なコンパイラで行っていることはすべて行っているようです。
次のバージョンではよりいっそう高速化される見込みだとか。

ただ、Ruby.NET の場合、Fixnum がオブジェクトなので定数関連の
最適化は利用できないですね。。


> >  しかし、メソッドをくっつけるってなんだろう。
ささださんの発表を聞いて、少しは最適化も考えないとと思い、
多少工夫しているのですが、
while i < 4
こんなので、今は i < 4 の結果を i.___op_LT(4) を呼び出して、
true or false が返ってきて、それを false と nil と比較して
どちらでもなかったら繰り返すという、( true も nil も false
もオブジェクトのインスタンスになっている ) 無駄が多いので、
i が Fixnum だったら i.___op_LT(4) をインライン化しています。
それでもその後に false でも nil でもないことを確認しているので
比較とジャンプを一気にやる命令列を生成するべきだなぁと。。

最適化を考え出すと、ますますコンパイラが複雑になり、時間も
なくなってくるのでほどほどに、と考えていますが。。

どういう命令が CLR にとって早い命令かが、実際に試してみないと
分からないので難しいです。
最近気づいたのは、CLR で ローカル変数へのアクセスとインスタンス
変数へのアクセスの速度が全く同じになることです。




      w        
    Σ+ )_       Hiroki Asakawa
  〜〜( __/〜     mailto:hiroki asakawa.net
   〜〜〜〜〜     http://www.asakawa.net



--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

       380 2004-12-20 00:33 [ko1 atdot.net       ] IronPython                              
       381 2004-12-20 00:40 ┗[shudo computer.org  ]                                       
->     382 2004-12-20 08:44  ┣[ml asakawa.net      ]                                     
       383 2004-12-20 11:07  ┃┣[shudo computer.org  ]                                   
       390 2004-12-20 20:16  ┃┃┗[ml asakawa.net      ]                                 
       386 2004-12-20 18:38  ┃┗[ko1 atdot.net       ]                                   
       389 2004-12-20 20:06  ┃ ┗[ml asakawa.net      ]                                 
       385 2004-12-20 18:31  ┗[ko1 atdot.net       ]                                     
       388 2004-12-20 18:46   ┗[matz ruby-lang.org  ]