显式预取只应在度量支持的特殊环境下使用。
a 必须是下列值之一。
表 A–44 -xprefetch 值
值 |
含义 |
---|---|
auto |
启用预取指令的自动生成 |
no%auto |
禁用预取指令的自动生成 |
explicit |
(SPARC) 启用显式预取宏 |
no%explicit |
(SPARC) 禁用显式预取宏 |
latx:factor |
根据指定的因子,调整编译器假定的“预取到装入”和“预取到存储”延迟。只能将此标志与 -xprefetch=auto 结合使用。该因子必须是正浮点数或整数。 |
yes |
已废弃,不使用。改用 -xprefetch=auto,explicit。 |
no |
已废弃,不使用。改用 -xprefetch=no%auto,no%explicit。 |
使用 -xprefetch、-xprefetch=auto 和 -xprefetch=yes,编译器就可以将预取指令自由插入到它生成的代码中。该操作会提高支持预取的体系结构的性能。
如果要在较大的多处理器上运行计算密集的代码,您会发现使用 -xprefetch=latx:factor 有很多优点。该选项指示代码生成器按照指定的因子调节预取与其相关的装入或存储之间的缺省延迟时间。
预取延迟是从执行预取指令到所预取的数据在高速缓存中可用那一刻之间的硬件延迟。在确定发出预取指令到发出使用所预取数据的装入或存储指令之间的间隔时,编译器就采用预取延迟值。
在预取和装入之间采用的延迟可能与在预取和存储之间采用的延迟不同。
编译器可以在众多计算机与应用程序间调整预取机制,以获得最佳性能。这种调整并非总能达到最优。对于占用大量内存的应用程序,尤其是要在大型多处理器上运行的应用程序,可以通过增加预取延迟值来提高性能。要增加值,请使用大于 1 的因子。介于 .5 和 2.0 之间的值最有可能提供最佳性能。
对于数据集完全位于外部高速缓存中的应用程序,可以通过减小预取延迟值来提高性能。要减小值,请使用小于 1 的因子。
要使用 -xprefetch=latx:factor 选项,请首先使用接近 1.0 的因子值并对应用程序运行性能测试。然后适当增加或减小该因子,并再次运行性能测试。继续调整因子并运行性能测试,直到获得最佳性能。以很小的增量逐渐增加或减小因子时,前几步中不会看到性能差异,之后会突然出现差异,然后再趋于稳定。
如果未指定 -xprefetch,则假定为 -xprefetch=no%auto,explicit。
如果仅指定了 -xprefetch,则假定为 -xprefetch=auto,explicit。
除非使用不带任何参数或具有auto 或 yes 参数的 -xprefetch 进行显式覆盖,否则使用缺省值 no%auto。例如,-xprefetch=explicit 与 -xprefetch=explicit,no%auto 相同。
除非使用参数 no%explicit 或 no 进行显式覆盖,否则使用缺省值 explicit。例如, -xprefetch=auto 与 -xprefetch=auto,explicit 相同。
如果启用了自动预取(例如,使用 -xprefetch 或 -xprefetch=yes),但是未指定延迟因子,则假定 -xprefetch=latx:1.0。
该选项会累积而不覆盖。
sun_prefetch.h 头文件提供了用于指定显式预取指令的宏。这些预取可能位于对应于宏出现位置的可执行文件中。
要使用显式预取指令,必须在适当的体系结构上包含 sun_prefetch.h,并且从编译器命令中排除 -xprefetch 或者使用 -xprefetch、-xprefetch=auto,explicit、-xprefetch=explicit 或 -xprefetch=yes。
如果调用了宏并包含了 sun_prefetch.h 头文件,但传递了 -xprefetch=no%explicit 或 -xprefetch=no,那么显式预取将不会出现在可执行文件中。
只有启用了自动预取时,才可以使用 latx:factor。即,latx:factor 只有与 yes 或 auto 结合使用时才有效,如 -xprefetch=yes,latx:factor。
显式预取只应在度量支持的特殊环境下使用。
因为编译器可以在众多计算机与应用程序间调整预取机制以获得最佳性能,所以当性能测试指示性能明显提高时,应当只使用 -xprefetch=latx:factor。假定的预取延迟在不同发行版本中是不同的。因此,无论何时切换到不同的发行版本,强烈建议重新测试延迟因子对性能的影响。