首页/指令库/VFWCVTBF16-F-F-V
VFWCVTBF16.F.F.V

RISC-V VFWCVTBF16.F.F.V 指令详解

指令手册OPFVV

将 BF16 向量源精确加宽为 FP32。

指令语法

vfwcvtbf16.f.f.v vd, vs2, vm

语法为 vfwcvtbf16.f.f.v vd, vs2[, v0.t];vd、vs2 选择 v0–v31 向量组的最低编号寄存器;没有浮点标量源或立即数。

32 位 OP-V:funct6=010010、bits19:15=01101(固定 VFUNARY0 选择子)、funct3=001、opcode=1010111;vm=0 使用 v0.t,省略掩码为 vm=1。

需 Zvfbfmin(依赖 Zve32f)、启用向量/浮点状态和合法 vtype;仅 SEW=16 合法。vs2 是 EEW=16、EMUL=LMUL 的 BF16 源;vd 是 EEW=32、EMUL=2*LMUL 的 FP32 目标,转换精确。

组起点按 EMUL 对齐,最大 EMUL≤8;窄化重叠须同最低寄存器,加宽重叠须源 EMUL≥1 且同最高寄存器。masked vd 不含 v0,v0 不可同时供 mask 和数据;不同 EEW 的合法源/目标重叠强制 mask/tail agnostic。

只执行掩码允许的 vstart≤i<vl 元素;非活动/尾部按策略处理,不保证清零。vstart≥vl(含 vl=0)不更新任何目标元素。无效 frm 的使用始终保留,即使转换精确或没有活动元素。

Zvfbfmin向量运算

指令行为说明

VFWCVTBF16.F.F.V 在 SEW=16 下把 vs2 中 16 位 BF16 源元素精确加宽为 32 位 FP32 结果并写入 vd。普通数和无穷的 BF16 编码左移 16 位,FP32 低 16 位填 0;属于 Zvfbfmin。

VFWCVTBF16.F.F.V 指令解析与执行动画

从 OP-V 编码解码到向量 BF16 加宽转换:每个活动元素把 BF16 精确加宽为 FP32。

输入的指令
vfwcvtbf16.f.f.v
执行环境
LMULm1本动画固定的寄存器组倍数
VLEN4096固定向量寄存器长度(bits)
VLMAX256m1 下的最大元素数
vstart0本动画不展示 prestart 元素
frmRNE扩宽转换精确;本环境固定有效 frm=RNE
FP stateFS enabledFS=Off 会触发非法指令;本动画固定展示 FS 已启用的架构路径
dest EEW32目标元素宽度
vta/vmata, ma尾部/非活动元素策略
opcode1010111OP-V 主操作码
vs101101VFUNARY0 转换选择字段
编码字段
0x48869257
31..26
25
24..20
19..15
14..12
11..7
6..0
010010
funct6
0
vm
01000
vs2
01101
vs1/sel
001
funct3
00100
vd
1010111
OP-V
执行数据路径

lane 0: fp32(0x3fc0) -> 1.5 / 0x3fc00000

显示的 lane 与当前步骤高亮同步;其余逐元素结果位于下方。

步骤 1 / 15
读取 OP-V 编码字段

V 扩展浮点指令使用 OP-V 主操作码,字段包含 funct6、源寄存器、vm、funct3、vd 和 opcode。

逐元素结果
长向量在模块内部横向滚动,不造成页面溢出。
i=0活动
fp32(0x3fc0)
1.5 / 0x3fc00000
i=1活动
fp32(0xc010)
-2.25 / 0xc0100000
i=2跳过
v0.t=0,不执行
--
i=3活动
fp32(0xc0c0)
-6 / 0xc0c00000
i=4活动
fp32(0x4100)
8 / 0x41000000
i=5活动
fp32(0xc120)
-10 / 0xc1200000
i=6跳过
v0.t=0,不执行
--
i=7活动
fp32(0xc1a0)
-20 / 0xc1a00000

教学环境固定 SEW=16、LMUL=m1、VLEN=4096、VLMAX=256、vstart=0、合法 vtype、VS/FS 已启用及有效 frm。BF16 源占单寄存器,FP32 目标占偶数 vd..vd+1;合法重叠只能在目标组高端。数值输入先表示为 FP32,再以 RNE 表示为 BF16,最后精确加宽;原始位模式直接作为 BF16 输入。不同 EEW 的合法重叠强制 mask/tail agnostic。非活动及尾元素不显示确定值;VL=0 不更新任何目标元素。NaN、无穷、fflags 和处理器周期不在模型范围。超出有限结果范围只表示演示限制,不表示非法指令。

SEW=16,source EEW=16 / BF16 -> destination EEW=32 / FP32。BF16 到 FP32 是精确加宽;普通数和无穷的 BF16 编码左移 16 位并把低 16 位写 0。

快速理解与检索要点

这是 RVV BF16 的 BF16 -> FP32 精确加宽转换:语法只有 vd、vs2、vm;SEW 固定为 16,vs1[19:15]=01101 是 VFUNARY0 selector。

OP-V 编码:funct6=010010,vs1/selector=01101,funct3=001(OPFVV),opcode=1010111。
官方保留编码:SEW 为任何非 16 值时保留。
源元素 EEW=16 BF16,目标元素 EEW=32 FP32;活动元素受 vl 和 v0.t 掩码控制。
加宽为精确转换;普通数和无穷的 BF16 编码左移 16 位且 FP32 低 16 位写 0。
本页动画展示 BF16 原始 16 位模式到 FP32 值和 32 位编码的对应关系。
vm=0 时仅 v0.t 为 1 的 body 元素执行;省略掩码操作数表示 vm=1。vl=0 不更新任何目标元素。

向量执行上下文

body 元素满足 vstart≤i<vl;其中掩码允许的元素才执行转换。vstart≥vl(含 vl=0)时所有目标元素不变。SEW 固定为 16,LMUL 决定寄存器组大小,vta/vma 决定 tail/inactive 策略。

The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture — Version 20260120, Chapter 31

常见使用场景

向量运算

启用 Zvfbfmin 与向量/浮点状态,SEW=16、LMUL=m1、VLEN=128、vl=1、vstart=0、frm=RNE,无掩码:v8[0]=BF16 0x3FC0 → v4[0]=1.5 (FP32 0x3FC00000);其余目标元素按 tail policy 处理。

机器学习

启用 Zvfbfmin 与向量/浮点状态,SEW=16、LMUL=m1、VLEN=128、vl=1、vstart=0、frm=RNE,无掩码:v8[0]=BF16 0x3FC0 → v4[0]=1.5 (FP32 0x3FC00000);其余目标元素按 tail policy 处理。

使用前检查清单

语法检查
  • 语法为 vfwcvtbf16.f.f.v vd, vs2[, v0.t];vd、vs2 选择 v0–v31 向量组的最低编号寄存器;没有浮点标量源或立即数。
  • 32 位 OP-V:funct6=010010、bits19:15=01101(固定 VFUNARY0 选择子)、funct3=001、opcode=1010111;vm=0 使用 v0.t,省略掩码为 vm=1。
语义检查
  • 需 Zvfbfmin(依赖 Zve32f)、启用向量/浮点状态和合法 vtype;仅 SEW=16 合法。vs2 是 EEW=16、EMUL=LMUL 的 BF16 源;vd 是 EEW=32、EMUL=2*LMUL 的 FP32 目标,转换精确。
  • 组起点按 EMUL 对齐,最大 EMUL≤8;窄化重叠须同最低寄存器,加宽重叠须源 EMUL≥1 且同最高寄存器。masked vd 不含 v0,v0 不可同时供 mask 和数据;不同 EEW 的合法源/目标重叠强制 mask/tail agnostic。
  • 只执行掩码允许的 vstart≤i<vl 元素;非活动/尾部按策略处理,不保证清零。vstart≥vl(含 vl=0)不更新任何目标元素。无效 frm 的使用始终保留,即使转换精确或没有活动元素。

容易混淆 / 常见误区

SEW 必须为 16;其他 SEW 编码为保留编码。
源 vs2 元素 EEW 为 16 位 BF16,目标 vd 元素 EEW 为 32 位 FP32。
BF16 到 FP32 是精确加宽,不使用 frm 舍入。
该指令不是 BF16 算术,只是格式转换。
可能设置 Invalid,例如 signaling NaN;有限数、普通数、subnormal 和 infinity 的精确加宽不需要舍入,也不产生 OF、UF 或 NX。

常见问题

这些向量 BF16 指令是否支持任意 SEW?

不支持。官方 BF16 向量指令在 SEW 不是 16 时为保留编码;本页动画固定 SEW=16。

BF16 是否等同于 IEEE binary16?

不是。BF16 是 1 位符号、8 位指数、7 位 fraction;它与半精度 binary16 的指数和 fraction 位宽不同。

VFWCVTBF16.F.F.V 的结果是否受 frm 舍入影响?

不影响。BF16 到 FP32 是精确加宽转换,不按 frm 舍入;但向量浮点指令仍要求有效 frm,即使 vl=0 或没有活动元素。