You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

vfmadd231ps指令抛出c0000090浮点异常的问题排查

异常原因分析

1. 异常触发的直接诱因

异常码0xC0000090对应x86架构的浮点无效操作硬件异常(#IA),触发的直接原因是当前MXCSR寄存器的异常屏蔽配置存在问题:
MXCSR值为0x1923,其二进制结构为0b1100100100011,对应x86 MXCSR位定义可知:

  • 无效操作异常屏蔽位(IM,MXCSR第7位)值为0,即未开启无效操作异常屏蔽
  • 仅开启了精度屏蔽、非正规数屏蔽、下溢屏蔽
    因此当运算过程中无效操作标志位被置位时,CPU不会静默处理该异常,会直接向上抛出硬件异常。

2. 全0输入触发无效操作的根因

标准全0输入的vfmadd231ps运算(0*0+0)本身是合法运算,不会触发异常,当前场景的问题出在广播操作的源操作数属性不符合要求:

  • 指令使用的dword bcst修饰符会从内存地址读取1个32位单精度浮点数,广播到ZMM寄存器的全部16个运算通道参与计算
  • 你提到内存地址存储值为0,但若该值为非正规零(单精度编码的指数位全为0,且尾数位不全为0),且MXCSR的DAZ位(非正规数清零控制位,第14位)未置位时,融合乘加运算会将该非正规操作数判定为非法输入,触发无效操作标志位。
  • 当前MXCSR的DAZ位值为0,不会自动将非正规数清零处理,因此运算直接触发了未被屏蔽的无效操作异常。

修复方案

  • 优先校验内存地址0x000002207de9dc00处的4字节值:如果不是标准单精度零(编码为0x00000000),将其修正为标准零即可解决问题
  • 如果业务逻辑允许忽略浮点运算异常,可将MXCSR的IM位(第7位)置为1,开启无效操作异常屏蔽,CPU会自动返回默认值继续执行后续运算

内容的提问来源于stack exchange,提问作者Alois Kraus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 19:06:03