【问题标题】:Which are mostly commonly used gcc optimization options?最常用的 gcc 优化选项有哪些?
【发布时间】:2010-11-24 11:54:40
【问题描述】:

我发现了很多优化选项here

在浏览它们时,我发现其中一些有副作用(比如使调试变得不可能)。根据我的经验,我发现 -O1 到 -O3 和 -Os 最常用。但是,您的项目中常用的其他选项是什么?

【问题讨论】:

标签: c optimization gcc


【解决方案1】:

-ffast-math 会对浮点密集型软件产生重大的性能影响。

此外,使用适当的-march= 选项针对目标处理器进行特定编译可能会对性能产生轻微影响,但严格来说,这不是优化选项。

【讨论】:

  • 你应该注意到这个选项严重破坏了 IEEE 754 的一致性,只有在你确定没问题的情况下才应该使用。在实践中,这意味着如果您将浮点数视为实数的随机错误近似值,则可以使用它,但如果您以任何精确的方式使用它们,则不是。
  • 不,不是他的 ;-) 在我看来,依赖于 IEEE754 实现 -ffast-math 和没有的差异的软件可以被认为是损坏的。因为它依赖于浮点数的精确比较。 -fno-fast-math 将使您的程序绝不会更“精确”,或者浮点数不会更“精确”。它会做的是改变 NaN 的行为,如果你的软件有很多这样的,你就会遇到更大的问题。有一个例外:包含一些 IEEE754 函数的软件,例如 isNaN()(实际上从未使用过),最常见于 python 或 mysql 等解释器中。
【解决方案2】:

-march=native 与最新版本的 gcc 一起消除了确定您正在编译的平台的所有麻烦。

【讨论】:

  • 不幸的是,并不是所有都让人头疼。在我的机器上,45 nm Core 2、-march=native 甚至 -march=core2 激活所有必要的东西,包括 -msse3 和 -mssse3,但不是 -msse4_1 指令集,该指令集可在此处理器上使用(但不适用于 65 nm 型号!)。如果 -ftree-vectorize 被激活(在 -O3 处),某些 SSE4.1 指令实际上是从“正常”C 代码生成和使用的。性能差异当然难以衡量
  • @drhirsch:您评论的最后一句话+1。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 2016-01-21
  • 2016-08-04
  • 1970-01-01
  • 2014-10-28
  • 2014-01-31
相关资源
最近更新 更多