Oracle Solaris Studio 12.2:Fortran 用户指南

3.4.179 –xvector[= [[ no%]lib, [no%] simd, %none] ]

启用对向量库函数调用的自动生成。

-xvector 选项需要 -xO3 或更高的优化级别。如果优化级别未指定或低于 -xO3,编译将不会继续,同时会发出消息。

在使用 -xvector 进行编译时,此选项要求使用缺省舍入模式 -fround=nearest 进行编译。

-xvector=lib(仅适用于 Solaris 平台),允许编译器将循环内的数学库调用转换为对等效向量数学例程的单个调用(如果能够进行此类转换的话)。此类转换可提高那些循环计数较大的循环的性能。-xvector=no%lib 将禁用此功能。

-xvector=simd 指示编译器使用本机 x86 SSE SIMD 指令来提高某些循环的性能。在 x86 中,缺省情况下以可产生有利结果的优化级别 3 和更高级别使用流扩展。可以使用子选项 no%simd 将其禁用。

仅当目标体系结构中存在流扩展(即目标 ISA 至少为 SSE2)时,编译器才会使用 SIMD。例如,可在现代平台中指定 -xtarget=woodcrest、-xarch=generic64、-xarch=sse2、-xarch=sse3-fast 来使用它。如果目标 ISA 没有流扩展,子选项将无效。

如果您同时指定了 -xvector=simd-fsimple=2,则可以获得比单独指定 -xvector=simd 更好的性能。但是,浮点结果可能会稍有不同,因为 -fsimple=2 允许对浮点运算重新排序。

在 x86 平台上的缺省值为 -xvector=simd,在 SPARC 平台上的缺省值为 -xvector=%none。如果指定不带子选项的 -xvector,在 x86、SPARC (Solaris) 和 Linux 上,编译器将分别采用 -xvector=simd,lib-xvector=lib-xvector=simd

在装入步骤中,编译器会包含 libmvec 库。如果您在编译时指定了 -xvector=lib,则还必须在链接时指定它。

此选项会覆盖以前的实例,因此,-xvector=%none 会覆盖以前指定的 -xvector=lib