FMA 与 FMA3
亦称 FMA、FMA3
FMA 计算浮点乘加运算并执行一次最终舍入。FMA3 指的是三操作数 x86 融合乘加指令族;它与 AVX2 分别枚举。
您需要了解的内容
FMA 计算浮点乘加运算并执行一次最终舍入。FMA3 指的是三操作数 x86 融合乘加指令族;它与 AVX2 分别枚举。
工作原理
融合操作在舍入到目标格式之前,将乘积与求和作为单一算术操作进行求值。这可以保留在先对乘法进行舍入时会丢失的贡献部分。132、213 和 231 指令形式用于选择哪些操作数提供乘积、加数和被覆盖的目标。标量和打包形式具有不同的通道行为。
适用场景
多项式求值、矩阵乘法和数字滤波器可以使用 FMA 来合并算术运算。融合结果可能与特意使用两个独立操作的程序有所不同。因此,编译器收缩设置和数值可重现性要求与指令可用性同样重要。
如何检查支持与启用状态
对于 VEX FMA3 指令,请检查 CPUID.01H:ECX 第 12 位以及完整的 AVX 操作系统状态检查。若使用 EVEX 形式,请检查这些形式所需的额外 AVX-512 子集和状态。重新构建后数值结果发生变化时,请检查编译器标志。
程序自身必须包含恰当的实现,并在运行时选中它。硬件枚举、操作系统启用的寄存器状态以及二进制文件的编译基线是各自独立的检查项。虚拟机可以故意公开比宿主机更少的特性,并且容器也不会向宿主 CPU 增添指令。
该特性未确立的内容
FMA 并不意味着每个浮点表达式都会以额外精度进行求值,也不保证跨编译器设置获得相同的结果。FMA4 是不同的指令族。仅凭 AVX 或 AVX2 都不能证明支持 FMA3。
实践中的兼容性与性能
应使用具有代表性的数据测量完整的业务负载。更宽的向量可以减少指令数量,但内存流量、同步或转换开销可能保持不变。指令延迟、吞吐量和功耗表现取决于具体的微架构和工作条件。
实用验证核对清单
- 记录所涉及的具体处理器或平台型号,以及应用程序、操作系统和运行时的版本。保留实际错误或要求的原始措辞。
- 查阅该具体型号的制造商参考资料,然后检查程序运行环境中生效的功能与启用状态。
- 逐项比对所选二进制文件或后端的每项要求。仅凭名称相似的特性、别名或宽泛的技术标签是不够的。
- 确认应用程序选择了预期的实现。在不满足要求时,使用其文档中记录的诊断工具和受支持的回退方案。
- 每次只进行一项受支持的更改并重复相同的负载测试。保留原始配置和恢复路径以便随时使用。
若特性已列出但软件无法使用
首先排查出现故障的具体组件。硬件数据库描述的是记录在案的功能;操作系统或虚拟机监控程序可能会呈现不同的生效环境。非法指令错误同样需要调查实际发生故障的指令和二进制构建版本,因为数据损坏或不相关的未受支持指令也可能产生类似症状。
安装适用于该特定平台的受支持应用程序、驱动程序或运行时版本,并在需要时使用厂商文档记录的基线或回退构建版本。软件更新无法凭空创造处理器缺失的指令。固件和安全策略的更改应遵循系统制造商的规程和恢复计划,而非通用的优化方案。
本说明的来源与适用范围
Intel 64 和 IA-32 架构软件开发人员手册 · Linux 内核:在用户空间使用 XSTATE 特性
这些参考资料确立了架构行为和软件要求。它们并不独立验证关联硬件型号页面上的每个特性值。如需了解型号支持情况,请使用该页面的制造商证据并检查实际生效的系统配置。本文不提供基准测试、认证或独立审查日期。
来源与验证
编辑归属:Feex。未记录独立审核日期。 我们的研究方式.
- Intel 64 和 IA-32 架构软件开发人员手册 · 第 1 卷和第 2 卷描述了指定名称的指令族和 CPUID;第 3 卷描述了状态、分页、VMX 和保护控制。架构文档并不代表对某一特定型号的支持。
- Linux 内核:在用户空间使用 XSTATE 特性 · 操作系统启用的向量状态、动态启用的 tile 状态、信号栈要求以及 AMX 权限流程。Linux 特有的行为不构成对其他操作系统的承诺。
这篇文章有用吗?
回答"是"或"否"即可。如果您愿意,可以选择一个原因,或添加一段简短附言。
感谢。这有助于我们改进此页面。