VFWREDUSUM.VS 的结果是否可重复?
给定 vtype 和 vl,树结构必须确定;但 ISA 允许不同实现选择不同树和中间精度,结果不保证跨实现一致。有序语义用 VFWREDOSUM.VS。
将活动的 SEW 宽 vs2 浮点元素提升到 2*SEW,以宽 vs1[0] 为初值做无序归约求和;只有宽 vd[0] 承载归约结果,其余目标元素为 tail。
扩展条件:V 1.0,RV32/RV64;要求受支持的浮点格式、合法 vtype、VS/FS 已启用。标准 V 支持 SEW=32 到 FP64;不保证 SEW=64 到 FP128。
VFWREDUSUM.VS 是 RVV 的拓宽无序浮点归约求和。它将 vl 内活动的窄 vs2 元素提升到 2*SEW,并与宽 vs1[0] 放入 ISA 允许的确定性归约树;只有宽 vd[0] 承载归约结果,其他目标元素是按当前 tail policy 管理的 tail。vl=0 时不执行操作且不更新目标。该 ISA 不规定唯一树、每个节点的统一中间精度或唯一数值结果;需要按元素升序的语义时使用 VFWREDOSUM.VS。
可核验的 FP32 到 FP64 归约示例;固定合法 vtype、VS/FS 已启用、有效 frm=RNE、ta,输入先表示为 FP32、宽初值为 FP64,每次加法按 RNE 舍入为 FP64。非有限输入/结果和异常标志不在模型内;教学步骤不是处理器周期。
宽标量结果:任意 v0-v31 的元素 0
SEW 窄源;不能和宽 vs1 使用同一寄存器
宽初值:任意寄存器的元素 0;掩码时不能为 v0
非空有限 FP64 示例值
恰好 4 个可表示为有限 FP32 的值
恰好 4 个 0/1 位
0xc4861257活动且已提升的元素:1, 3, 4
归约过程:
写回
v4[0] = 9
这是一个合法示例树,不是 ISA 唯一规定的归约结果。
显示 OP-V 指令编码;非法输入不会产生编码。
VFWREDUSUM.VS 用一个合法的无序归约树,将提升后的活动 vs2 元素与宽 vs1[0] 合并;归约结果在宽 vd[0],其他目标元素为 tail,且树不是 ISA 唯一规定的形式。
语法 vfwredusum.vs vd, vs2, vs1[, v0.t];32 位 OP-V:opcode=1010111, funct3=001, funct6=110001。
vs2 的 EEW=SEW、EMUL=LMUL;vs1[0] 和 vd[0] 为 2×SEW 宽,分别是任意单个向量寄存器的元素 0(EMUL=1),不要求偶数起点。目标可以与源和 v0 重叠;源不能以不同 EEW 读取同一寄存器。
将宽 vs1[0] 与已提升的活动源放入归约树;节点精度/范围至少为 2×SEW 格式,按动态 frm 舍入,最终舍入到 2×SEW。树对给定 vtype/vl 必须确定,但跨实现不保证相同结果;允许附加加法单位元(RDN 为 +0,其余为 -0)。无活动源时允许传播或 canonicalize NaN,并可对 sNaN 置 NV。
省略 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/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 处理,不保证清零。
给定 vtype 和 vl,树结构必须确定;但 ISA 允许不同实现选择不同树和中间精度,结果不保证跨实现一致。有序语义用 VFWREDOSUM.VS。
vm=0 时用 v0 选择活动源元素,vm=1 时所有 body 源元素都参与;掩码关闭源元素被排除,而 vd[0] 之外的目标元素是 tail,遵循 tail policy。