y_uti のブログ

統計、機械学習、自然言語処理などに興味を持つエンジニアの技術ブログです

JIT のコードを読んでみた (勉強会発表資料)

12 月 11 日に開催された 第七回闇 PHP 勉強会 に参加して、現在開発が進められている PHPJIT コンパイラについて発表しました。

www.slideshare.net

おおまかな流れとしては、OPcache に処理を追加することで各関数の実行回数を計測するコードを差し込み、閾値を超えたら JIT コンパイルを行ってネイティブコードを実行するというものです。ネイティブコード生成処理には DynASM を利用しています。

現在の実装は selective inlining という手法で、元のバイトコード命令一つ一つを機械語に展開して置き換えていきます。特に高度な最適化が施されるわけではありません。勉強会の場で参加者の方々ともお話させていただきましたが、このあたりは JIT コンパイルというフェーズでどこまでやるのかという判断にもなりそうです。コード解析処理は OPcache での実装を利用しているのですが、今回、こちらはちゃんと読み込むことができませんでした。デバッグ出力を見てみると、こちらもソースコードを追ってみると面白そうです。

なお、JIT コンパイラはまだ開発の初期段階で、実装も頻繁に変わっているようです。発表で利用したスライドは 11 月 25 日時点のコミットを対象にして作り始めたのですが、現在の最新のコードでは、スライドとは異なるコードが生成されるかもしれません。