编译 python 时 --enable-optimizations 做什么?

what does --enable-optimizations do while compiling python?

我正在尝试在基于 arm 的 Linux 机器上编译 Python 3.6, ./configure 输出:

If you want a release build with all optimizations active (LTO, PGO, etc), please run ./configure --enable-optimizations.

--enable-optimizations 是做什么的?

此标志启用配置文件引导优化 (PGO) 和 Link 时间优化 (LTO)。

两者都是昂贵的优化,它们会减慢构建过程,但会产生显着的速度提升(比我记得阅读的内容高 10-20%)。

关于这些 究竟做了什么 的讨论超出了我的知识范围,对于一个问题来说可能过于宽泛。无论哪种方式,您都可以从 the docs on GCC which has an implementation for it and get a start on PGO by reading its wiki page.

中了解一些关于 LTO 的信息

此外,请参阅在 Python Bug Tracker 上打开的相关问题,添加了这些:

  • Issue 24915Profile Guided Optimization 改进(更好的训练、llvm 支持等)(添加了 PGO。)
  • Issue 25702Link 对 GCC 和 CLANG 的时间优化支持(添加了 LTO。)
  • Issue 26359CPython 开箱即用性能的构建选项(将 --enable-optimizations 标志添加到配置脚本这使得上述优化成为可能。)

正如@Shuo 在评论中指出并在 Issue 28032, LTO isn't always enabled with the --enable-optimizations flag. Some platforms (depending on the supported version of gcc 中所述)将在配置脚本中禁用它。

这个标志的未来版本可能会一直启用它,所以在这里讨论它们是非常安全的。