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

Yas*_*har 46 python linux configure python-3.x python-3.6

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

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

怎么--enable-optimizations办?

Jim*_*ard 49

该标志启用Profile引导优化(PGO)和链路时间优化(LTO).

两者都是昂贵的优化,可以减慢构建过程,但会产生显着的速度提升(从我记忆中读取的大约10-20%).

关于这些确切做什么的讨论超出了我的知识范围,对于单个问题可能过于宽泛.无论哪种方式,您都可以从GCC上的文档中读到一些关于LTO的信息,该文档有一个实现,并通过阅读其Wiki页面开始了PGO .

另外,请参阅Python Bug Tracker上打开的相关问题,其中添加了以下内容:

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

正如@Shuo在评论中指出并在问题28032中所述,LTO并不总是使用该--enable-optimizations标志.某些平台(取决于支持的版本gcc)将在配置脚本中禁用它.

这个标志的未来版本可能总是会启用它,所以在这里讨论它们是相当安全的.

  • 根据https://bugs.python.org/issue28032,启用优化仅适用于PGO,而不适用于LTO. (3认同)
  • 为了清楚起见,这里的缺点是Python安装本身的配置变慢,还是程序解释的构建部分变慢?也就是说,这对于多次运行的小型 python 脚本来说是有害的,还是对所有运行时操作都有好处? (2认同)
  • @NathanielFord 通过启用优化,Python 本身的构建时间被减慢了。大多数源代码构建都是出于开发目的的调试构建,因此默认配置设置有利于更快的二进制构建,但代价是测试用例执行时间稍慢。 (2认同)