Thu
Mar
4
improving JavaScript performance with JägerMonkey ✩ Mozilla Hacks – the Web developer blog
JeagerMonkey - MozillaWiki
Jäger はカタカナだとイェーガーでいいと思うんだけどな…ああ これ か、チェーザレ見たかったな…はいいとしてw
お。ついに JagerMonkey の紹介初めた。http://hacks.mozilla.org/2010/03/improving-javascript-performance-with-jagermonkey/ dynamitter
要するに TraceMonkey が生成するコードは最速だけど Tracing できずにインタープリタに戻ることが予想以上に多く足を引っ張ってるので生成コードは遅くとも単純な関数単位の簡易 JIT を Nitoro から統合して組み合わせることで更なる高速化をという話です。http://bit.ly/bZJhrT で現状の Jager Mode はインタープリタよりは 18% 高速 dynamitter
TraceMonkey の NanoJIT は型固定で高度な最適化が入っていてメソッド丸ごとざっくりコンパイルには向かないから非型固定でメソッド単位の単純なアセンブラを Nitro から移植、JIT コンパイラのベースは David Anderson によるデザイン。 dynamitter
Tracing 失敗したら古典的エンジン舞い戻るのヤだからベースラインとしてメソッド単位の単純な JIT も入れる。http://bit.ly/b5fy2W Anderson のテストではインタープリタより 30〜45% 高速(最適化はまだほぼゼロの段階)。 dynamitter
関数単位の比較的単純な JIT コンパイラ追加するだけで、エンジン書き直しじゃないっす。RT: @amachang: Firefox が JavaScript エンジン書き直し、 JagerMonkey。 http://bit.ly/bpQha6
@dynamitter 「速度が インタープリタ«<機械語 だからJITにするんだ」という認識なんですけど、関数単位でJITで機械語にした後って、TraceMonkeyでそれ以上速くなる余地ってあるんすかね? piro_or
@piro_or JIT といっても色々ありまして、関数単位での JIT では引数などしか情報がないため(普通は)変数の型を固定しておらずあまり速くないコードを生成しますが、Tracing ではすべての変数の型を記録して専用の高速コードを生成するので速いです。dynamitter
@piro_or TraceMonkey が数値演算とか速いといわれてるのは比較的 Tracing できてる&型固定であることが重要になるベンチがその辺に多いからですしね。型固定云々の話はこの辺も参照: http://bit.ly/d6y9Yn dynamitter
JägerMonkey は JIT エンジンのコアパーツであるアセンブラ部分を Nitoro から移植して動くようになっただけの段階。各種最適化や TraceMonkey との連携に向けてもまだまだやることいっぱいですし、Nitro と同じエンジンになるわけでもありません。 dynamitter
Firefox のJavaScriptのエンジンをAppleのWebKitのJavaScriptのエンジンをベースに作り直すそうです。僕が英語を読み間違えていないことを強く祈ります。FirefoxのJavaScriptのエンジンが作り直しだそうです! - yukobaの日記読み間違い+JIT 周りのオレオレ解釈です。本当にありがとうございました。