【问题标题】:Why is there no fused multiply-add for general-purpose registers on x86_64 CPUs?为什么 x86_64 CPU 上的通用寄存器没有融合乘加?
【发布时间】:2018-08-21 13:48:54
【问题描述】:

在 Intel 和 AMD x86_64 处理器上,SIMD 向量化寄存器具有特定的融合乘加功能,但通用(标量、整数)寄存器 don't - 基本上需要先相乘,然后再相加(除非你能适应变成lea)。

这是为什么呢?我的意思是,它没有用,以至于不值得开销吗?

【问题讨论】:

    标签: x86-64 intel cpu-architecture instruction-set amd-processor


    【解决方案1】:

    整数乘法很常见,但不是与整数有关的最常见的事情之一。但是对于浮点数,一直使用乘法和加法,并且 FMA 为许多 ALU 绑定的 FP 代码提供了主要加速。

    此外,浮点数实际上避免了 FMA 的精度损失(x*y 内部临时值在添加之前根本没有四舍五入)。这就是 the ISO C99 / C++ fma() math library function 存在的原因,以及在没有硬件 FMA 支持的情况下实现缓慢的原因。

    整数 FMA(或乘法累加,又称 MAC)与单独的乘法和加法相比没有任何精度优势。


    一些非 x86 ISA 确实提供整数 FMA。它不是没用的,但英特尔和 AMD 都懒得包含它until AVX512-IFMA(这仍然只适用于 SIMD,基本上暴露了双精度 FMA/vmulpd 所需的 52 位尾数乘法器电路供整数使用说明)。

    非 x86 示例包括:

    • MIPS32madd/maddu(无符号)乘累加到hi/lo 寄存器(常规乘法和除法指令用作目标的特殊寄存器)。

    • ARM smlal 和朋友(32x32=>64 位 MAC,或 16x16=>32 位),也可用于无符号整数。操作数是常规的 R0..R15 通用寄存器。


    整数寄存器 FMA 在 x86 上会很有用,但很少有具有 3 个整数输入的微指令。 CMOV 和 ADC 有 3 个输入,但其中之一是标志。即便如此,直到 Broadwell 在 Haswell 中为 FP FMA 添加了 3 输入 uop 支持之后,他们才在 Intel 上解码为单个 uop。

    Haswell 及更高版本可以使用 3 个整数输入跟踪融合域微指令,不过 for (some) micro-fused instructions with indexed addressing modes。 Sandybridge/Ivybridge 非层压指令,如add eax, [rdx+rcx]。 (但 Nehalem 可以让它们保持微融合,就像 Haswell 一样;SnB 简化了融合域 uop 格式)。无论如何,这是融合域,而不是调度程序。只有 Broadwell/Skylake 可以在调度程序中跟踪 3 输入整数 uops,并且仅适用于 2 个整数 + 标志,而不是 3 个整数寄存器。

    英特尔确实使用“统一”调度程序,其中 FP 和整数操作使用相同的调度程序,并且它可以跟踪正确的 3 输入 FP FMA。所以如果有技术障碍,IDK。如果不是,IDK 为什么英特尔没有将整数 FMA 作为 BMI2 的一部分包含在内,它添加了 like mulx(2 输入 2 输出 mul 大部分是显式操作数,不像传统的 mul 使用 rdx:rax .)


    SSE2/SSSE3 确实有向量寄存器的整数 mul-add 指令,但只有在扩大 16x16 => 32 位 (SSE2 pmaddwd) 或 (无符号)8x(有符号)8=>16 位 (SSSE3 pmaddubsw)。

    但这些只是 2 输入指令,所以即使有乘法和加法,它也与 FMA 非常不同。


    脚注:问题标题最初表示没有“用于标量”的 FMA。标量 FP FMA 具有相同的 FMA3 扩展,添加了以下压缩版本:VFMADD231SD 和朋友在标量双精度上进行操作,并且相同风格的 vfmaddXXXss 可用于 XMM 寄存器中的标量浮点数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      • 2020-09-14
      • 2018-07-13
      相关资源
      最近更新 更多