我将从我在实验室的个人经历开始。回到 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,这种情况会再次改变吗?提前致谢。
我们强烈建议我们的所有用户从-O3 -xHost -ipo
ifort 11 和 ifort 12 开始。如果 O3 启用的特定浮点转换会影响您的某些计算的精度,您可以使用-fp-model precise -fp-model except
(或更彻底地,-fp-model strict
)关闭这些同时保留 O3 启用的其他优化,例如缓存的循环阻塞、循环融合和展开以及内存访问优化。
我建议在单个文件上尝试浮点模型的东西并找出它的不同之处,而不是全局关闭它;它可能是约 15% 的减速带,并且您希望能够将其保持在不影响您的计算的地方。如果您不确定精度在哪里受到影响,您可以打开和关闭这些文件的浮点模型标志,或者使用舍入模式。
我们最近与我们的用户就优化标志进行了简短的讨论,重点关注用于 x86 的 GNU 和 Intel 编译器;你可以在这里看到那个演讲的幻灯片。
顺便说一句,当我们谈论为您的代码选择优化标志时,时不时地查看向量化报告的输出以查看编译器尝试向量化循环而无法向量化的位置也是值得的。有时您可以对循环进行一些小的更改,这可能导致矢量化成为可能(这可能是 4 倍的加速)。同样,请参阅-qopt-report 以获取有关更一般的优化报告的信息(-opt-report,适用于旧版本)。
我在一家公司工作,该公司使用 IFort 在 Fortran 中生产大型、技术含量高的应用程序 - 这些应用程序对性能非常关键,因为速度(同时保持准确性)是主要卖点。
我们总是使用 -O3 进行编译,据我所知,-O3 所做的主要事情是循环展开和预取。我怀疑大多数科学计算应用程序都会从这些中受益匪浅,尤其是循环优化。我们已经有一段时间没有看到编译器错误了(尽管我们在 Mac 上使用 Ifort 时看到了一些链接器错误)。我们使用 11.1.095。
我希望这有帮助。
我意识到这个答案可能太晚了,但是对于积极的优化,“-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.