【问题标题】:what does --enable-optimizations do while compiling python?编译 python 时 --enable-optimizations 做了什么?
【发布时间】:2017-05-15 07:33:41
【问题描述】:

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

如果您想要一个启用所有优化(LTO、PGO 等)的发布版本, 请运行./configure --enable-optimizations

--enable-optimizations 是做什么的?

【问题讨论】:

  • 我读到的是它打开了一个叫做Profile Guided Optimizations的东西。这种优化需要很长时间来配置,但生成的 python 二进制解释器在执行 Python 代码时要快 10%。检查这个参考(实际上是一个 github 问题) - Issue #160
  • 这过去会为 CPython 的编译增加大约 30 分钟,但从 Python3.8 开始,它现在运行一小部分回归测试以进行分析。我没有计时那部分,但我的整个配置/编译/安装时间是 6 分钟。

标签: python linux python-3.x configure python-3.6


【解决方案1】:

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

两者都是昂贵的优化,会减慢构建过程,但会显着提高速度(我记得读过的内容大约提高了 10-20%)。

关于这些究竟做了什么的讨论超出了我的知识范围,对于一个问题来说可能过于宽泛。无论哪种方式,您都可以从the docs on GCC which has an implementation for it 阅读一些有关 LTO 的信息,并通过阅读 its wiki page 开始使用 PGO。

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

  • Issue 24915配置文件引导优化改进(更好的培训、llvm 支持等)(添加了 PGO。)
  • Issue 25702对 GCC 和 CLANG 的链接时间优化支持(添加了 LTO。)
  • Issue 26359CPython 构建选项可实现开箱即用性能(将 --enable-optimizations 标志添加到配置脚本中,以启用上述优化。)

正如@Shuo 在评论中指出并在Issue 28032 中所述,LTO 并非总是 使用--enable-optimizations 标志启用。某些平台 (depending on the supported version of gcc) 会在配置脚本中禁用它。

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

【讨论】:

  • 根据 bugs.python.org/issue28032,启用优化仅适用于 PGO,不适用于 LTO。
  • @Shuo 很好,似乎它破坏了一些构建机器人。我已经更新了这个问题来解决这个问题。
  • 在 Centos 6 上,--with-lto 不起作用。它的 gcc 是旧的。
  • 为了清楚起见,这里的缺点是Python安装本身的配置变慢,还是程序解释的构建部分?也就是说,这对多次运行的小型 python 脚本是有害的,还是对所有运行时操作都有好处?
  • @NathanielFord Python 本身的构建时间因启用优化而减慢。大多数源代码构建都是用于开发目的的调试版本,因此默认配置设置有利于更快的二进制构建,但会以稍慢的测试用例执行时间为代价。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 2013-08-04
相关资源
最近更新 更多