Oracle® Solaris Studio 12.4:Fortran 用户指南

退出打印视图

更新时间: 2014 年 12 月
 
 

3.4.23 –fast

选择优化执行性能的选项。


注 -  该选项定义为其他选项的特殊选择集,它会随版本和编译器的不同而变化。另外,-fast 选择的某些选项并非在所有平台上都可用。使用 -dryrun 标志进行编译可查看 -fast 的扩展。

-fast 可为某些基准测试应用程序提供高性能。 但是,对于您的应用程序,选项的特定选择可能是合适的,也可能是不合适的。使用 -fast 是编译应用程序以获得最佳性能的良好起点。但是,仍然可能需要进行其他调整。如果用 -fast 编译时程序不能正常运行,请仔细查看组成 -fast 的各个选项,只调用那些适用于您程序的选项,使程序正常运行。

另请注意,用 -fast 编译的程序对于一些数据集可能会表现出良好的性能和精确的结果,而对于另一些数据集则不然。对于那些依赖浮点运算的特殊属性的程序,请避免用 -fast 进行编译。

由于 -fast 选择的某些选项具有链接含义,因此,如果在不同的步骤中进行编译和链接,还请务必用 -fast 进行链接。

–fast 会选用以下选项:

  • -xtarget=native 硬件目标

    如果程序要在不同于编译计算机的目标上运行,请在 -fast 后加上代码生成器选项。例如: f95 -fast -xtarget=ultraT2 ...

  • -O5 优化级别选项。

  • -depend 选项分析循环的数据依赖性和可能的重构。 (在优化级别 -xO3 和更高级别上进行编译时,此选项始终启用。)

  • -libmil 选项,用于系统提供的内联扩展模板。

    对于依赖异常处理的 C 函数,请在 -fast 之后加上 -nolibmil(如 -fast -nolibmil)。如果使用了 -libmil,则使用 errnomatherr(3m) 无法检测到异常。

  • -fsimple=2 选项,用于主动浮点优化。

    如果要求严格符合 IEEE 754 标准,则 –fsimple=2 是不合适的。请参见–fsimple[={1|2|0}]

  • -dalign 选项可为通用块中的双精度和四精度数据生成双字装入和存储。 使用此选项可以在通用块中生成非标准的 Fortran 数据对齐。

  • -xlibmopt 选项选择优化的数学库例程。

  • -pad=local 在局部变量之间插入填充(如果适用),以提高高速缓存利用率。 (SPARC)

  • -xvector=lib 使用向量参数将 DO 循环内的某些数学库调用变换为对向量化库等效例程的单个调用。 (SPARC)

  • -fma=fused 启用自动生成浮点混合乘加指令。

  • –fns 选择非标准浮点运算异常处理和渐进下溢。 请参见–fns[={yes|no}]

  • 选择 -fround=nearest,因为 —xvector—xlibmopt 要求使用该选项。(Oracle Solaris)

  • -ftrap=common 用于捕获常见的浮点异常,在 f95 中处于启用状态。

  • -nofstore 对强制表达式具有结果精度这一行为加以取消。(x86)

  • 在 x86 平台上,-xregs=frameptr 允许编译器将帧指针寄存器用作通用寄存器。有关详细信息,尤其是在编译混合 C、C++ 和 Fortran 源代码情况下的详细信息,请参见 -xregs=frameptr 的描述。在 -fast 之后指定 -xregs=no%frameptr,帧指针寄存器将不会作为通用寄存器使用。(x86)

可以对此列表进行增减,方法是在 -fast 选项之后加上其他选项,如下所示:

f95 -fast -fsimple=1 -xnolibmopt ...

它会覆盖 -fsimple=2 选项,并禁用由 -fast 选择的 -xlibmopt

由于 -fast 会调用 -dalign-fns-fsimple=2,因此用 -fast 编译的程序会导致非标准浮点运算、非标准数据对齐以及非标准表达式求值顺序。对于大多数程序来说,这些选择可能是不合适的。

请注意,由 -fast 标志选择的一组选项会随各个编译器发行版而发生变化。使用 -dryrun 调用编译器可显示 -fast 扩展:

<sparc>% f95 -dryrun -fast |& grep ###
          ###     command line files and options (expanded):
          ### -dryrun -xO5 -xarch=sparcvis2 -xcache=64/32/4:1024/64/4
              -xchip=ultra3i -xdepend=yes -xpad=local -xvector=lib
              -dalign -fsimple=2 -fns=yes -ftrap=common -xlibmil
              -xlibmopt -fround=nearest