前にバイトコードをただ単にネイティブ化するのが目的というのが、JaegerMonkeyだという話をしたと思うけど、触れるのを忘れてた話。
ただバイトコードをネイティブ化したって遅いので、JMだけでも速度を出すために、SpiderMonkeyの関数を直接呼ばずに、最適化したアセンブラを生成するfastpath (そのままSpiderMonkeyのコードを呼び出すのは、SlowCallとかStubCallとか呼んでるけど) とinline cacheというのを使っている。
fastpathはその名の通りなんだけど、inline cahceは二通りあって、polymorphic inline caching (PIC) と Monomorphic inline cahce (MIC) の両方を使ってる。ここらはプロパティアクセス等に使われてて、これが速度的なメリット (SunSpiderだと顕著というかTracingよりも速くなる結果) を与えている。
ここらは動的言語の最適化でよく使われるテクニックなんで、http://en.wikipedia.org/wiki/Inline_cachingでも参照してください。
0 件のコメント:
コメントを投稿