使用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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...