在编译python的时候--enable-optimizations做了什么?

时间:2016-12-31 05:22:45

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

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

  

如果您想要一个所有优化活动的版本构建(LTO,PGO等),   请运行./configure --enable-optimizations

--enable-optimizations做了什么?

1 个答案:

答案 0 :(得分:44)

此标志启用配置文件引导优化(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 26359用于开箱即用性能的CPython构建选项(将--enable-optimizations标志添加到configure脚本中,从而实现上述优化。)

正如@Shuo在评论中指出并在Issue 28032中说明的那样,LTO并未始终启用--enable-optimizations标志。某些平台(depending on the supported version of gcc)将在配置脚本中禁用它。

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