7

誰かが llvm/tools - lli インタープリター/JIT コンパイラー ( http://llvm.org/docs/GettingStarted.html#toolsを参照) の経験があるかどうか疑問に思っていました。あなたが提供できる情報 (速度、複雑さ、実装など) に興味があります。

ありがとう。

アップデート:

lli がインタープリターとして機能すると仮定すると、ビットコードの実行は LuaJIT VM の実行とどのように比較されるでしょうか? lli が jit コンパイラとして機能する場合はどうでしょうか (同じ比較)。

注: 誰かが経験を持っているかどうか、または共有する時間を割いてくれるかどうかだけを尋ねています。

4

1 に答える 1

6

LuaJITはトレースJITです。つまり、実行環境を通過するデータをより適切に適合させるために再最適化できますが、LLVMは静的JITであるため、対応する1回限りのベストケースのマシンコードを生成するだけです。ソース。これにより、タイトなループや不適切なブランチの予測ミスでパフォーマンスが低下する可能性があります。

実際のLuaJITVMも高度に最適化された、スレッド化されたマシン固有のアセンブリですが、LLVMは移植性(およびその他の理由)のためにC ++を使用するため、これは明らかにLuaJITに大きな利点をもたらします。また、LLVMのオーバーヘッドはLuaJITよりもはるかに高くなります。これは、LuaJITがはるかに強力でないシステム(ARM CPUによって駆動されるシステムなど)で動作するように設計されているためです。

LuaJITバイトコードもLuaJIT用に特別に設計されており、LLVMのビットコードははるかに一般的であるため、これによりLuaJITの実行が明らかに高速になります。LuaJITのバイトコードは、JITおよびトレーサーで使用するための最適化ヒントなどをエンコードするためにも適切に設計されています。

これらが2つの異なるタイプのJITであるという事実を無視すると、LLVMは一般的なJIT /コンパイラバックエンドであることに焦点を当てています。LuaJITはLuaを可能な限り高速に実行することに焦点を当てているため、一般性に制約されない。

于 2011-10-06T06:43:00.783 に答える