Oracle® Solaris Studio 12.4:数值计算指南

退出打印视图

更新时间: 2015 年 1 月
 
 

5.4 编译选项

Oracle Solaris Studio 12.4 编译器接受多个影响代码生成的选项。以下列表突出显示了并非对所有程序都有效的特定代码生成选项。在有大量程序员花费数年时间共同编写的大型程序中,通常会出现这种情况,没有人能够肯定哪个代码转换会/不会对程序的逻辑造成不利影响,因此必须谨慎使用以下选项。

–fast

用于许多通常非常有用的不同转换的宏。相比其所有组成部分,–fast 更易于记住。–fast 的定义在不同发行版中有所不同。并非其所有转换对于所有程序都是合法的。如果使用了 –fast,则其后跟随的附加选项可能会消除它的部分效果,例如,使用 –fast –fsimple=0 –fns=no –xvector=no 会禁用下面讨论的三个选项。使用 –dryrun 进行编译是一种很好的方法,可以查看特定编译器的命令行选项实际启用了哪些选项。

–fsimple

允许有关浮点模式、异常及舍入的特定简化假设,这些假设并非在所有程序上均成立。编译器使用这些假设来调整不同的值变化转换,这在不同的发行版中有所不同。–fsimple=0 是缺省且最安全的选项。–fsimple=1 对于许多程序而言是安全的,而 –fsimple=2 对于许多程序则有风险。只通过少量输入来简单测试程序执行并不足以验证 –fsimple=2 的适用性。对于某些输入数据而言,其效果可能会有益,对于另一些则不然。

–fns

不影响代码生成,但会导致程序在启用非标准下溢模式的情况下开始执行。这与 IEEE 标准相反,因此可能会得到非标准结果,包括无效结果和无限循环。不论如何处理下溢,许多程序都会以同样方式运行。如果运行时硬件对于标准下溢而言运行速度较慢,则这些程序使用 –fns 选项时可能会运行得更快。最新的 SPARC 服务器对于非标准模式没有性能优势。

–ftrap=common

不影响代码生成,但会导致程序在对下溢、被零除和无效 IEEE 异常启用了陷阱的情况下执行;这与 IEEE 标准相反,可能会导致依赖于连续 IEEE 异常处理的程序提前终止。–ftrap=none 是 C、C++ 和 F77 的缺省值,但不是 F95 的缺省值。

–fnonstd

用于 –fns–ftrap=common 的宏。

–xvector

–xvector=lib 一起使用时,用于启用向量数学库转换;与 –xvector=simd 一起使用时,用于启用 SIMD 转换。–xvector=lib 将更改数值结果,因为使用了通用初等超越函数的略微不同的、面向向量的 libmvec 实现,而不是 libm 版本。这些向量版本假定采用的是缺省舍入。

–xreduction

在使用 –xautopar–xopenmp 启用了并行化时,允许并行化范围更广的程序循环。归约操作类似于向量汇总操作或者计算两个向量的点积的操作;在精确运算中,汇总操作可以按任意顺序进行,但在有限精度浮点运算中会生成略微不同的结果。实际上,累积的顺序甚至可能是不确定的,因此在使用相同程序、相同数据和相同硬件的不同运行中,结果可能会略有不同。

有关更多信息,请参见各编译器的手册页和用户指南。