DeepMind オープンソースの S6、CPython 用の JIT コンパイラー実装を備えたライブラリ

人工知能分野の開発で知られるDeepMindは、Python言語用のJITコンパイラを開発したS6プロジェクトのソースコードを公開した。 このプロジェクトが興味深いのは、標準の CPython と統合する拡張ライブラリとして設計されており、CPython との完全な互換性が保証され、インタープリタ コードの変更が必要ないためです。 このプロジェクトは2019年から開発が続けられてきましたが、残念ながら中止され、現在は開発されていません。 作成された開発内容は Python の改善に役立つ可能性があるため、コードをオープンソースにすることが決定されました。 JIT コンパイラ コードは C++ で書かれており、CPython 3.7 に基づいています。 また、Apache 2.0 ライセンスに基づいてオープンソース化されています。

解決できるタスクの点で、Python 用の S6 は JavaScript 用の V8 エンジンに匹敵します。 このライブラリは、既存のバイトコード インタープリタ ハンドラ ceval.c を、JIT コンパイルを使用して実行を高速化する独自の実装に置き換えます。 S6 は、現在の関数がすでにコンパイルされているかどうかを確認し、コンパイルされている場合はコンパイルされたコードを実行します。コンパイルされていない場合は、CPython インタープリターと同様に、バイトコード解釈モードで関数を実行します。 解釈中に、処理中の関数に関連する実行された命令と呼び出しの数がカウントされます。 特定のマイルストーンに到達すると、頻繁に実行されるコードを高速化するためにコンパイル プロセスが開始されます。 コンパイルは中間の Strongjit 表現に実行され、最適化の後、asmjit ライブラリを使用してターゲット システムのマシン命令に変換されます。

ワークロードの性質に応じて、最適な条件下での S6 は、通常の CPython と比較して最大 9.5 倍のテスト実行速度の向上を示します。 Richards テスト スイートを 100 回繰り返し実行すると 7 倍の高速化が観察され、大量の数学的計算を伴うレイトレース テストを実行すると 3 ~ 4.5 倍の高速化が観察されます。

S6 を使用して最適化するのが難しいタスクには、NumPy などの C API を使用するプロジェクトや、多数の値の型をチェックする必要がある操作などがあります。 S6 独自の最適化されていない Python インタープリターの実装を使用しているため (開発は解釈モードを最適化する段階に達していません)、リソースを大量に消費する関数の単一呼び出しでもパフォーマンスの低下が観察されます。 たとえば、配列/タプルの大きなセットを解凍する Unpack Sequence テストでは、5 回の呼び出しで最大 0.97 倍の速度低下が発生し、循環呼び出しでは CPython のパフォーマンスが XNUMX でした。

出所: オープンネット.ru

コメントを追加します