【问题标题】:Haswell FMA Instructions Generating DenormalsHaswell FMA 指令生成非规范化
【发布时间】:2015-12-15 22:04:57
【问题描述】:

我正在使用 Intel Haswell CPU 的 FMA 指令来优化一些计算。

但是,我发现即使我将 MXCSR 寄存器设置为 DNZ 和 FTZ 模式,这些指令也会产生异常。

如何强制这些 FMA 指令生成 0 而不是非正规指令?

我正在处理单精度浮点数据。

【问题讨论】:

  • 我无法通过随意的测试来重现这一点。您能否发布所使用的确切输入以及 MXCSR 的内容?
  • 个别结果为0x0000COFF。这是不正常的,对吧?
  • 假设字节顺序是正确的,并且“O”确实是“0”,这是不正常的。但是,鉴于该特定值,最可能的解释是字节顺序是错误的,而您确实有一个 NaN:0xffc00000
  • 好点,你是对的。如何防止出现 NaN?
  • 一般来说,你不会。您也不需要这样做,因为它们不会导致现代 SSE/AVX 单元出现任何减速。如果您出于其他原因不想要它们,您可以安排计算以使其无法生成,或者在最后酌情过滤掉它们。

标签: simd fma


【解决方案1】:

只是为遇到此问题的任何人提供明确的答案:

据了解,FMA 指令确实尊重 DAZ 和 FTZ。提问者实际上得到了NaN 结果,但由于混淆了表示的字节顺序,将它们误解为异常。

【讨论】:

    猜你喜欢
    • 2016-03-19
    • 2020-05-21
    • 2020-12-20
    • 1970-01-01
    • 2013-08-21
    • 2016-05-13
    • 2018-06-06
    • 2021-06-13
    • 2020-04-06
    相关资源
    最近更新 更多