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

退出打印视图

更新时间: 2015 年 1 月
 
 

3.4.5 nonstandard_arithmetic(3m)

正如Chapter 2, IEEE 运算中所介绍的一样,IEEE 算法使用渐进下溢来处理出现下溢的结果。 在某些基于 SPARC 的系统上,渐进下溢通常是使用算法的软件仿真部分实现的。 如果很多计算都出现下溢,其性能可能会下降。

要获取某些有关特定程序中是否出现这种情况的信息,可以使用 ieee_retrospectiveieee_flags 来确定是否发生了下溢异常,并检查程序使用的系统时间。如果操作系统中的程序花费了非常多的时间并引发了下溢异常,则渐进下溢可能是引发该问题的原因。在这种情况下,使用非 IEEE 算法可以加快程序的执行速度。

函数 nonstandard_arithmetic 在支持非 IEEE 算法模式的处理器上启用这些模式。在 SPARC 系统上,该函数在浮点状态寄存器中设置 NS(nonstandard arithmetic, 非标准算法)位。在支持 SSE 指令的 x86 系统上,该函数在 MXCSR 寄存器中设置了 FTZ(flush to zero, 刷新为零)位;它还在支持 DAZ(denormals are zero, 非正规数为零)位的处理器上的 MXCSR 寄存器中设置该位。注意,非标准模式的作用因处理器而异,并且可能会导致可靠软件出错。建议不要使用非标准模式以确保正常使用。

函数 standard_arithmetic 将硬件重置为使用缺省 IEEE 算法。这两种函数对只提供缺省 IEEE 754 样式的算法的处理器没有影响。SPARC T4 就是一种此类处理器。