【发布时间】:2015-12-15 22:04:57
【问题描述】:
我正在使用 Intel Haswell CPU 的 FMA 指令来优化一些计算。
但是,我发现即使我将 MXCSR 寄存器设置为 DNZ 和 FTZ 模式,这些指令也会产生异常。
如何强制这些 FMA 指令生成 0 而不是非正规指令?
我正在处理单精度浮点数据。
【问题讨论】:
-
我无法通过随意的测试来重现这一点。您能否发布所使用的确切输入以及 MXCSR 的内容?
-
个别结果为0x0000COFF。这是不正常的,对吧?
-
假设字节顺序是正确的,并且“O”确实是“0”,这是不正常的。但是,鉴于该特定值,最可能的解释是字节顺序是错误的,而您确实有一个 NaN:
0xffc00000。 -
好点,你是对的。如何防止出现 NaN?
-
一般来说,你不会。您也不需要这样做,因为它们不会导致现代 SSE/AVX 单元出现任何减速。如果您出于其他原因不想要它们,您可以安排计算以使其无法生成,或者在最后酌情过滤掉它们。