我将从我在实验室中的亲身经历开始。在ifort 9天和10天中,我们过去一直非常积极地进行优化,使用-O3和特定于处理器的标志(例如-xW -xSSE4.2)进行编译。但是从ifort 11开始,我们开始注意到:
1.结果中存在一些不一致之处(因为未保留语义)
2.与-O2相比,获得的收益较小。
因此,当前,我们通常仅使用-O2和-xhost进行编译。您是否对ifort 11有更好的建议?当我们过渡到ifort 12时,这种情况会再次改变吗?提前致谢。
我将从我在实验室中的亲身经历开始。在ifort 9天和10天中,我们过去一直非常积极地进行优化,使用-O3和特定于处理器的标志(例如-xW -xSSE4.2)进行编译。但是从ifort 11开始,我们开始注意到:
1.结果中存在一些不一致之处(因为未保留语义)
2.与-O2相比,获得的收益较小。
因此,当前,我们通常仅使用-O2和-xhost进行编译。您是否对ifort 11有更好的建议?当我们过渡到ifort 12时,这种情况会再次改变吗?提前致谢。
Answers:
我们强烈建议所有用户-O3 -xHost -ipo
都从ifort 11和ifort 12 开始。如果O3启用了特定的浮点转换,这些转换会影响某些计算的精度,则可以使用-fp-model precise -fp-model except
(或更彻底地-fp-model strict
)将其关闭。同时保留O3启用的其他优化,例如缓存的循环阻止,循环融合和展开以及内存访问优化。
我建议您尝试在单个文件上使用浮点模型,并找出在哪些方面有所作为,而不是在全局范围内将其关闭。它可能会造成约15%的减速,并且您希望能够将其保持在不影响计算的位置。如果不确定精度会在哪里受到影响,则可以通过打开和关闭这些文件的浮点模型标记或以舍入模式进行播放。
最近,我们向用户简短介绍了优化标志,重点是x86的gnu和intel编译器;您可以在此处查看该演讲的幻灯片。
顺便说一句,虽然我们正在讨论为代码选择优化标志,但不时需要查看-vec-report的输出,以查看编译器在何处尝试对循环进行矢量化而未在其中进行;有时,您可以对循环进行一些小的更改,这可能导致向量化成为可能(可以提高4倍)。对于更一般的-opt-report也是如此。
-O3 -xhost -fp-model precise -fp-model except
结果导致速度降低了30%。我将再次查看分析,-vec-report
以尝试了解发生了什么……
我意识到这个答案可能太迟了,但是对于积极的优化而言,“-fast”选项似乎是最简单的解决方案。手册页节选:
-fast
Maximizes speed across the entire program.
Description:
This option maximizes speed across the entire program.
It sets the following options:
- On Linux* systems: -ipo, -O3, -no-prec-div, -static, and -xHost
- On OS X* systems: -ipo, -mdynamic-no-pic, -O3, -no-prec-div, and -xHost
- On Windows* systems: /O3, /Qipo, /Qprec-div-, and /QxHost
NOTE: Option fast sets some aggressive optimizations that may not be appropriate for all
applications. The resulting executable may not run on processor types different from the
one on which you compile. You should make sure that you understand the individual optimi-
zation options that are enabled by option fast.