☆☆ Incremental dynamic code generation with trace trees (TR 2006)


JavaのJITを2,000行で実装して、HotSpot の70-90%程度の性能が得られたという論文。ちなみに、この技術が TraceMonkey (Firefox の次期 JavaScript エンジン)に取り入れられています。

Gal, A. and Franz, M.: Incremental dynamic code generation with trace trees (UC Irvine のテクニカルレポート), 2006.

[pukiwiki]

**概要
組込み機器向けの mixed-mode JIT の提案。JIT は C で 2,000 LOC。内訳は:
– Front end (trace monitor, stack deconstructor) – 800 LOC
– Analysis (TTSSA, liveness analysis, common subexpression elimination, invariant code analysis) – 200 LOC
– Back end (TTSSA → PowerPC code) – 800 LOC

プログラムのなかのループ構造をトレースとよびトレースごとにコード生成を行う。トレースはプログラムの実行とともに動的に記録され、必要に応じて成長する。このため、CFGの構築のように静的解析は行っていないため、実装コードが小さく、処理も軽い。

コード解析においては SSA の特殊な形式(TTSSA)を用いている。トレースの線形的な特質から SSA への変換とその上での静的解析やレジスタ割り当てとコード生成は極めて単純である。(トレース木も内部的には木構造ではなく単なる配列をうまく利用することで、さらに解析の単純化をはかっているものと推察される)

ベースラインのインタプリタと比較して 7-25 倍、HotSpot JIT と比較して70-90%程度の実行性能を達成している。コンパイル速度はHotSpotの数百倍速く、メモリ消費量はHotSpotとの比較で約1/7となる。

[/pukiwiki]