次期Python、ついにJITコンパイラ搭載の見通し。「copy-and-patch」と呼ばれる新たなJITコンパイラの仕組みとは?

今回は「次期Python、ついにJITコンパイラ搭載の見通し。「copy-and-patch」と呼ばれる新たなJITコンパイラの仕組みとは?」についてご紹介します。

関連ワード (内部、処理、部分等) についても参考にしながら、ぜひ本記事について議論していってくださいね。

本記事は、Publickey様で掲載されている内容を参考にしておりますので、より詳しく内容を知りたい方は、ページ下の元記事リンクより参照ください。


機械学習やAI処理の分野を中心に非常に高い人気のプログラミング言語である「Python」の次期バージョンに、処理速度の向上を目指したJITコンパイラが搭載される見通しです。

このJITコンパイラは、PythonコアデベロッパーのBrandt Bucher氏が提案し、実装しています。

そしてPython Software FoundationのフェローであるAnthony Shaw氏がブログ「ython 3.13 gets a JIT」で、このJITコンパイラについて解説しています。

fig

これらの情報を元に、PythonのJITコンパイラがどのように実装されようとしているのか、少し紹介していきましょう。

RubyもJavaScriptもJITが高速化を実現してきた

Pythonは前述の通り非常に人気の高いプログラミング言語でありながら、その公式実装であるC言語で記述されたCPythonはインタプリタであるため、実行速度の面で課題を抱えていました。

JavaScriptやRubyなど人気の高いプログラミング言語の多くは、処理速度を高速化するためにすでにJITコンパイラを搭載し、さらなる実行速度の向上のために最適化を進めているところです。

例えばPythonと同様にインタプリタとして登場したRubyは、実行速度を3倍に向上させるという目標の下、2016年にリリースされたRuby 2.6で初めてJITコンパイラ(MJIT)を実験的に搭載しました。

2022年にリリースされたRuby 3.1では、それまでのJITコンパイラとは別に新たに開発されたJITコンパイラ(YJIT)をメインラインにマージし、現時点で最新版のRuby 3.3ではこのYJITがさらに改良され、実行速度の向上を実現しています。

JavaScriptもWebブラウザ上で実行可能なインタプリタ型の言語として登場していますが、現在の主要なWebブラウザやJavaScriptランタイムにはJITコンパイラが搭載されています。現在のJavaScriptの実行速度の向上は、おおむねJITコンパイラの改善によって行われていると言ってよいでしょう。

PythonもそうしたJITコンパイラ搭載言語の仲間入りを果たすことになるわけで、今後はJITコンパイラによって実行速度の改善が進められるのではないかと見られます。

今回、PythonのJITコンパイラ搭載について解説記事をブログに書いたAnthony Shaw氏も次のようにJITコンパイラへの期待を示しています。

I think that whilst the first version of this JIT isn’t going to seriously dent any benchmarks (yet), it opens the door to some huge optimizations and not just ones that benefit the toy benchmark programs in the standard benchmark suite.

JITの最初のバージョンは、(まだ)ベンチマークの結果に対して大きな影響を与えることはないだろうが、今後は標準のベンチマーク群に含まれる簡単なベンチマークで良好な結果を得るにとどまらず、大きな最適化への扉を開くものになると思う。

一般的なフル機能のJITコンパイラの仕組みとは

Anthony Shaw氏の解説によると、次期Pythonに搭載予定のJITコンパイラは、一般的なフル機能のJITコンパイラとは多少異なった仕組みのものになるとのことです。

一般的なフル機能のJITコンパイラは、インタプリタでコードを実行しつつ、バックグラウンド処理でネイティブなバイナリコードを生成し、実行をインタプリタから生成済みのバイナリコードへ切り替えていくことで高速なコードの実行を実現するという仕組みです。

おおむねネイティブコードへに実行が切り替われば高速な実行が期待できますが、十分に高速な実行速度が得られるまでネイティブコードが生成されるには時間がかかること、そしてインタプリタとコンパイラを同時に走らせることになるため、実行時には多くのメモリを消費すること、という課題もあります。

これに対し、次期Pythonに搭載予定のJITコンパイラは「copy-and-patch」(コピー&パッチ)と呼ばれる仕組みで実現されると説明されています。

新しく採用されるコピー&パッチ方式のJITとは?

コピー&パッチ方式は、2021年に提案された新しい方式のJITコンパイラです。ここではその仕組みを、Anthony Shaw氏の説明を元に手短に紹介してみましょう。

Pythonのランタイム(CPython)の内部は、Pythonのコードを読み込んで中間言語に変換する部分と、その中間言語を実行する部分の2つに大別できます。

中間言語を実行する部分には多数のif文/Case文が並んでおり、中間言語がそのif文/Case文に合致したところに、その中間言語で実際に処理すべき命令が書かれています。そしてそれが実行されることになります。

Pythonランタイムは、インタプリタとしてこの処理をPythonコードの1行目から最後の行まで延々と繰り返すわけです。

コピー&パッチ方式のJITは、このPythonランタイムの中間言語の実行部分に手を入れることで実現されます。

後半の中間言語を実行する部分を、中間言語を実行するのではなく、実行するための命令をどんどんつなぎ合わせていく、という仕組みにするのです。

A copy-and-patch JIT is the idea that you copy the instructions for each command and fill-in-the-blanks for that bytecode arguments (or patch).

コピー&パッチ方式のJITの考え方は、コード内のそれぞれのコマンド(Command)に対応する処理命令(Instructions)をコピーし、バイトコードの列(すなわちパッチ)としてどんどんつなげていく、というものです。

そして実際の処理すべき命令がある程度つながった後にJITコンパイラに渡すと、if文/Case文によるオーバーヘッドなく、まとまった処理として高速に実行可能となります。

Copy-and-patch was selected because the compilation from bytecodes to machine code is done as a set of “templates” that are then stitched together and patched at runtime with the correct values. > コピー&パッチが選択された理由は、バイトコードからマシンコードへのコンパイルが「テンプレート」のセットとして行われ、それがつなぎ合わされ、実行時には適切な値のパッチとなるからです。

これによる利点は、インタプリタの中に並列処理としてJITコンパイラを組み込むのではなく、インタプリタから別コンポーネントへ処理命令をどんどん渡していくだけ、という比較的簡単な実装で済む点です。

そして肝心のJITコンパイラ部分は、既存のLLVM JITツールなどと組み合わせることで実現できるようです。

A copy-and-patch JIT only requires the LLVM JIT tools be installed on the machine where CPython is compiled from source, and for most people that means the machines of the CI that builds and packages CPython for python.org.

コピーアンドパッチJITに必要なのは、CPythonをソースからコンパイルするマシンにLLVM JITツールをインストールしておくだけです。これは多くの人にとって、python.orgからCPythonをビルドするCIマシンにこの環境が必要となることを意味します。

現時点でのJITコンパイラによる性能向上は2%から9%

JITコンパイラの実装を進めているBrandt Bucher氏によると、現時点でのJITコンパイラによる性能向上は2%から9%としています。

しかし、前述の通りこれは今後の最適化への第一歩であり、今後さらなる改善による性能向上を期待したいところです。

COMMENTS


Recommended

TITLE
CATEGORY
DATE
インフラ部門に配属された新卒が爆速に、クラウドにおける事故防止、クラウド基盤の内製対応など、クラウドの運用に光を当てた「輝け!クラウドオペレーターアワード2022」[PR]
PR
2022-08-16 16:04
ノートPC「Latitude」「Precision」、デスクトップPC「OptiPlex」で新製品
IT関連
2023-03-30 00:19
シスコ、IoTセンサーやWi-Fi 6E APなどMeraki新製品を発表
IT関連
2022-04-14 17:24
Googleの決済サービスを振り返りながら、pring買収による“金融本格参入”のインパクトを分析する (1/5 ページ)
アプリ・Web
2021-07-31 09:45
グーグルの新たなAIツール「Learn About」–学習のパートナーになり得るか
IT関連
2024-11-12 06:11
Amazon、13インチで壁掛け式の薄型Echoデバイスを開発中か──Bloomberg
企業・業界動向
2021-02-11 08:27
TISとCode for Japan、地域課題の解決に向け包括連携
IT関連
2022-06-09 04:08
Google、AIでファイルの種類を高速正確に判別できる「Magika」をオープンソースで公開
Google
2024-02-19 17:43
スタートアップを経済の推進役に据えるスペインの10年計画
その他
2021-04-07 16:07
英EU離脱でEUからのデータ移動はどうなる?
IT関連
2021-01-15 19:47
ガートナー、「生成AIのハイプ・サイクル:2024年」を発表–2027年までに生成AIの40%がマルチモーダルに
IT関連
2024-09-11 10:01
マイクロソフト、5月の月例パッチ公開–ゼロデイ脆弱性も修正
IT関連
2021-05-12 12:57
東芝テック、リテール基盤とRetail AIのスマートカートを連携–食品スーパーで実証
IT関連
2024-10-09 05:11
伊丹市、働き方改革に向け「スマート庁舎」のITインフラを整備–アライドテレシスが支援
IT関連
2023-10-28 22:41