Oracle Solaris Studio 12.2:Fortran 用户指南

3.4.161 –xprefetch[= a[,a]]

在支持预取的体系结构上启用预取指令。

有关 Fortran PREFETCH 指令的说明,请参见2.3.1.7 PREFETCH 指令

a 必须是以下值之一:

auto

启用预取指令的自动生成

no%auto

禁用预取指令的自动生成

explicit

启用显式预取宏

no%explicit

禁用显式预取宏

latx:factor

(SPARC) 按指定的因子调整编译器的假定预取到装入的延迟和预取到存储的延迟。该因子必须是正浮点数或整数。

如果要在较大的 SPARC 多处理器上运行计算密集的代码,您会发现使用 -xprefetch=latx:factor 有很多优点。该选项指示代码生成器按照指定的因子调节在预取及其相关的装入或存储之间的缺省延迟时间。

预取延迟是从执行预取指令到所预取的数据在高速缓存中可用那一刻之间的硬件延迟。在确定发出预取指令到发出使用所预取数据的装入或存储指令之间的间隔时,编译器就采用预取延迟值。


注 –

在预取和装入之间采用的延迟可能与在预取和存储之间采用的延迟不同。


编译器可以在众多计算机与应用程序间调整预取机制,以获得最佳性能。这种调整并非总能达到最优。对于占用大量内存的应用程序,尤其是要在大型多处理器上运行的应用程序,可以通过增加预取延迟值来提高性能。要增加值,请使用大于 1 的因子。介于 .5 和 2.0 之间的值最有可能提供最佳性能。

对于数据集完全位于外部高速缓存中的应用程序,可以通过减小预取延迟值来提高性能。要减小此值,请使用小于 1 的因子。

要使用 -xprefetch=latx:factor 选项,请首先使用接近 1.0 的因子值并对应用程序运行性能测试。然后适当增加或减小该因子,并再次运行性能测试。继续调整因子并运行性能测试,直到获得最佳性能。以很小的增量逐渐增加或减小因子时,前几步中不会看到性能差异,之后会突然出现差异,然后再趋于稳定。

yes

-xprefetch=yes-xprefetch=auto,explicit 相同

no

-xprefetch=no-xprefetch=no%auto,no%explicit 相同

使用 -xprefetch-xprefetch=auto-xprefetch=yes 时,编译器就可以将预取指令插入到其生成的代码中。该操作会提高支持预取的体系结构的性能。

3.4.161.1 缺省:

如果未指定 -xprefetch,则采用 -xprefetch=auto,explicit

如果仅指定了 -xprefetch,则假定为 -xprefetch=auto,explicit

如果使用 -xprefetch-xprefetch=yes 等启用了自动预取,但未指定延迟因子,则假定 -xprefetch=latx:1.0

3.4.161.2 交互:

如果使用 -xprefetch=explicit,编译器将能够识别以下指令:

!$PRAGMA SUN_PREFETCH_READ_ONCE (name )

!$PRAGMA SUN_PREFETCH_READ_MANY (name )

!$PRAGMA SUN_PREFETCH_WRITE_ONCE (name )

!$PRAGMA SUN_PREFETCH_WRITE_MANY (name )

-xchip 设置影响假定延迟的决定以及 latx:factor 设置的结果。

仅当在 SPARC 处理器上启用了自动预取 (auto) 时,latx:factor 子选项才有效。

3.4.161.3 警告:

显式预取只应在度量支持的特殊环境下使用。

因为编译器可以在众多计算机与应用程序间调整预取机制以获得最佳性能,所以当性能测试指示性能明显提高时,应当只使用 -xprefetch=latx:factor。假定的预取延迟在不同发行版本中是不同的。因此,无论何时切换到不同的发行版本,强烈建议重新测试延迟因子对性能的影响。