Sun Studio 12:C 用户指南

B.2.26 -fsimple[= n]

允许优化器进行有关浮点运算的简化假定。

编译器缺省采用 -fsimple=0。指定 -fsimple 与指定 -fsimple=1 等效。

如果存在 n,它必须是 0、1 或 2。

表 B–8 -fsimple 标志

值 

含义 

-fsimple=0

允许无简化假定。保持严格的 IEEE 754 一致性。 

-fsimple=1

允许保守简化。产生的代码与 IEEE 754 不完全一致,但多数程序所产生的数值结果没有改变。 

-fsimple=1 的情况下,优化器可假定:

  • 在进程初始化之后,IEEE 754 缺省舍入/捕获模式不发生改变。

  • 可以删除不生成可见结果(潜在的浮点异常除外)的计算。

  • 使用无穷大或 NaN 作为操作数的计算无需将 NaN 传送给其结果;例如,x*0 可能替换为 0

  • 计算不依赖于零的符号。

    如果使用 -fsimple=1,则允许优化器进行完全优化,而不考虑舍入或异常。特别是,在运行时舍入模式包含常量的情况下,浮点计算不能由产生不同结果的计算替换。

-fsimple=2

包含 -fsimple=1 的所有功能,当 -xvector=simd 生效时,还允许使用 SIMD 指令计算约简。

编译器尝试主动浮点优化,这可能导致很多程序因舍入更改而产生不同数值结果。例如,-fsimple=2 允许优化器将给定循环中 x/y 的所有计算都替换为 x*z,其中保证在循环中至少对 x/y 进行一次求值,z=1/y,并且已知 yz 的值在循环执行期间具有常量值。

即使 -fsimple=2,也不允许优化器在不产生任何内容的程序中引入浮点异常。

有关优化对精度的影响的详细说明,请参见由 Rajat Garg 和 Ilya Sharapov 合著的《Techniques for Optimizing Applications:High Performance Computing》。