Facebookが発表 最近の投稿を通じて、 Cinderプロジェクトのソースコードをリリースする、これは CPythonブランチのフォーク Pythonプログラミング言語のメインリファレンス実装。
シンダー Facebookの本番インフラストラクチャでInstagramを強化するために使用されます パフォーマンスを向上させるための最適化が含まれています。 既製の最適化をCPythonの主流に移行する可能性について議論し、他のCPythonパフォーマンス改善プロジェクトを支援するために、コードが公開されました。
Facebookは、Cinderを別個のオープンソースプロジェクトとしてサポートしないと述べています コードは、追加のドキュメントなしで、会社のインフラストラクチャで使用される形式で提示されます。
Cinderは、CPythonの代替としてそれ自体を宣伝していません。主な開発目標は、CPython自体を改善することです。
Cinderのコードはかなり信頼できると考えられています 実稼働環境でテストされていますが 問題が特定された場合、Facebookは外部エラーメッセージに応答することを保証しないため、問題は独自に解決する必要があります。 プルリクエスト。
同時に、Facebookはコミュニティとの建設的な協力を排除するものではなく、Cinderをさらに高速化する方法や、準備された変更をメインのCPythonフレームワークに転送する速度を上げる方法についてのアイデアについて話し合う準備ができています。
Cinderに実装されている主な最適化は次のとおりです。
- バイトコードオンラインキャッシング: この方法の本質は、動的に最適化できる典型的なオペコード実行状況を特定し、そのオペコードをより高速な特殊オプションに置き換えることです。
- 日常的な評価: すぐに処理される非同期関数呼び出しの場合、これらの関数の結果は、コルーチンを作成したり、イベントループを呼び出したりすることなく直接置換されます。 Facebookが頻繁に使用するコードでは、最適化により約5%の加速が得られます。
- 個々のメソッドおよび関数のレベルでの選択的JITコンパイル: これは、「-Xjit」オプションまたは環境変数PYTHONJIT = 1によって有効になり、多くのパフォーマンステストを1,5〜4倍高速化できます。
JITを有効にする必要がある機能のリストは、プロファイルの結果に基づいて決定できます。 将来的には、関数呼び出し頻度の内部分析に基づく動的JITコンパイルのサポートが期待されますが、Instagramでの起動プロセスの詳細を考慮すると、JITコンパイルは初期段階のFacebookにも適しています。
JITは、最初にPythonのバイトコードを高レベルの中間表現(HIR)に変換します。これは、Pythonのバイトコードにかなり近いものですが、レコードベースの仮想マシンスタックではなく、レコードベースの仮想マシンを使用するように設計されています。パフォーマンスに関連する追加のタイプ情報と詳細。 次に、HIRは静的単一割り当て(SSA)形式に変換され、参照カウントとメモリ使用量データに基づいて最適化の段階を経ます。 その結果、アセンブリ言語に近い低レベルの中間表現(LIR)が生成されます。 - モジュールの厳密モード:この機能には、次のXNUMXつのコンポーネントがあります。StrictModuleタイプ。 モジュールの実行がそのモジュールの外部のコードに影響を与えないことを判別できる静的アナライザー。
- 静的Python: は、型アノテーションを使用して各型に固有のバイトコードを生成し、JITコンパイルを介してより高速に実行される実験的なバイトコードコンパイラです。 一部のテストでは、静的PythonとJITの組み合わせにより、通常のCPythonの最大7倍のパフォーマンス向上が実証されています。 多くの場合、結果はMyPyCおよびCythonコンパイラが使用されたかのように評価されます。
最後に Cinderコードを取得できるようにすることに興味がある場合 またはそれについてもっと学ぶために、あなたは相談することができます 詳細は次のリンクをご覧ください。