適応的メタJITコンパイラフレームワーク

メタJust-In-Timeコンパイラは、プログラミング言語のインタプリタ定義からコンパイラを生成する枠組みです。特定の言語処理系を生成するだけでなく、最近ではRPythonやGraal/Truffleのように、色々な言語の処理系を生成することや、複数言語間の相互乗り入れを可能にすることや、言語機能を拡張することなどに成功しており、今後の発展に期待が持たれています。

我々はメタJITコンパイラを適応的にする研究を行っています。適応的とは、実行するプログラムの静的・動的な情報をもとにしてJITコンパイルの対象を適切に選択したり、適切な水準の最適化を施したりすることを指します。例えばRPythonが生成するJITコンパイラはプログラムの実行履歴を追跡してコンパイルする手法 (実行履歴コンパイル) しか行いませんが、これを拡張してメソッドを対象としたコンパイル (メソッドコンパイル) も行えるようにしたPyPy (RPythonが生成するPython処理系) を作ることは、我々の1つの目標です。

研究の最初の段階として、我々はBacCamlと呼ぶ実験的なメタ実行履歴コンパイラフレームワークを作りました。この枠組はRPython流の実行履歴コンパイルをMinCamlコンパイラを基にして実現しています。その上で我々は、BacCamlにメソッドコンパイルを可能する技術を提案し、プログラムの性質によって得られる実行性能がどうなるかについて調べました。

次の段階として、RPythonに「基本コンパイル」を行わせる技術を研究しています。基本コンパイルは、単純かつ高速なコード生成を行うことでプログラム実行の早期に適用するために (メタJITコンパイラ以外では) 広く用いられている技術です。我々はRPythonの実行履歴型コンパイラを (1) 対象プログラム中の特定のメソッド内だけを (2) 高価な最適化を行わないようにコンパイルするような制御手法を提案しました。さらにそのような制御をインタプリタ定義の一部分の交換だけで可能にすることを行っています。

さらなる情報

お知らせ

関連する技術

  • PyPy, (R)Python上のメタコンパイラフレームワーク。実行履歴単位のコンパイルを行う。
  • Truffle/Graal, Java上のメタコンパイラフレームワーク。メソッド単位のコンパイルを行う。
  • The HipHop Virtual Machine, PHP言語のためのJITコンパイラ付仮想機械。実行履歴単位・メソッド単位両方のコンパイルが行える。