vshr
功能说明
每个元素进行 shrDistance 位数的右移操作,其中 int16 和 int32 采用算术右移,uint16 和 uint32 采用逻辑右移。int16 和 uint16 类型要求 shrDistance ≤ 16,int32 和 uint32 类型要求 shrDistance ≤ 32。对于 int16 和 int32 类型语义如下:
if (round == 1)
if (src_ele[i][shrDistance - 1] == 1) // src_ele[i][shrDistance - 1] 指的是 src_ele 向量中第 i 维元素的第 shrDistance - 1 个二进制位
dst_ele[i] = arithmetic_right_shift(src_ele[i], shrDistance) + 1
else
dst_ele[i] = arithmetic_right_shift(src_ele[i], shrDistance)
else:
dst_ele[i] = arithmetic_right_shift(src_ele[i], shrDistance) 对于 uint16 和 uint32 类型,round 不生效,语义如下:
dst_ele[i] = logic_right_shift(src_ele[i], shrDistance)
以 block(32Byte)为单位完成计算,一次完成8个block 的计算。
该接口支持通过MASK控制哪些元素参与计算。
接口原型
// 不同原型区别在于源地址和目的地址的数据类型不同。 void vshr(__ubuf__ int16_t *dst, __ubuf__ int16_t *src, int32_t shrDistance, uint8_t repeat, uint16_t dstBlockStride, uint16_t srcBlockStride, uint16_t dstRepeatStride, uint16_t srcRepeatStride, bool round); void vshr(__ubuf__ int32_t *dst, __ubuf__ int32_t *src, int32_t shrDistance, uint8_t repeat, uint16_t dstBlockStride, uint16_t srcBlockStride, uint16_t dstRepeatStride, uint16_t srcRepeatStride, bool round); void vshr(__ubuf__ uint16_t *dst, __ubuf__ uint16_t *src, uint32_t shrDistance, uint8_t repeat, uint16_t dstBlockStride, uint16_t srcBlockStride, uint16_t dstRepeatStride, uint16_t srcRepeatStride, bool round); void vshr(__ubuf__ uint32_t *dst, __ubuf__ uint32_t *src, uint32_t shrDistance, uint8_t repeat, uint16_t dstBlockStride, uint16_t srcBlockStride, uint16_t dstRepeatStride, uint16_t srcRepeatStride, bool round);
参数说明
参数含义见 表2 双目运算参数说明。
流水类型
PIPE_V
父主题: 双目运算