CインタプリタへのJITコンパイラの後付け
CインタプリタへのJITコンパイラの後付けに関する研究で、元々純粋なインタプリタとして設計されたC言語インタプリタに、JIT(Just-In-Time)コンパイル機能を追加する技術について述べています。修正されたLLVMインフラを活用し、インタプリタループの構造から自動的にマシン...
CインタプリタへのJITコンパイラの後付けに関する研究で、元々純粋なインタプリタとして設計されたC言語インタプリタに、JIT(Just-In-Time)コンパイル機能を追加する技術について述べています。修正されたLLVMインフラを活用し、インタプリタループの構造から自動的にマシンコードを生成し、インタプリタアーキテクチャを大幅に書き直すことなく動的コンパイルを実現します。
この手法の技術的意義は、「ほぼ任意のC言語コード」に適用可能な点にあり、様々な方式で実装されたインタプリタが、大規模な書き直しなしにJIT高速化の恩恵を受けられます。PyPyのPython向けアプローチに似ていますが、C言語ランタイムシステム向けに適応させています。
ただし技術的なトレードオフがあり、平均的なパフォーマンス向上はベースラインのLuaと比べて約2倍ですが、成熟したLuaJITなどのJITシステムの5~10倍の高速化には及びません。この研究は既存のインタプリタへのJIT機能追加の体系的な方法を示し、言語ランタイム開発者のエンジニアリング負担を減らし、より自動化されたやり方でC言語インタプリタの性能を向上させる可能性を示唆しています。
コミュニティは、任意に近いC言語コードを扱える技術的な優れさとPyPyとの類似性を評価する一方、2倍程度のパフォーマンス向上がLuaJITの5~10倍改善と比べ見劣りすることについて指摘し、自動化の利便性と性能のバランスについて議論しています。
「任意に近いC言語に対してこれができるのは素晴らしい!PyPyがやっていることに似ていますが、Pythonのサブセットではなく、C言語向けです。ただし欠点がないわけではありません。通常のコードはLuaと比べて約2倍高速化するだけで、LuaJITが実現する5~10倍の高速化には及びません。」— @djwatson24