当前位置: 首页 > 面试题库 >

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

梁和颂
2023-03-14
问题内容

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

如果您希望发布具有所有优化功能(LTO,PGO等)有效的发行版本,请运行./configure --enable-optimizations

怎么--enable-optimizations办?


问题答案:

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

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

关于这些功能 到底
是什么的讨论超出了我的理解,可能对于单个问题来说太宽泛了。无论哪种方式,您都可以从GCC上的文档(其中有一个实现)中读到一些有关LTO的信息,并通过阅读其Wiki页面开始使用PGO 。

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

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

正如@Shuo在评论中指出并在Issue
28032中
指出的那样,LTO并不
总是 启用该--enable- optimizations标志。某些平台(取决于的受支持版本gcc)会在配置脚本中将其禁用。

不过,此标志的将来版本可能始终会启用它,因此在这里讨论它们都非常安全。



 类似资料:
  • 问题内容: IntelliJ IDEA 2016.3添加了将构建/运行委托给Gradle的功能。 很明显,当委托选项启用时,Gradle会执行所有操作。 我的问题是,关闭此选项时,IntelliJ到底在做什么? 我问这个问题是因为我的Gradle文件中有自定义代码,并且在IntelliJ中构建时似乎未执行此代码。当我运行时,一切正常。 问题答案: IntelliJ有自己的构建系统,称为JPS,它使

  • 本文向大家介绍什么是预编译,何时需要预编译:相关面试题,主要包含被问及什么是预编译,何时需要预编译:时的应答技巧和注意事项,需要的朋友参考一下 1、总是使用不经常改动的大型代码体。 2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。

  • 问题内容: 为什么要编译Python脚本?您可以直接从.py文件运行它们,并且效果很好,那么在性能上有什么优势吗? 我还注意到,我的应用程序中的某些文件被编译为.pyc,而另一些则没有,为什么? 问题答案: 它被编译为字节码,可以更快,更快速地使用。 无法编译某些文件的原因是,每次运行脚本时都会重新编译与之一起调用的主脚本。所有导入的脚本将被编译并存储在磁盘上。 Ben Blank的 重要补充:

  • 问题内容: 之间有什么区别: 我看到super在只有单一继承的类中经常使用它。我知道为什么你会在多重继承中使用它,但是不清楚在这种情况下使用它的好处。 问题答案: 单继承的好处是微不足道的-大多数情况下,你不必将基类的名称硬编码到每个使用其父方法的方法中。 但是,如果不使用,几乎不可能使用多重继承。这包括常见的惯用语,例如,接口,抽象类等。这扩展到了以后扩展你的代码的代码。如果以后有人想编写一个扩

  • 问题内容: Google不允许我进行搜索,因此我在查找相关文档时遇到了麻烦。有人知道吗 问题答案: 在成对的对象之间执行 就地 +操作。尤其是: 集合:联合操作 dicts:更新操作 计数器:(多集)联合运算 数字:按位或,二进制运算 在大多数情况下,它与操作员有关。请参阅下面的示例。 套装 例如,两个分配的集合的并并共享以下等效表达式: 其中的最终值等于: 分配的OR操作 就地或运算 通过特殊方

  • 问题内容: 我遇到以下代码: 这是什么做不?就此而言,那没有做什么呢? 问题答案: 此语法是切片分配。一片意味着整个列表。和之间的区别在于后者不会替换原始列表中的元素。当有两个引用列表时,这是可见的 要查看差异,只需从上面的分配中删除。 从字面上看,如果是变量名而不是内建函数,则将问题的标题替换为省略号