1. ホーム
  2. python

Python をコンパイルするときに --enable-optimizations は何をするのですか?

2023-09-09 20:45:11

質問

arm ベースの Linux マシンで Python 3.6 をコンパイルしようとしています。 ./configure はこれを出力します。

すべての最適化(LTO、PGOなど)を有効にしたリリースビルドが必要な場合。 を実行してください。 ./configure --enable-optimizations .

は何をするのか --enable-optimizations は何をするのでしょうか?

どのように解決するのですか?

このフラグは、Profile guided optimization (PGO) と Link Time Optimization (LTO) を有効にします。

どちらも高価な最適化で、ビルド プロセスを遅くしますが、かなりの速度向上 (私が読んだ記憶では約 10 ~ 20%) が得られます。

これらの が正確に何をするのかについての議論は は、私の知識を超えており、おそらく 1 つの質問には広すぎます。いずれにせよ、LTO について、以下のサイトから少し読むことができます。 GCC のドキュメントを参照してください。 を読んで、PGOを始めることができます。 のwikiページ .

また、これらを追加した Python Bug Tracker で開かれた関連する課題もご覧ください。

  • 課題 24915 : プロファイル ガイド付き最適化の改善 (トレーニングの改善、llvm サポートなど) (PGOを追加しました。)
  • 課題25702 : GCC および CLANG のリンクタイム最適化のサポート (LTOを追加しました。)
  • 課題 26359 : すぐに使えるパフォーマンスのための CPython ビルドオプション (このオプションは --enable-optimizations フラグをconfigureスクリプトに追加し、前述の最適化を可能にします)。

コメントで @Shuo から指摘され、また 課題 28032 で述べているように、LTO は 常に で有効になります。 --enable-optimizations フラグで有効になります。一部のプラットフォーム ( のサポートバージョンによっては gcc ) は、設定スクリプトで無効にします。

このフラグの将来のバージョンは、おそらく常に有効になっているでしょうから、ここで両方について話しておくのはかなり安全です。