B.2.29 -fsimple[= n]
允许优化器进行有关浮点运算的简化假定。
编译器缺省采用 -fsimple=0。指定 -fsimple 与指定 -fsimple=1 等效。
如果存在 n,它必须是 0、1 或 2。
表 B–9
-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,并且已知 y 和 z 的值在循环执行期间具有常量值。
|
即使 -fsimple=2,也不允许优化器在不产生任何内容的程序中引入浮点异常。
有关优化对精度的影响的详细说明,请参见由 Rajat Garg 和 Ilya Sharapov 合著的《Techniques for Optimizing Applications: High Performance
Computing》。