昇腾社区首页
中文
注册
开发者
下载

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