vec_sel

功能说明

根据sel的比特位值选取element,当sel的比特位是1时从src0中选取,比特位是0时从src1选取,选取后的结果记为dst_temp,然后根据mask值对dst_temp进行过滤,有效位填入最终的dst,无效位则保持dst原始值。

例如:src0为[1,2,3,4,5,6,7,8],src1为[9,10,11,12,13,14,15,16],sel为[0,0,0,0,1,1,1,1],mask为[1,1,1,1,0,0,0,0],dst原始值为[-1,-2,-3,-4,-5,-6,-7,-8],则根据sel的比特位选取后的结果dst_temp为:[9,10,11,12,5,6,7,8],然后再根据mask进行过滤,dst的最终输出结果为[9,10,11,12,-5,-6,-7,-8]。

函数原型

vec_sel(mask, mode, dst, sel, src0, src1, repeat_times, dst_rep_stride=0, src0_rep_stride=0, src1_rep_stride=0)

PIPE:Vector

参数说明

表1 参数说明

参数名称

输入/输出

含义

mask

输入

请参考表1中mask参数描述。

mode

输入

指令模式,支持0~2共3种模式;

0 -> 根据sel的值对两个tensor进行选取,支持多次迭代,每次迭代均依据sel的前128(目的操作数为float16类型)/64(目的操作数为float32类型)个bit位;

1 -> 根据sel中的逐个bit,对一个tensor与一个标量进行选取,支持多次迭代;

2 -> 根据sel中的逐个bit,对两个tensor的进行选取,支持多次迭代;

Atlas 200/300/500 推理产品,仅支持mode=0。

Atlas 训练系列产品,仅支持mode=0。

dst

输出

目的操作数,tensor起始element。

Tensor的scope为Unified Buffer

Atlas 200/300/500 推理产品,支持的数据类型为:Tensor(float16)。

Atlas 训练系列产品,支持的数据类型为:Tensor(float16/float32)。

Atlas推理系列产品AI Core,支持的数据类型为:Tensor(float16/float32)。

Atlas推理系列产品Vector Core,支持的数据类型为:Tensor(float16/float32)。

Atlas A2训练系列产品,dst/src0/src1支持的数据类型为:Tensor(float16/float32)。

sel

输入

选取mask,每个bit表示1个element的选取,当sel的比特位是1时从src0中选取,比特位是0时从src1选取。

mode配置为0/1/2时sel均传入tensor,支持的数据类型为:Tensor(uint8/uint16/uint32/uint64)。

  • mode为0时,多次迭代都是读取sel的前128(目的操作数为float16类型)/64(目的操作数为float32类型)个bit位,具体请参考调用示例。
  • mode为1/2时,多次迭代连续消耗。

src0

输入

源操作数0,tensor起始element。

Tensor的scope为Unified Buffer

注:src0,src1数据类型应与dst保持一致。

src1

输入

源操作数1,tensor起始element。

Tensor的scope为Unified Buffer

模式0/2应配置为tensor;模式1应配置为Scalar/立即数(int, float);

注:src0,src1数据类型应与dst保持一致。

repeat_times

输入

重复迭代次数。

dst_rep_stride

输入

相邻迭代间,目的操作数相同block地址步长。

src0_rep_stride

输入

相邻迭代间,源操作数0相同block地址步长。

src1_rep_stride

输入

相邻迭代间,源操作数1相同block地址步长。

注:模式1时无效。

返回值

支持的型号

Atlas 200/300/500 推理产品

Atlas 训练系列产品

Atlas推理系列产品AI Core

Atlas推理系列产品Vector Core

Atlas A2训练系列产品

注意事项

调用示例