gpt4 book ai didi

gcc - 在 GCC 中编译 : Is -O3 harmful?

转载 作者:行者123 更新时间:2023-12-03 05:12:38 25 4
gpt4 key购买 nike

我听说不应使用 gcc 的 -O3 选项进行编译。真的吗?如果是这样,避免使用 -O3 的原因是什么?

最佳答案

答案是:这取决于您的代码。

基本的经验法则是这样的:

  • 在 -O1 处,编译器会进行不需要太长时间计算的优化。

  • 在 -O2 处,编译器会执行“昂贵”的优化,这可能会减慢编译过程。它们还可能使输出程序变大一点,但可能不会太大。

  • -Os 与 -O2 大致相同,但优化更多的是针对大小而不是速度。在大多数情况下,这两个功能并不冲突(更优化的代码执行的步骤更少,因此更小),但是有一些技巧可以重复代码以避免分支惩罚,例如。

  • 在 -O3 处,编译器确实启动了占用空间的优化。它将更加积极地内联函数,并尝试在可能的情况下使用矢量化。

您可以在 GCC documentation 中阅读更多详细信息。如果你真的想 super 优化你的代码,那么你可以尝试启用更多甚至在 -O3 中也没有使用的选项;例如,-floop-* 选项`。

速度空间优化的问题尤其在于它们会对内存缓存的有效性产生负面影响。代码可能对 CPU 更好,但如果对你的内存来说不是更好,那么你就输了。因此,如果您的程序没有花费所有时间的单一热点,那么您可能会发现它整体速度变慢。

现实世界的优化是一门不精确的科学,原因有以下三个:

  1. 用户的硬件差异很大。

  2. 对一个代码库有利的内容可能对另一个代码库不利。

  3. 我们希望编译器能够快速运行,因此它必须做出最佳猜测,而不是尝试所有选项并选择最好的。

基本上,答案始终是,如果性能很重要的话,尝试所有优化级别,衡量您的代码的性能,然后选择最适合您的一个。每当发生重大变化时,请再次执行此操作。

如果性能不重要,-O2 是您的选择。

关于gcc - 在 GCC 中编译 : Is -O3 harmful?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25198018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com