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

RISC-V VFREDOSUM.VS 指令详解

指令手册OPFVV

在 vl>0 时,将 vs1[0] 与 vs2 的活动元素作浮点有序求和归约,结果写入 vd[0]。

指令语法

vfredosum.vs vd, vs2, vs1, vm
操作数说明
vs2 是 SEW 宽源向量寄存器组;结果在 vd[0],其余目标元素按 vta 作为尾部处理,vma 不控制标量结果。目标可与源及 v0 掩码重叠。
vs1[0] 是始终参与的 SEW 宽标量初值,vd[0] 是单向量寄存器中的结果,不随 LMUL 扩成寄存器组。非零 vstart 触发非法指令异常。
vm 是汇编记法中的可选 v0.t:省略表示 vm=1;写 v0.t 表示 vm=0,只选择活动 vs2 元素。源不能同时以 EEW=1 掩码和 SEW 数据读取同一寄存器。
vl=0 不更新目标。vl>0 且全部元素被掩码关闭时,原样复制初值,不规范化 NaN 或设置异常标志。
V 1.0 可用于 RV32/RV64,包含 FP32/FP64 并依赖 F/D;SEW=16 算术需要 Zvfh。需要合法 vtype、支持的元素宽度、VS/FS 已启用和有效 frm;无效 frm 的使用保留,即使 vl=0。vxrm 不控制这些浮点操作。
V向量归约浮点

指令行为说明

VFREDOSUM.VS 按元素顺序逐次相加,每次加法按动态 frm 舍入。标量初值始终参与,即使所有向量元素都被掩码关闭;但 vl=0 时目标不更新。目标的其余元素按 vta 作为尾部处理。V 包含 FP32/FP64 支持及 F/D 依赖,SEW=16 算术需要 Zvfh。

VFREDOSUM.VS 归约动画

固定 SEW=32、LMUL=m1、VLEN=4096、vstart=0、frm=RNE、合法 vtype 与 VS/FS 已启用。输入先表示为 FP32,每次加法再以 RNE 舍入到 FP32;有限结果之外及异常标志不计算。空元素列表明确表示 vl=0。目标允许与源及 v0 重叠。

步骤 1/5

OP-V 编码:funct6=000011,funct3=001,vm=0。

v0-v31

single-width source

scalar seed in element 0

finite FP32; RNE

finite FP32 values; empty = vl=0

one bit per value

funct6
000011
vm
0
vs2
01000
vs1
01100
funct3
001
vd
00100
opcode
1010111

hex: 0c861257

写回

v4[0] = 8

快速理解与检索要点

在 vl>0 时,将 vs1[0] 与 vs2 的活动元素作浮点有序求和归约,结果写入 vd[0]。

OP-V:funct6=000011,funct3=001;vs1 编码向量寄存器中的标量初值。
vm=0 以 v0.t 选择 vs2 活动元素;vm=1 不使用掩码。vs1[0] 不受掩码筛选。
vl>0 时结果在 vd[0];其余目标元素只按 vta 尾部策略处理,vma 不控制归约结果。
vl=0 不更新目标;非零 vstart 触发非法指令异常。
按元素顺序逐次相加,每次加法按动态 frm 舍入。
V 支持 FP32/FP64;SEW=16 需要 Zvfh。有效 frm 是执行前提,vxrm 不控制这些浮点操作。

向量执行上下文

vs2 是 SEW 宽源向量寄存器组;结果在 vd[0],其余目标元素按 vta 作为尾部处理,vma 不控制标量结果。目标可与源及 v0 掩码重叠。

vs1[0] 是始终参与的 SEW 宽标量初值,vd[0] 是单向量寄存器中的结果,不随 LMUL 扩成寄存器组。非零 vstart 触发非法指令异常。

vm 是汇编记法中的可选 v0.t:省略表示 vm=1;写 v0.t 表示 vm=0,只选择活动 vs2 元素。源不能同时以 EEW=1 掩码和 SEW 数据读取同一寄存器。

vl=0 不更新目标。vl>0 且全部元素被掩码关闭时,原样复制初值,不规范化 NaN 或设置异常标志。

V 1.0 可用于 RV32/RV64,包含 FP32/FP64 并依赖 F/D;SEW=16 算术需要 Zvfh。需要合法 vtype、支持的元素宽度、VS/FS 已启用和有效 frm;无效 frm 的使用保留,即使 vl=0。vxrm 不控制这些浮点操作。

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

常见使用场景

向量求和

假定 V/VS/FS 已启用、合法 vtype、frm=RNE、e32,m1 可用、VLMAX≥4、x10=4;vsetvli 后 vl=4、vstart=0。输入为 binary32,f0 若使用则在 FLEN=64 下有效 NaN-boxed。示例未掩码:v3[0]=0, v2=[1,2,3,4] → v1[0]=10。尾部按 ta 处理,不假定清零。

点积

假定 V/VS/FS 已启用、合法 vtype、frm=RNE、e32,m1 可用、VLMAX≥4、x10=4;vsetvli 后 vl=4、vstart=0。输入为 binary32,f0 若使用则在 FLEN=64 下有效 NaN-boxed。示例未掩码:v3[0]=0, v2=[1,2,3,4] → v1[0]=10。尾部按 ta 处理,不假定清零。

使用前检查清单

语法检查
  • vs2 是 SEW 宽源向量寄存器组;结果在 vd[0],其余目标元素按 vta 作为尾部处理,vma 不控制标量结果。目标可与源及 v0 掩码重叠。
  • vs1[0] 是始终参与的 SEW 宽标量初值,vd[0] 是单向量寄存器中的结果,不随 LMUL 扩成寄存器组。非零 vstart 触发非法指令异常。
语义检查
  • vm 是汇编记法中的可选 v0.t:省略表示 vm=1;写 v0.t 表示 vm=0,只选择活动 vs2 元素。源不能同时以 EEW=1 掩码和 SEW 数据读取同一寄存器。
  • vl=0 不更新目标。vl>0 且全部元素被掩码关闭时,原样复制初值,不规范化 NaN 或设置异常标志。
  • V 1.0 可用于 RV32/RV64,包含 FP32/FP64 并依赖 F/D;SEW=16 算术需要 Zvfh。需要合法 vtype、支持的元素宽度、VS/FS 已启用和有效 frm;无效 frm 的使用保留,即使 vl=0。vxrm 不控制这些浮点操作。

容易混淆 / 常见误区

归约的标量初值为 vs1[0];结果为 vd[0],其余目标元素是尾部,不能假定保持不变。
vl=0 不复制初值;vl>0 且没有活动元素时原样复制 vs1[0],不规范化 NaN 或设置异常标志。
vstart 非零会触发非法指令异常;目标可与源及 v0 掩码重叠。
按元素顺序逐次相加,每次加法按动态 frm 舍入。

常见问题

没有活动元素或 vl=0 时会写回初值吗?

vl>0 且没有活动元素时,原样复制 vs1[0] 到 vd[0],不规范化 NaN 或设置异常标志。vl=0 时不更新目标。