微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用O3激活的编译标志是什么 O3 O3

如何解决使用O3激活的编译标志是什么 O3 O3

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

解决方法

-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,它是全有还是全无,并使用O2或{{1 }}(除了O3使用O2的技术的一部分)。

Compare that to -Ofast确实具有长形式的等效项:

O3

  • 它设置编译器选项Ofast-O3-no-prec-div

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。