Pythonは、2023年3月現在最も人気のあるプログラミング言語だ。
シンプルな言語で学習コストが低いこと、読みやすいこと、ライブラリが豊富な事などが理由だ。
だがもちろんデメリットもあり、最適化により性能を高めることは出来るが、実行速度においては低水準言語に劣り、速度を求める際には、C/C++やRustなどの他の言語が選ばれるのが一般的だろう。
しかし、MITの研究者らは、「Codon」というPythonコンパイラを開発し、Pythonコードをネイティブなマシンコードに変換することで、実行時のパフォーマンスを低下させることなく、Pythonコードを処理することに成功したことを発表した。
「Pythonに対する典型的な高速化は、シングルスレッドで10~100倍以上のオーダーです。Codonのパフォーマンスは、通常、C/C++と同等(時にはそれ以上)です」と、彼らは述べている。
Codonは高性能なPythonコンパイラで、実行時のオーバーヘッドなしにPythonコードをネイティブなマシンコードにコンパイルします。Pythonを超える典型的な高速化は、シングルスレッドで10-100倍以上のオーダーになります。Codonの性能は通常、C/C++と同等(時にはそれ以上)である。Pythonとは異なり、Codonはネイティブのマルチスレッドをサポートしており、これによりさらに何倍ものスピードアップを実現することができます。CodonはSeqプロジェクトから生まれました。
ただし、まだリリースされたばかりなのでいくつか問題もある。CodonはPython言語のほとんどを実装しているが、すべてではない。Pythonのモジュールの中には、Codonに組み込まれていないものもある。また、動的な型操作や実行時のリフレクションなど、コードの解析や最適化を難しくする機能も省かれている。その分、静的型付けコンパイラエンジンに頼ることができ、より最適化可能で柔軟な中間表現(IR)などの他の革新的な技術と合わせて、より速いコードを生成することができるとのことだ。
Codonはもともと、Pythonで高性能なドメイン固有言語(DSL)を作成するためのフレームワークとして開発された。DSLとは、PythonやC言語のような汎用的なプログラミング言語とは異なり、特定の目的に特化した言語のことで、DSLの例としては、CSS、SQLなどがある。
バイオインフォマティクスと遺伝学のためのDSLであるSeqから派生したCodonは、Python 3とほぼ互換性のある言語コンパイラに成長した。3月16日に予定されているリリースに先立ち、The Registerに提供された、「Codon:Codon: A Compiler for High-Performance Pythonic Applications and DSLs」と題する論文[PDF]によると、このツールチェーンは「Pythonの構文と意味論を共有し、ドメイン固有の機能とIR最適化を加えたDSLを開発することができます」とのことだ。
論文の著者であるAriya Shajii(Exaloop), Gabriel Ramirez(MIT CSAIL), Haris Smajlović(University of Victoria, Canada), Jessica Ray(MIT CSAIL), Bonnie Berger(MIT CSAIL) Saman Amarasinghe(MIT CSAIL), Ibrahim Numanagić(Victoria大学)は、CodonがPython実行時のオーバーヘッドなしにネイティブなマシンコードを出力できることから、PythonスクリプトでC言語に近い性能を達成できるとしている。
「Codonは、他のパフォーマンス指向のPython実装(PyPyやNumbaなど)とは異なり、静的実行ファイルに先行コンパイルするスタンドアロンシステムとして一から構築されており、既存のPythonランタイム(CPythonやRPythonなど)に実行を縛られません。その結果、Codonはより良いパフォーマンスを達成し、グローバルインタープリターロックのようなランタイム特有の問題を克服することができます」と、論文では述べられている。
ただし、DjangoやDocUtilsのような外部ライブラリに依存するものは、CPythonブリッジに依存しなければならず、CPythonの性能に制限される。例えば、Codonフォーラムでは、CodonでコンパイルしたフィボナッチスクリプトがCPythonのバージョンより70倍以上高速に動作したことも報告されている。
「numpyのようなC言語で実装されたライブラリを使用してプログラムを書き換えたり、C言語のような言語で完全に書き換えたりする必要がなく、Codonは同じPythonの実装を使用して、C言語で書き換えた場合と同じ性能を得ることができます。このように、Codonは、性能不足で限界に達している成功したPythonアプリケーションを前進させる最も簡単な道だと思います」と、MIT教授でCSAIL主任研究員のSaman Amarasinghe氏は述べている。
Codonは、定量金融やバイオインフォマティクスからディープラーニングまでの分野で、すでに商業的に利用されている。そして、今後数ヶ月の間に、Codonの開発者は、不足しているPythonの機能を実装するようだ。
Codonのライセンス条項では、2025年11月1日にコードをApache Licence 2.0に移行することが定められており、それまでは非商用目的で使用することを条件に、コピー、配布、改変を許可するライセンスとなっている。
論文
参考文献
- GitHub: exaloop/codon
- via Register: Check out Codon: A Python compiler if you have a need for C/C++ speed
研究の要旨
ドメイン特化型言語(DSL)は、直感的に扱える高水準の抽象化を実現し、汎用的な言語よりも優れた性能を発揮することができる。しかし、新しいDSLを実装するのは負担の大きい作業である。そのため、新しいDSLは通常、汎用言語の中に組み込まれている。CやC++のような低レベル言語は、Pythonのような高レベル言語よりもホストとして優れた性能を発揮することが多いが、高レベル言語はその容易さと柔軟性から、多くのドメインで普及しつつある。ここでは、Pythonの構文とセマンティクスを用いた高性能DSLのためのドメイン拡張可能なコンパイラとDSLフレームワークであるCodonを紹介する。Codonは、Pythonプログラムの先行型チェックとコンパイルに関するこれまでの研究を基に、ドメイン固有の最適化と分析を容易に取り入れることができる新しい中間表現を活用している。バイオインフォマティクス、セキュアなマルチパーティ計算、ブロックベースのデータ圧縮、並列プログラミングなど、様々な領域を対象としたCodonのコンパイラ拡張とDSLを紹介・評価し、Codon DSLが使い慣れた高級言語のメリットを提供し、通常低級言語でしか見られない性能を達成できること、つまり性能と使いやすさのギャップを埋めることを示す。
コメントを残す