asc.language.basic.select
- asc.language.basic.select(dst: LocalTensor, sel_mask: LocalTensor, src0: LocalTensor, src1: float, sel_mode: SelMode, count: int) None
- asc.language.basic.select(dst: LocalTensor, sel_mask: LocalTensor, src0: LocalTensor, src1: LocalTensor, sel_mode: SelMode, count: int) None
- asc.language.basic.select(dst: LocalTensor, sel_mask: LocalTensor, src0: LocalTensor, src1: float, sel_mode: SelMode, mask: List[int], repeat_times: int, repeat_params: BinaryRepeatParams, is_set_mask: bool = True) None
- asc.language.basic.select(dst: LocalTensor, sel_mask: LocalTensor, src0: LocalTensor, src1: float, sel_mode: SelMode, mask: int, repeat_times: int, repeat_params: BinaryRepeatParams, is_set_mask: bool = True) None
- asc.language.basic.select(dst: LocalTensor, sel_mask: LocalTensor, src0: LocalTensor, repeat_times: int, repeat_params: BinaryRepeatParams) None
- asc.language.basic.select(dst: LocalTensor, sel_mask: LocalTensor, src0: LocalTensor, src1: LocalTensor, sel_mode: SelMode, mask: List[int], repeat_times: int, repeat_params: BinaryRepeatParams, is_set_mask: bool = True) None
- asc.language.basic.select(dst: LocalTensor, sel_mask: LocalTensor, src0: LocalTensor, src1: LocalTensor, sel_mode: SelMode, mask: int, repeat_times: int, repeat_params: BinaryRepeatParams, is_set_mask: bool = True) None
- asc.language.basic.select(dst: LocalTensor, src0: LocalTensor, src1: LocalTensor, repeat_times: int, repeat_params: BinaryRepeatParams, sel_mode: SelMode) None
给定两个源操作数src0和src1,根据sel_mask(用于选择的Mask掩码)的比特位值选取元素,得到目的操作数dst。
对应的Ascend C函数原型
template <typename T, typename U> __aicore__ inline void Select(const LocalTensor<T>& dst, const LocalTensor<U>& selMask, const LocalTensor<T>& src0, T src1, SELMODE selMode, uint32_t count)
template <typename T, typename U> __aicore__ inline void Select(const LocalTensor<T>& dst, const LocalTensor<U>& selMask, const LocalTensor<T>& src0, const LocalTensor<T>& src1, SELMODE selMode, uint32_t count)
template <typename T, typename U, bool isSetMask = true> __aicore__ inline void Select(const LocalTensor<T>& dst, const LocalTensor<U>& selMask, const LocalTensor<T>& src0, T src1, SELMODE selMode, uint64_t mask[], uint8_t repeatTime, const BinaryRepeatParams& repeatParams)
template <typename T, typename U, bool isSetMask = true> __aicore__ inline void Select(const LocalTensor<T>& dst, const LocalTensor<U>& selMask, const LocalTensor<T>& src0, T src1, SELMODE selMode, uint64_t mask, uint8_t repeatTime, const BinaryRepeatParams& repeatParams)
template <typename T, typename U> __aicore__ inline void Select(const LocalTensor<T>& dst, const LocalTensor<U>& selMask, const LocalTensor<T>& src0, uint8_t repeatTime, const BinaryRepeatParams& repeatParams)
template <typename T, typename U, bool isSetMask = true> __aicore__ inline void Select(const LocalTensor<T>& dst, const LocalTensor<U>& selMask, const LocalTensor<T>& src0, const LocalTensor<T>& src1, SELMODE selMode, uint64_t mask[], uint8_t repeatTime, const BinaryRepeatParams& repeatParams)
template <typename T, typename U, bool isSetMask = true> __aicore__ inline void Select(const LocalTensor<T>& dst, const LocalTensor<U>& selMask, const LocalTensor<T>& src0, const LocalTensor<T>& src1, SELMODE selMode, uint64_t mask, uint8_t repeatTime, const BinaryRepeatParams& repeatParams)
template <typename T, SELMODE selMode> __aicore__ inline void Select(const LocalTensor<T>& dst, const LocalTensor<T>& src0, const LocalTensor<T>& src1, uint8_t repeatTime, const BinaryRepeatParams& repeatParams)
参数说明
dst: 目的操作数。类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。
sel_mask: 选取mask,类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。
src0: 源操作数。类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。
src1: 源操作数。 - 当selMode为模式0或模式2时:类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。 - 当selMode为模式1时,类型为T,标量数据类型。
sel_mode: SELMODE类型,表示指令模式。 - VSEL_CMPMASK_SPR: 模式0,根据selMask在两个tensor中选取元素,selMask中有效数据的个数存在限制,具体取决于源操作数的数据类型。 - VSEL_TENSOR_SCALAR_MODE: 模式1,根据selMask在1个tensor和1个scalar标量中选取元素,selMask无有效数据限制。 - VSEL_TENSOR_TENSOR_MODE: 模式2,根据selMask在两个tensor中选取元素,selMask无有效数据限制。
count: 参与计算的元素个数。
mask: 用于控制每次迭代内参与计算的元素。
repeat_times: 重复迭代次数。
repeat_params: 控制操作数地址步长的参数。
is_set_mask: 是否在接口内部设置mask。
约束说明
操作数地址对齐要求请参见 《Ascend C算子开发接口》 中的“通用说明和约束-通用地址对齐约束”。
操作数地址重叠约束请参考 《Ascend C算子开发接口》 中的“通用说明和约束-通用地址重叠约束”。
对于模式1和模式2,使用时需要预留8K的Unified Buffer空间,作为接口的临时数据存放区。
调用示例
tensor 前 n 个数据计算样例(模式 0 / 模式 2)
asc.select( z_local, y_local, x_local, p_local, sel_mode=asc.SelMode.VSEL_CMPMASK_SPR, count=512 )
tensor 前 n 个数据计算样例(模式 1)
asc.select( z_local, y_local, x_local, 0.0, sel_mode=asc.SelMode.VSEL_TENSOR_SCALAR_MODE, count=512 )
tensor 高维切分计算样例 —— 标量 + mask 逐 bit(模式 1)
uint64_max = 2**64 - 1 mask = [uint64_max, uint64_max] params = asc.BinaryRepeatParams(1, 1, 1, 8, 8, 8) asc.select( z_local, y_local, x_local, 0.0, sel_mode=asc.SelMode.VSEL_TENSOR_SCALAR_MODE, mask=mask, repeat_times=1, repeat_params=params )
tensor 高维切分计算样例 —— 标量 + mask 连续(模式 1)
mask = 512 params = asc.BinaryRepeatParams(1, 1, 1, 8, 8, 8) asc.select( z_local, y_local, x_local, 0.0, sel_mode=asc.SelMode.VSEL_TENSOR_SCALAR_MODE, mask=mask, repeat_times=1, repeat_params=params )
tensor 高维切分计算样例 —— 不传入 mask(需配合寄存器 mask 使用,模式 1)
params = asc.BinaryRepeatParams(1, 1, 1, 8, 8, 8) asc.select( z_local, y_local, x_local, repeat_times=1, repeat_params=params )
tensor 高维切分计算样例 —— Tensor + mask 逐 bit(模式 0 / 模式 2)
uint64_max = 2**64 - 1 mask = [uint64_max, uint64_max] params = asc.BinaryRepeatParams(1, 1, 1, 8, 8, 8) asc.select( z_local, y_local, x_local, p_local, sel_mode=asc.SelMode.VSEL_CMPMASK_SPR, mask=mask, repeat_times=1, repeat_params=params )
tensor 高维切分计算样例 —— Tensor + mask 连续(模式 0 / 模式 2)
mask = 512 params = asc.BinaryRepeatParams(1, 1, 1, 8, 8, 8) asc.select( z_local, y_local, x_local, p_local, sel_mode=asc.SelMode.VSEL_CMPMASK_SPR, mask=mask, repeat_times=1, repeat_params=params )
tensor 高维切分计算样例 —— 寄存器版本(无 selMask,模式 0 / 模式 2)
params = asc.BinaryRepeatParams(1, 1, 1, 8, 8, 8) asc.select( z_local, x_local, p_local, repeat_times=1, repeat_params=params, sel_mode=asc.SelMode.VSEL_CMPMASK_SPR )