昇腾社区首页
中文
注册

vshr

功能说明

以block(32Byte) 为单位完成以下计算,一次完成8个block的计算。每个元素进行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) 
        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)

函数原型

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);

流水类型

PIPE_V