Python 3.13にJITコンパイラを追加
- CPythonコア開発者のBrandt Bucherが、Python 3.13ブランチにJITコンパイラを追加するプルリクエストを提出。
- この変更は、Python 3.11で追加された特殊化適応インタプリタ以降、CPythonインタプリタにおける最大級の変更の1つとなる見込み。
JITとは何か?
- JIT(Just in Time)コンパイルとは、コードが最初に実行される時点でコンパイルが行われる設計を指す。
- JITコンパイラは機械語コードを生成するコンパイラのことで、AOT(Ahead of Time)コンパイラと対比される。
- Pythonコードはまずバイトコードにコンパイルされるが、このバイトコード自体はCPUにとって意味を持たず、特別なバイトコードインタプリタループを通じて実行される。
copy-and-patch JITとは何か?
- copy-and-patch JITは、2021年に提案された概念で、動的言語ランタイム向けの高速アルゴリズムとして設計された。
- copy-and-patch JITは、各命令に対する命令列をコピーし、バイトコード引数を埋める(パッチする)という発想に基づく。
copy-and-patch JITの長所と短所
- 「完全な」JITコンパイラは高水準バイトコードを中間言語(IL)の低水準命令へコンパイルする一方、copy-and-patch JITはバイトコードから機械語コードへのコンパイルをテンプレートの集合で実現する。
- copy-and-patch JITでは、複雑なJITコンパイラアーキテクチャをPythonランタイム内で動かす必要がなく、LLVMのJITツールをソースからCPythonをコンパイルするマシンにインストールするだけでよい。
このJITはどのように動作するのか?
- Python 3.13のAPIに新たに追加されたAPIを拡張し、プラグイン可能なオプティマイザをランタイム時に検出できるようにする。
- 新しいJITは、この新アーキテクチャ向けのオプションのオプティマイザである。
- ソースからCPythonをコンパイルする際に
--enable-experimental-jit フラグを指定すると、Pythonバイトコード向けの機械語コードテンプレートが生成される。
このJITはより高速なのか?
- 初期ベンチマークでは、およそ2〜9%の性能向上が示されている。
- このJITは、Pythonの性能を大きく向上させうる一連の最適化の礎となる。
GN⁺の見解
- Python 3.13に追加されたJITコンパイラは、Pythonの実行速度を向上させる重要な変更であり、とくに反復的な処理の効率を高める可能性がある。
- copy-and-patch JITは、複雑なJITアーキテクチャをユーザーのPythonランタイムに統合することなく性能を向上させる革新的なアプローチを提供する。
- この技術はPythonコミュニティに興味深い議論をもたらし、Pythonの性能最適化に新たな扉を開くことが期待される。
1件のコメント
Hacker Newsの意見