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