ホームページ  >  記事  >  バックエンド開発  >  Python 3.12 の目標: パフォーマンスの向上!

Python 3.12 の目標: パフォーマンスの向上!

王林
王林転載
2023-04-22 14:43:091673ブラウズ

Python 3.12 目标:还可以更快!

リリース計画によると、Python 3.11.0 は 2022 年 10 月 24 日にリリースされます。

テストによると、3.11 は 3.10 と比較して 10 ~ 60% パフォーマンスが向上します。この成果は主に、「Shannon プロジェクト」としても知られる「Faster CPython」プロジェクトによるものです。

3.11 バージョンは、Python の高速化にとって刺激的なスタートです。次の 3.12 ではさらに多くのアクションが登場します。

以下の記事は「Shannon Project」の「Python 3.12 Goals」を翻訳したものですので、まずは見てみましょう!

  • 著者: Mark Shannon
  • 翻訳者: Pea Flower Cat @Python Cat
  • 英語: https://github.com/faster-cpython/ideas /wiki /Python-3.12-Goals

この記事の内容は変更される可能性がありますが、実際のバージョンが優先されます。

この記事は、Faster CPython が 3.12 で実装する予定の主なコンテンツの概要です。

トレース オプティマイザー

Python 3.11 で速度を向上させる主な方法は、個々のオペコードをより高速なコンテキスト依存オペコード (適応型特殊化オペコード) に置き換えることです。次に、大きな改善は、実行を最適化することです。複数のオペコードの。

これを行うには、既存の高レベルのオペコードの多くが、バージョン番号や参照カウントのチェックに使用されるような低レベルのオペコードに置き換えられます。これらの単純なオペコードは最適化が容易で、たとえば、冗長な参照カウント操作を削除できます。

これらの下位レベルのオペコードは、(CPython とサードパーティの JIT プロジェクトの両方で) マシン コードを生成するのに適した一連の命令も提供します。

これを行うには、宣言的な記述に基づいてインタープリタ ループが生成されます。

これにより、インタプリタ ループを特定の関連関数 (mark_stacks、stack_effect など) と同期させることによって発生するバグの一部を減らすことができ、また、インタプリタ ループに対するより大きな変更を実験することもできます。

マルチスレッド並列処理

Python には現在、プロセスごとにグローバル インタープリタ ロック (GIL) があり、これがマルチスレッド並列処理を妨げています。

  • PEP-684: https://peps.python.org/pep-0684
  • PEP-554: https://peps.python.org/pep-0554

Python 3.12 目标:还可以更快!

PEP-684 は、すべてのグローバル状態がスレッドセーフであることを保証し、各サブインタープリターの使用のグローバルインタープリターロックに移動するソリューションを提案しました。

Python 3.12 目标:还可以更快!


#PEP-554 は、Python がサブインタープリター (現時点では C API 機能のみ) を作成するソリューションを提案し、それによって真の実現を実現します。マルチスレッド並列処理。

    Python Cat 注: PEP-554 は 2017 年には Python 3.8 ~ 3.9 バージョンでの導入を目標として提案されましたが、事態は逆効果になりました。 2019年には「Has the Python GIL been slain?」という記事も翻訳しました。肉切り包丁が振られました。しばらく飛ばしてください~~
さらなる特殊化

どのバイトコードが特殊化から最も恩恵を受けるかを分析し、3.12 で残りの部分を完了する予定です。高収量の改善。

https://www.php.cn/link/7392ea4ca76ad2fb4c9c3b6a5c6e31e3

Python 3.12 目标:还可以更快!

より小さなオブジェクト構造

Python オブジェクト構造のサイズを削減する機会は数多くあります。これらは頻繁に使用されるため、全体的なメモリ使用量だけでなく、キャッシュの一貫性にもメリットがあります。 3.12 では、最も有望なアイデアのいくつかを実装する予定です。

下位互換性とパフォーマンスの間にはいくつかのトレードオフがあり、コンセンサスを確立するために PEP を提案する必要がある場合があります。

Python 3.12 目标:还可以更快!

メモリ管理オーバーヘッドの削減

オブジェクトのサイズを削減するだけでなく、そのレイアウトをより規則的にします。

これにより、メモリの割り当てと割り当て解除が最適化されるだけでなく、GC および再割り当て中のオブジェクトの走査も高速化されます。

API の安定性

前述のプロジェクトに加えて、開発チームは CPython コードベースの全体的な品質も向上させます:

  • さまざまなコンパイル段階の結合を減らすことで、コンパイラーの保守とテストが容易になります。
  • CPython テスト スイートのコード カバレッジを C 言語レベルで積極的に監視し、改善します。
  • Python パフォーマンス ベンチマーク スイートを改善して、より代表的な実際の負荷テストを含めます。
  • CPython の問題と PR、特にパフォーマンスに関連する問題を支援します。
  • 標準ベンチマーク用のマシンを追加し、macOS と Windows のテスト結果を追加しました。
  • CPython インタープリターの変更に適応できるよう、Python カーネルを頻繁に使用する主要プロジェクトとの連携を継続します。

以上がPython 3.12 の目標: パフォーマンスの向上!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。