web-dev-qa-db-ja.com

Pythonのコンパイル中に--enable-optimizationsは何をしますか?

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

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

--enable-optimizationsは何をしますか?

46
Yashar

このフラグは、プロファイルガイド型最適化(PGO)およびリンク時間最適化(LTO)を有効にします。

どちらもビルドプロセスを遅くする高価な最適化ですが、大幅な速度向上をもたらします(私が読んだ覚えているものから約10-​​20%)。

これらが正確に行うことについての議論は、私の知識を超えており、おそらく1つの質問には広すぎます。いずれにせよ、LTOについては GCCの実装が実装されているドキュメント から読み、 wikiページ を読むことでPGOを始めることができます。

また、これらを追加したPython Bug Trackerで開かれた関連する問題を参照してください。

  • 問題24915ガイド付き最適化の改善(より良いトレーニング、llvmサポートなど)(PGOを追加)
  • 問題25702GCCおよびCLANGのリンク時間最適化サポート(LTOを追加しました。)
  • 問題26359すぐに使用できるパフォーマンスのためのCPythonビルドオプション--enable-optimizationsフラグは、前述の最適化を有効にするconfigureスクリプトに追加されます。

コメントで@Shuoが指摘し、 Issue 28032 で述べられているように、LTOはalways--enable-optimizations 国旗。一部のプラットフォーム( gccのサポートされているバージョンに応じて )は、構成スクリプトで無効にします。

ただし、このフラグの将来のバージョンでは、常に有効にされる可能性が高いため、ここで両方について説明しても安全です。