【问题标题】:what are the compilation flags that are activated by using O3使用 O3 激活的编译标志是什么
【发布时间】:2020-10-01 01:01:21
【问题描述】:

我们正在将我们系统中的 intel 编译器版本从 v14 更改为 v18,通过运行测试,我们注意到 O3 在某些情况下会产生不正确的结果,而相同的代码在 O3 和 v14 上运行正确。我想知道这两个版本之间的优化有什么区别,以及如何获得通过在每个版本中使用 O3 激活的标志的完整列表。提前感谢大家的帮助和建议。

【问题讨论】:

  • 除了O3,您还使用了哪些标志?当您将 O2 与 v18 一起使用时,您的测试是否通过了?
  • 终于有一群懂测试的了!我很佩服。恭喜。现在,我想,是时候让您的团队审查需求并确定他们认为需要 O3 的原因了。也许您的测试可以确认(或不能)较少/较低的优化总是避免“不正确的结果”,如果是这样,也许结果足够快(同时是正确的)。
  • 另外,请注意,您可以隔离有问题的结果,以便在较低/较慢的优化级别进行编译。所有其余的代码都可以完全优化。如果您的测试继续有效,则此方法可能是解决您发现的问题的合理首次尝试。
  • @Dai 我没有检查过 O2 但 O0 很好
  • @2785528 不幸的是,时间差异很大,不接受非优化编译。此外,正如我所说,O3 的 v14 工作得非常好,我们没有任何问题。由于代码用于解决物理问题,我们可以验证最终结果,O3 v18 的不稳定性问题没有任何意义。

标签: c++ c compiler-optimization icc compiler-flags


【解决方案1】:

-O3 的行为记录在英特尔网站上:https://software.intel.com/content/www/us/en/develop/documentation/cpp-compiler-developer-guide-and-reference/top/compiler-reference/compiler-options/compiler-option-details/optimization-options/o.html

O3

  • 执行 O2 优化并启用更激进的循环转换,例如 Fusion、Block-Unroll-and-Jam 和折叠 IF 语句。
  • 此选项可以设置其他选项。这由编译器确定,具体取决于您使用的操作系统和体系结构。设置的选项可能会因版本而异。
  • 当 O3 与选项 -ax-x (Linux) 或选项 /Qax/Qx (Windows) 一起使用时,编译器执行比 O2 更积极的数据依赖性分析,这可能会导致编译时间更长。
  • O3 优化可能不会导致更高的性能,除非发生循环和内存访问转换。与 O2 优化相比,优化在某些情况下可能会减慢代码速度。
  • 对于具有大量使用浮点计算和处理大型数据集的循环的应用程序,建议使用 O3 选项。
  • 共享库中的许多例程针对英特尔® 微处理器的优化程度高于针对非英特尔微处理器的优化。

页面底部列出了“替代选项”,其中仅列出了-Od(禁用所有优化:可能不是您想要的)。

所以看起来-O3 激活了无法用其他标志表示的优化(所以-O3 没有长格式等效版本)。

Looking at Intel's page about the techniques used for high-level optimization,它们似乎无法启用点菜,因此对于 HLO,它是全有或全无,并且可以使用 O2O3 启用(除了 @ 987654340@ 使用了O3 技术的子集)。

Compare that to -Ofast 确实有一个长格式的等价物:

Ofast

  • 它设置编译器选项-O3-no-prec-div-fp-model fast=2

【讨论】:

  • 感谢您提供这部分文档。我已经看到了,但不幸的是,它没有明确提到 O3 激活的标志是什么。我想一一停用它们并找到导致问题的标志。
  • @user2348209 请重新阅读我的回答。使用O3 启用的 HLO 是全有或全无的事情。没有任何标志可以选择性地启用/禁用这些优化。
  • 感谢您的评论,恕我直言,我认为您所说的不是真的。例如,只需查看来自 GNU GCC gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html 的以下页面,它清楚地列出了每个优化级别激活的标志。我正在寻找英特尔编译器中的类似列表
  • 恕我直言,但英特尔不是 GNU,ICC 也不是 GCC。没有什么需要编译器优化,您可以通过命令行单独切换。鉴于英特尔编译器受英特尔支持,您应该通过支持票自行联系他们以获得权威答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多