归约指令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