先看 vl
当前 vl 决定 body 元素数量。典型代码会先执行 vsetvli、vsetivli 或 vsetvl,再执行本页指令。
BF16 向量-标量拓宽融合乘加,累加到 FP32 vd。
VFWMACCBF16.VF 在 SEW=16 下读取 f[rs1] 中的标量 BF16、vs2 的 BF16 元素以及 vd 中的 FP32 累加值,将 BF16 源相乘,未舍入乘积加到对应 FP32 累加值,再按 frm 舍入写回 FP32 vd;属于 Zvfbfwma。
从 OP-V 编码解码到 BF16 拓宽融合乘加:每个活动元素把 f[rs1] 与 vs2[i] 的 BF16 源相乘并累加到 FP32 vd[i]。
V 扩展浮点指令使用 OP-V 主操作码,字段包含 funct6、源寄存器、vm、funct3、vd 和 opcode。
这是 BF16 向量-标量 widening FMA:语法为 vd、rs1、vs2、vm;rs1 是浮点寄存器中的 BF16 标量,vd 是 FP32 累加器和结果。
阅读 VFWMACCBF16.VF 时,不要只看助记符。官方 V 扩展语义还依赖当前 vl、vtype 和掩码状态。.vf:一个向量源和一个浮点标量源参与运算。
当前 vl 决定 body 元素数量。典型代码会先执行 vsetvli、vsetivli 或 vsetvl,再执行本页指令。
当前 vtype 提供 SEW、LMUL、tail policy 和 mask policy;这些规则影响元素宽度、寄存器组大小以及非活动/尾部目标元素。
带 vm 的普通向量指令在 vm=0 时用 v0 作为执行掩码,vm=1 表示未掩码。VMERGE 等少数形式会把 v0 当作数据选择输入。
结合 «vfwmaccbf16.vf v4, f0, v8 # v4[fp32] += bf16(f0) * bf16(v8[i])» 等实际代码理解该场景。
结合 «vfwmaccbf16.vf v4, f0, v8 # v4[fp32] += bf16(f0) * bf16(v8[i])» 等实际代码理解该场景。
不支持。官方 BF16 向量指令在 SEW 不是 16 时为保留编码;本页动画固定 SEW=16。
不是。BF16 是 1 位符号、8 位指数、7 位 fraction;它与半精度 binary16 的指数和 fraction 位宽不同。
不完全相同。官方说明可用先把 BF16 源加宽到 FP32 再执行 vfmacc 的序列理解,但源格式、SEW=16 限制和 Zvfbfwma 扩展要求不同。