Skip to content

MaskReg搬入(MaskGenWithRegTensor)

产品支持情况

  • Ascend 950PR/Ascend 950DT:支持
  • Atlas A3 训练系列产品/Atlas A3 推理系列产品:不支持
  • Atlas A2 训练系列产品/Atlas A2 推理系列产品:不支持
  • Atlas 200I/500 A2 推理产品:不支持
  • Atlas 推理系列产品AI Core:不支持
  • Atlas 推理系列产品Vector Core:不支持
  • Atlas 训练系列产品:不支持

功能说明

头文件路径为:"basic_api/reg_compute/kernel_reg_compute_maskreg_intf.h"

MaskGenWithRegTensor能够实现数据从RegTensor搬运至MaskReg

  • 数据类型为b16时,RegTensor(256B)分成16个数据块(16B),用户通过参数可选择某一个数据块,数据块的每个bit broadcast成2bit后变为32B,即输出的MaskReg。
  • 数据类型为b32时,RegTensor(256B)分成32个数据块(8B),用户通过参数可选择某一个数据块,数据块的每个bit broadcast成4bit后变为32B,即输出的MaskReg。

具体搬运原理请参考关键特性说明

函数原型

C++
template <typename T = DefaultType, int16_t offset, typename U>
__simd_callee__ inline void MaskGenWithRegTensor(MaskReg& dst, U& srcReg)

参数说明

表 1 模板参数说明

参数名描述
T源操作数的数据类型。支持的数据类型请参考数据类型
offsetoffset决定了srcReg中需要搬运的数据块,具体描述请参考关键特性说明
• 当数据类型为b16,offset∈[0, 15]。
• 当数据类型为b32,offset∈[0, 31]。
U源操作数的RegTensor类型。例如RegTensor<half>,由编译器自动推导,用户不需要手动填写。

表 2 参数说明

参数名输入/输出描述
dst输出目的操作数,类型为MaskReg
srcReg输入源操作数,类型为RegTensor

数据类型

源操作数支持的数据类型为:b16、b32。

返回值说明

关键特性说明

MaskReg原理可知,当操作数类型为b16时,每一个element对应2bit的MaskReg,且仅2bit中的最低位是有效的;当操作数类型为b32时,每一个element对应4bit的MaskReg,且仅4bit中的最低位是有效的。

MaskGenWithRegTensor支持b16和b32,搬运原理如图1图2所示。

  • 当操作数类型为b16时,RegTensor的一个数据块大小为16B,每个bit经过broadcast成2bit后变为32B,即一个MaskReg(32B)。此外,一个RegTensor有256B/16B = 16个数据块,偏移量offset取值范围为[0, 15]。
  • 当操作数类型为b32时,RegTensor的一个数据块大小为8B,每个bit经过broadcast成4bit后变为32B,即一个MaskReg(32B)。此外,一个RegTensor有256B/8B = 32个数据块,偏移量offset取值范围为[0, 31]。

图 1 MaskGenWithRegTensor搬运原理(b16)

图 2 MaskGenWithRegTensor搬运原理(b32)

约束说明

  • 当数据类型为b16,offset∈[0, 15];当数据类型为b32,offset∈[0, 31]。

调用示例

C++
template <typename T, int16_t offset>
__simd_vf__ inline void MaskGenWithRegTensorVF(__ubuf__ T* dstAddr, __ubuf__ T* srcAddr)
{
    AscendC::Reg::RegTensor<T> srcReg;
    AscendC::Reg::MaskReg mask = AscendC::Reg::CreateMask<T>();
    AscendC::Reg::LoadAlign(srcReg, srcAddr);
    AscendC::Reg::MaskGenWithRegTensor<T, offset>(mask, srcReg);
    AscendC::Reg::StoreAlign(dstAddr, mask);
}

免责声明:本站内容由 asc-devkit 仓 master 分支自动编译生成,属于持续开发版本,可能存在缺陷,仅供预览与参考。如需稳定及商用资料,请查阅官方 昇腾社区