英特尔Fortran编译器:编译时的优化技巧


21

我将从我在实验室中的亲身经历开始。在ifort 9天和10天中,我们过去一直非常积极地进行优化,使用-O3和特定于处理器的标志(例如-xW -xSSE4.2)进行编译。但是从ifort 11开始,我们开始注意到:
1.结果中存在一些不一致之处(因为未保留语义)
2.与-O2相比,获得的收益较小。

因此,当前,我们通常仅使用-O2和-xhost进行编译。您是否对ifort 11有更好的建议?当我们过渡到ifort 12时,这种情况会再次改变吗?提前致谢。


7
优化不能使所有代码统一受益。因此,我认为一个更好的问题是“我如何配置我的代码以判断哪些编译器优化有效?”
Matt Knepley 2011年

1
是因为未保留语义,还是因为某些内容已重新排序?这可能会偏离本主题,但是最好看到一段再现该问题的代码片段。可能是以您不喜欢的方式对某些内容进行了重新排序,但是编译器认为应该没问题。我的经验是,英特尔12在向量化方面比其任何以前的产品都更好,因此我希望当您切换到最新版本时会有更多的变化。
比尔·巴特

我以为说不保留语义等同于不保留顺序。无论如何,我意识到我的问题太笼统了,我不想详细说明。我们在使用Intel 10时遇到了一些问题,有些是编译器错误,有些则无法解释。因此,对于11,我们一直在安全地进行游戏,并且对性能感到满意。但是也许我们玩的太安全了,所以我想知道社区是否有一些建议。
FrenchKheldar 2011年

Answers:


16

我们强烈建议所有用户-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以尝试了解发生了什么……
FrenchKheldar 2011年

2
通过-O2 -xhost吗?那很有意思; 这是非常不寻常的,但是有可能发生。在这种情况下,优化器正在做某些事情,它有充分的理由认为可以提高速度,但是事实却使情况变得更糟。通常对于具有相当简单结构的科学代码来说,不会发生这种情况。在这样的情况下,profile指导的优化- software.intel.com/sites/products/documentation/hpc/compilerpro/... -往往可以帮助。

5

我在一家使用IFort在Fortran中生产大型高科技技术应用程序的公司工作-这些应用程序对性能至关重要,因为速度(同时保持准确性)是主要卖点。

我们始终使用-O3进行编译,据我所知,-O3所做的主要事情是循环展开和预取。我怀疑大多数科学计算应用程序会从中受益匪浅,特别是循环优化。我们已经有一段时间没有看到编译器错误了(尽管在Mac上使用Ifort时,我们已经看到了一些链接器错误)。我们使用11.1.095。

我希望这有帮助。


4

我意识到这个答案可能太迟了,但是对于积极的优化而言,“-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.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.