其他分享
首页 > 其他分享> > 归约指令Reduction Instructions

归约指令Reduction Instructions

作者:互联网

归约指令Reduction Instructions


归约指令的操作上一个是向量1中的元素0,另外一个是向量2,所以指令的后缀缩写为.vs,其实相当于一个标量加上向量2中的所有元素。

1、整数单宽度归约指令

所有操作数和单宽度缩减指令的结果都具有相同的 SEW 宽度。

# Simple reductions, where [*] denotes all active elements:
 vredsum.vs vd, vs2, vs1, vm # vd[0] = sum( vs1[0] , vs2[*] )
 vredmaxu.vs vd, vs2, vs1, vm # vd[0] = maxu( vs1[0] , vs2[*] )
 vredmax.vs vd, vs2, vs1, vm # vd[0] = max( vs1[0] , vs2[*] )
 vredminu.vs vd, vs2, vs1, vm # vd[0] = minu( vs1[0] , vs2[*] )
 vredmin.vs vd, vs2, vs1, vm # vd[0] = min( vs1[0] , vs2[*] )
 vredand.vs vd, vs2, vs1, vm # vd[0] = and( vs1[0] , vs2[*] )
 vredor.vs vd, vs2, vs1, vm # vd[0] = or( vs1[0] , vs2[*] )
 vredxor.vs vd, vs2, vs1, vm # vd[0] = xor( vs1[0] , vs2[*] )

2、整数加宽归约指令

无符号 vwredsumu.vs 指令在对 SEW 宽的向量元素求和之前将其扩展为零,然后加上2 SEW 宽度标量元素,并将结果存储在 2SEW 宽度标量元素中。
vwredsum.vs 指令对 SEW 宽的向量元素求和之前将其符号扩展。

# Unsigned sum reduction into double-width accumulator
 vwredsumu.vs vd, vs2, vs1, vm # 2*SEW = 2*SEW + sum(zero-extend(SEW))
# Signed sum reduction into double-width accumulator
 vwredsum.vs vd, vs2, vs1, vm # 2*SEW = 2*SEW + sum(sign-extend(SEW))

3、浮点单宽度归约指令

浮点单宽度,即单精度浮点,
浮点的归约操作:

# Simple reductions.
 vfredosum.vs vd, vs2, vs1, vm # Ordered sum
 vfredusum.vs vd, vs2, vs1, vm # Unordered sum
 vfredmax.vs vd, vs2, vs1, vm # Maximum value
 vfredmin.vs vd, vs2, vs1, vm # Minimum value

有序求和:

 vd[0] = `(((vs1[0] + vs2[0]) + vs2[1]) + ...) + vs2[vl-1]`

4、浮点加宽归约指令

浮点加宽,即双精度浮点。读取和写入均是双倍宽度结果。

 # Simple reductions.
 vfwredosum.vs vd, vs2, vs1, vm # Ordered sum
 vfwredusum.vs vd, vs2, vs1, vm # Unordered sum

标签:vs1,vs2,vd,Reduction,vm,归约,vs,Instructions
来源: https://blog.csdn.net/weixin_42454243/article/details/123620929