
Select灵活标量位置产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品 / Atlas A3 推理系列产品xAtlas A2 训练系列产品 / Atlas A2 推理系列产品xAtlas 200I/500 A2 推理产品xAtlas 推理系列产品 AI CorexAtlas 推理系列产品 Vector CorexAtlas 训练系列产品x功能说明给定两个源操作数src0和src1根据selMask用于选择的Mask掩码的比特位值选取元素得到目的操作数dst。选择的规则为当selMask的比特位是1时从src0中选取比特位是0时从src1选取。对于tensor高维切分计算接口支持根据mask参数对上述选取结果再次进行过滤有效位填入最终的dst无效位则保持dst原始值。例如src0为[1,2,3,4,5,6,7,8]src1为[9,10,11,12,13,14,15,16]selMask为[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]则根据selMask的比特位选取后的结果dst_temp为[9,10,11,12,5,6,7,8]然后再根据mask进行过滤dst的最终输出结果为[9,10,11,12,-5,-6,-7,-8]。本选择功能支持三种模式模式0根据selMask在两个tensor中选取元素。selMask中有效数据的个数存在限制具体取决于源操作数的数据类型。在每一轮迭代中根据selMask的有效位数据进行选择操作每一轮迭代采用的selMask均为相同数值即selMask的有效数值。模式1根据selMask在1个tensor和1个scalar标量中选取元素selMask无有效数据限制。多轮迭代时每轮迭代连续使用selMask的不同部分。模式2根据selMask在两个tensor中选取元素selMask无有效数据限制。多轮迭代时每轮迭代连续使用selMask的不同部分。针对模式1提供灵活标量位置的接口。函数原型tensor前n个数据计算template typename T0 BinaryDefaultType, typename T1 BinaryDefaultType, const BinaryConfig config DEFAULT_BINARY_CONFIG, typename T2, typename T3, typename T4 __aicore__ inline void Select(const T2 dst, const LocalTensorT1 selMask, const T3 src0, const T4 src1, SELMODE selMode, uint32_t count)tensor高维切分计算mask逐bit模式template typename T0 BinaryDefaultType, typename T1 BinaryDefaultType, bool isSetMask true, const BinaryConfig config DEFAULT_BINARY_CONFIG, typename T2, typename T3, typename T4 __aicore__ inline void Select(const T2 dst, const LocalTensorT1 selMask, const T3 src0, const T4 src1, SELMODE selMode, uint64_t mask[], uint8_t repeatTime, const BinaryRepeatParams repeatParams)mask连续模式template typename T0 BinaryDefaultType, typename T1 BinaryDefaultType, bool isSetMask true, const BinaryConfig config DEFAULT_BINARY_CONFIG, typename T2, typename T3, typename T4 __aicore__ inline void Select(const T2 dst, const LocalTensorT1 selMask, const T3 src0, const T4 src1, SELMODE selMode, uint64_t mask, uint8_t repeatTime, const BinaryRepeatParams repeatParams)参数说明表 1模板参数说明参数名称含义T0源操作数和目的操作数的数据类型。特别地对于灵活标量位置接口为预留参数暂未启用为后续的功能扩展做保留需要指定时传入默认值BinaryDefaultType即可。T1selMask的数据类型。isSetMask预留参数保持默认值即可。如需使用在接口外部设置mask的功能可以调用不传入mask参数的接口来实现。selMode同表2 参数说明中的selMode参数说明。config类型为BinaryConfig当标量为LocalTensor单点元素类型时生效用于指定单点元素操作数位置。默认值DEFAULT_BINARY_CONFIG表示右操作数为标量。struct BinaryConfig { int8_t scalarTensorIndex 1; // 用于指定标量为LocalTensor单点元素时标量的位置0表示左操作数1表示右操作数 }; constexpr BinaryConfig DEFAULT_BINARY_CONFIG {1};T2LocalTensor类型根据输入参数dst自动推导相应的数据类型开发者无需配置该参数保证dst满足数据类型的约束即可。T3LocalTensor类型或标量类型根据输入参数src0自动推导相应的数据类型开发者无需配置该参数保证src0满足数据类型的约束即可。T4LocalTensor类型或标量类型根据输入参数src1自动推导相应的数据类型开发者无需配置该参数保证src1满足数据类型的约束即可。表 2参数说明参数名称输入/输出含义dst输出目的操作数。类型为LocalTensor支持的TPosition为VECIN/VECCALC/VECOUT。LocalTensor的起始地址需要32字节对齐。Ascend 950PR/Ascend 950DT支持的数据类型为int8_t/uint8_t/int16_t/uint16_t/half/bfloat16_t/float/int32_t/uint32_t/complex32/int64_t/uint64_t/complex64selMask输入选取mask。类型为LocalTensor支持的TPosition为VECIN/VECCALC/VECOUT。LocalTensor的起始地址需要32字节对齐。Ascend 950PR/Ascend 950DT支持的数据类型为uint8_t/uint16_t/uint32_t/uint64_t。每个比特位表示1个元素的选取当selMask的比特位为1时从src0中选取元素比特位为0时从src1中选取元素。selMode为模式0时在每一轮迭代中根据selMask的有效位数据进行选择操作每一轮迭代采用的selMask均为相同数值即selMask的有效数值。selMode为模式1/2时多次迭代对selMask连续消耗。模式0根据selMask在两个tensor中选取元素selMask有位数限制不管迭代多少次每次迭代都只根据截取后的固定位数的selMask进行选择。当源操作数的数据类型为8位时selMask前256比特位有效当源操作数的数据类型为16位时selMask前128比特位有效源操作数的数据类型为32位时selMask前64比特位有效源操作数的数据类型为64位时selMask前32比特位有效。模式1根据selMask在1个tensor和1个scalar标量中选取元素。支持多次迭代选取方式为根据selMask的设置值如果selMask比特值为1则选择src0内的同位置数值如果selMask比特值为0则选择标量值。selMask连续存放当源操作数的数据类型为8位时一次比较获取selMask256bit长度的数据当源操作数的数据类型为16位时一次比较获取selMask128bit长度的数据源操作数的数据类型为32位时一次比较获取selMask64bit长度的数据源操作数的数据类型为64位时一次比较获取selMask32bit长度的数据。模式2根据selMask在两个tensor中选取元素。支持多次迭代选取方式为根据selMask的设置值如果selMask比特值为1则选择src0内的同位置数值如果selMask比特值为0则选择src1内的同位置数值。selMask连续存放当源操作数的数据类型为8位时一次比较获取selMask256bit长度的数据当源操作数的数据类型为16位时一次比较获取selMask128bit长度的数据源操作数的数据类型为32位时一次比较获取selMask64bit长度的数据源操作数的数据类型为64位时一次比较获取selMask32bit长度的数据。src0输入灵活标量位置接口中源操作数。类型为LocalTensor时支持当作矢量操作数或标量单点元素支持的TPosition为VECIN/VECCALC/VECOUT。LocalTensor的起始地址需要32字节对齐。Ascend 950PR/Ascend 950DT支持的数据类型为int8_t/uint8_t/int16_t/uint16_t/half/bfloat16_t/float/int32_t/uint32_t/complex32/int64_t/uint64_t/complex64类型为标量时Ascend 950PR/Ascend 950DT支持的数据类型为int8_t/uint8_t/int16_t/uint16_t/half/bfloat16_t/float/int32_t/uint32_t/complex32/int64_t/uint64_t/complex64数据类型需要与目的操作数保持一致。src1输入灵活标量位置接口中源操作数。类型为LocalTensor时支持当作矢量操作数或标量单点元素支持的TPosition为VECIN/VECCALC/VECOUT。LocalTensor的起始地址需要32字节对齐。Ascend 950PR/Ascend 950DT支持的数据类型为int8_t/uint8_t/int16_t/uint16_t/half/bfloat16_t/float/int32_t/uint32_t/complex32/int64_t/uint64_t/complex64类型为标量时Ascend 950PR/Ascend 950DT支持的数据类型为int8_t/uint8_t/int16_t/uint16_t/half/bfloat16_t/float/int32_t/uint32_t/complex32/int64_t/uint64_t/complex64数据类型需要与目的操作数保持一致。selMode输入指令模式SELMODE类型取值如下enum class SELMODE : uint8_t { VSEL_CMPMASK_SPR 0, VSEL_TENSOR_SCALAR_MODE, VSEL_TENSOR_TENSOR_MODE, };模式0取值为VSEL_CMPMASK_SPR。根据selMask在两个tensor中选取元素。selMask中有效数据的个数存在限制具体取决于源操作数的数据类型。在每一轮迭代中根据selMask的有效位数据进行选择操作每一轮迭代采用的selMask均为相同数值即selMask的有效数值。模式1取值为VSEL_TENSOR_SCALAR_MODE。根据selMask在1个tensor和1个scalar标量中选取元素selMask无有效数据限制。多轮迭代时每轮迭代连续使用selMask的不同部分。模式2取值为VSEL_TENSOR_TENSOR_MODE。根据selMask在两个tensor中选取元素selMask无有效数据限制。多轮迭代时每轮迭代连续使用selMask的不同部分。mask/mask[]输入mask用于控制每次迭代内参与计算的元素。逐bit模式可以按位控制哪些元素参与计算bit位的值为1表示参与计算0表示不参与。mask为数组形式数组长度和数组元素的取值范围和操作数的数据类型有关。当操作数为16位时数组长度为2mask[0]、mask[1]∈[0, 264-1]并且不同时为0当操作数为32位时数组长度为1mask[0]∈(0, 264-1]当操作数为64位时数组长度为1mask[0]∈(0, 232-1]。例如mask[8, 0]80b1000表示仅第4个元素参与计算。连续模式表示前面连续的多少个元素参与计算。取值范围和操作数的数据类型有关数据类型不同每次迭代内能够处理的元素个数最大值不同。当操作数为16位时mask∈[1, 128]当操作数为32位时mask∈[1, 64]当操作数为64位时mask∈[1, 32]。repeatTime输入重复迭代次数。矢量计算单元每次读取连续的256Bytes数据进行计算为完成对输入数据的处理必须通过多次迭代repeat才能完成所有数据的读取与计算。repeatTime表示迭代的次数。关于该参数的具体描述请参考高维切分API。repeatParams输入控制操作数地址步长的参数。BinaryRepeatParams类型包含操作数相邻迭代间相同datablock的地址步长操作数同一迭代内不同datablock的地址步长等参数。相邻迭代间的地址步长参数说明请参考repeatStride同一迭代内DataBlock的地址步长参数说明请参考dataBlockStride。count输入参与计算的元素个数。返回值说明无约束说明调用灵活标量位置接口且源操作数为LocalTensor单点元素的场景不支持源操作数和目的操作数地址重叠。操作数地址对齐要求请参见通用地址对齐约束。针对Ascend 950PR/Ascend 950DTint8_t/uint8_t/uint64_t/int64_t/complex32/complex64数据类型仅支持tensor前n个数据计算接口。左操作数及右操作数中必须有一个为矢量当前不支持左右操作数同时为标量。本接口传入LocalTensor单点数据作为标量时idx参数需要传入编译期已知的常量传入变量时需要声明为constexpr。模式1场景使用灵活标量位置接口时需要填写模板参数config避免接口匹配到其他模式。调用示例Select-tensor前n个数据计算样例模式1// 灵活标量位置src1Local[0]作为标量 static constexpr AscendC::BinaryConfig config { 1 }; AscendC::SelectBinaryDefaultType, uint8_t, config(dstLocal, maskLocal, src0Local, src1Local[0], AscendC::SELMODE::VSEL_TENSOR_SCALAR_MODE, dataSize); // 灵活标量位置src0Local[0]作为标量 static constexpr AscendC::BinaryConfig config { 0 }; AscendC::SelectBinaryDefaultType, uint8_t, config(dstLocal, maskLocal, src0Local[0], src1Local, AscendC::SELMODE::VSEL_TENSOR_SCALAR_MODE, dataSize);创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考