首页/指令库/VFWREDOSUM-VS
VFWREDOSUM.VS

RISC-V VFWREDOSUM.VS 指令详解

指令手册OPFVV

按活动元素的升序将 SEW 宽 vs2 元素提升为 2*SEW 后求和;宽 vs1[0] 是初值,只有宽 vd[0] 承载归约结果,其余目标元素为 tail。

指令语法

vfwredosum.vs vd, vs2, vs1[, v0.t]
操作数说明
语法 vfwredosum.vs vd, vs2, vs1[, v0.t];32 位 OP-V:opcode=1010111, funct3=001, funct6=110011。
vs2 的 EEW=SEW、EMUL=LMUL;vs1[0] 和 vd[0] 为 2×SEW 宽,分别是任意单个向量寄存器的元素 0(EMUL=1),不要求偶数起点。目标可以与源和 v0 重叠;源不能以不同 EEW 读取同一寄存器。
从宽 vs1[0] 开始,将活动 vs2 元素提升后按索引升序逐次相加,每次按动态 frm 舍入到宽格式。vl>0 而无活动源元素时原样复制初值,不 canonicalize NaN、不设置异常。
省略 v0.t 为 vm=1,写出为 vm=0;掩码关闭源不产生浮点异常,活动异常累积到 fflags。同一寄存器不能同时作为 EEW=1 掩码与不同 EEW 数据源。初值始终参与,不受掩码位0控制;非零 vstart 为非法指令。vl=0 不更新目标,也不复制初值;其余目标元素为 tail,仅由 vta 处理。ta/ma 不保证清零;成功执行复位 vstart=0。
V 1.0 适用于 RV32/RV64,依赖 F/D;要求受支持的格式、合法 vtype、VS/FS 已启用。H 且虚拟化 V=1 时 vsstatus.VS/FS 也须启用。无效 frm 的使用保留(包括 vl=0),vxrm 不参与。动画固定 SEW=32、LMUL=m1、VLEN=4096、vstart=0、RNE 和有限输入,不完整模拟 NaN、无穷或 fflags。
V向量归约浮点

扩展条件:V 1.0,RV32/RV64;要求受支持的浮点格式、合法 vtype、VS/FS 已启用。标准 V 支持 SEW=32 到 FP64;不保证 SEW=64 到 FP128。

指令行为说明

VFWREDOSUM.VS 是 RVV 的拓宽有序浮点归约求和。它把 vl 内活动的 vs2 浮点元素从 SEW 提升到 2*SEW,并从宽 vs1[0] 开始按元素编号升序相加;只有宽 vd[0] 承载归约结果,其他目标元素是按当前 tail policy 管理的 tail。掩码关闭的元素不影响结果或浮点异常标志。vl=0 时不执行操作且不更新目标;vl 非零而没有活动源元素时不做加法,初值写入 vd[0]。

VFWREDOSUM.VS 指令解析与执行动画

可核验的 FP32 到 FP64 归约示例;固定合法 vtype、VS/FS 已启用、有效 frm=RNE、ta,输入先表示为 FP32、宽初值为 FP64,每次加法按 RNE 舍入为 FP64。非有限输入/结果和异常标志不在模型内;教学步骤不是处理器周期。

输入的指令

宽标量结果:任意 v0-v31 的元素 0

SEW 窄源;不能和宽 vs1 使用同一寄存器

宽初值:任意寄存器的元素 0;掩码时不能为 v0

执行环境
SEW
32 (FP32)
reduction EEW
64 (FP64)
frm
RNE demo
LMUL
m1
VLEN
4096
vstart
0

非空有限 FP64 示例值

恰好 4 个可表示为有限 FP32 的值

恰好 4 个 0/1 位

active lanes
3
编码字段
0xcc861257
funct6
110011
vm
0
vs2
01000
vs1
01100
funct3
001
vd
00100
opcode
1010111
数据路径与结果

活动且已提升的元素:1, 3, 4

归约过程:

  1. 1 + 1 = 2
  2. 2 + 3 = 5
  3. 5 + 4 = 9

写回

v4[0] = 9

按活动元素的升序执行此演示。

步骤 1/5

显示 OP-V 指令编码;非法输入不会产生编码。

快速理解与检索要点

VFWREDOSUM.VS 把窄 vs2 元素提升后,按活动元素的升序从宽 vs1[0] 开始求和;归约结果在宽 vd[0],其他目标元素为 tail。

vs2 为 SEW 宽向量组;vs1[0]/vd[0] 为 2*SEW 宽单寄存器标量(EMUL=1),可用任意寄存器,不要求偶数起点。目标可与源及 v0 重叠。
同一寄存器不能以不同源 EEW 读取,掩码源 EEW=1;因此宽初值与窄源不能共用寄存器,使用 v0.t 时两种数据源都不能为 v0。
32 位 OP-V:opcode=1010111、funct3=001、funct6=110011;语法为 vd, vs2, vs1[, v0.t]。
仅活动 vs2 元素参与,宽初值始终参与;其余目标元素为 tail,仅按 vta 处理。vl=0 不更新目标,不复制初值;非零 vstart 为非法指令。
每次宽加法使用动态 frm,活动异常累积到 fflags;无效 frm 的使用保留(包括 vl=0),vxrm 不参与。
有序形式按活动元素索引升序相加;vl>0 且无活动源时原样复制初值,不 canonicalize NaN、不设置异常。

向量执行上下文

语法 vfwredosum.vs vd, vs2, vs1[, v0.t];32 位 OP-V:opcode=1010111, funct3=001, funct6=110011。

vs2 的 EEW=SEW、EMUL=LMUL;vs1[0] 和 vd[0] 为 2×SEW 宽,分别是任意单个向量寄存器的元素 0(EMUL=1),不要求偶数起点。目标可以与源和 v0 重叠;源不能以不同 EEW 读取同一寄存器。

从宽 vs1[0] 开始,将活动 vs2 元素提升后按索引升序逐次相加,每次按动态 frm 舍入到宽格式。vl>0 而无活动源元素时原样复制初值,不 canonicalize NaN、不设置异常。

省略 v0.t 为 vm=1,写出为 vm=0;掩码关闭源不产生浮点异常,活动异常累积到 fflags。同一寄存器不能同时作为 EEW=1 掩码与不同 EEW 数据源。初值始终参与,不受掩码位0控制;非零 vstart 为非法指令。vl=0 不更新目标,也不复制初值;其余目标元素为 tail,仅由 vta 处理。ta/ma 不保证清零;成功执行复位 vstart=0。

V 1.0 适用于 RV32/RV64,依赖 F/D;要求受支持的格式、合法 vtype、VS/FS 已启用。H 且虚拟化 V=1 时 vsstatus.VS/FS 也须启用。无效 frm 的使用保留(包括 vl=0),vxrm 不参与。动画固定 SEW=32、LMUL=m1、VLEN=4096、vstart=0、RNE 和有限输入,不完整模拟 NaN、无穷或 fflags。

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

常见使用场景

拓宽有序浮点求和

假定 V/VS/FS 已启用、合法 e32,m1、所需格式受支持、frm=RNE、VLMAX≥4、a0=4;vsetvli 后 vl=4、vstart=0。v0.t 选择 lane 0、2、3,初值始终参与;v12[0](binary64)=1, v8(binary32)=[1,2,3,4], v0 mask=1011 → v4[0](binary64)=9。tail 按 ta 处理,不保证清零。

使用前检查清单

语法检查
  • 语法 vfwredosum.vs vd, vs2, vs1[, v0.t];32 位 OP-V:opcode=1010111, funct3=001, funct6=110011。
  • vs2 的 EEW=SEW、EMUL=LMUL;vs1[0] 和 vd[0] 为 2×SEW 宽,分别是任意单个向量寄存器的元素 0(EMUL=1),不要求偶数起点。目标可以与源和 v0 重叠;源不能以不同 EEW 读取同一寄存器。
语义检查
  • 从宽 vs1[0] 开始,将活动 vs2 元素提升后按索引升序逐次相加,每次按动态 frm 舍入到宽格式。vl>0 而无活动源元素时原样复制初值,不 canonicalize NaN、不设置异常。
  • 省略 v0.t 为 vm=1,写出为 vm=0;掩码关闭源不产生浮点异常,活动异常累积到 fflags。同一寄存器不能同时作为 EEW=1 掩码与不同 EEW 数据源。初值始终参与,不受掩码位0控制;非零 vstart 为非法指令。vl=0 不更新目标,也不复制初值;其余目标元素为 tail,仅由 vta 处理。ta/ma 不保证清零;成功执行复位 vstart=0。
  • V 1.0 适用于 RV32/RV64,依赖 F/D;要求受支持的格式、合法 vtype、VS/FS 已启用。H 且虚拟化 V=1 时 vsstatus.VS/FS 也须启用。无效 frm 的使用保留(包括 vl=0),vxrm 不参与。动画固定 SEW=32、LMUL=m1、VLEN=4096、vstart=0、RNE 和有限输入,不完整模拟 NaN、无穷或 fflags。

容易混淆 / 常见误区

有序形式按 vs1[0]、随后活动 vs2[0] 到 vs2[vl-1] 相加;不要把它表示成实现可任意重排的树。
vs2 是 SEW 宽,vs1[0]、vd[0] 和每次累加均为 2*SEW 宽;仅 vd[0] 承载归约结果。
vm=0 时掩码关闭元素既不参与求和,也不设置浮点异常标志。

常见问题

这些浮点指令使用 vxrm 吗?

不使用。普通 RVV 浮点运算和浮点转换使用浮点舍入模式 frm 或指令指定的固定舍入;vxrm 用于定点舍入指令。