Skip to content

Pack

产品支持情况

  • 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_pack_intf.h"

将源操作数srcReg中的元素选取低8位(对于b16类型)、低16位(对于b32类型)、低32位(对于b64类型)写入dstReg的低半部分或高半部分。

图 1 Pack示意图

Pack

函数原型

C++
template <typename T = DefaultType, typename U = DefaultType, HighLowPart part = HighLowPart::LOWEST, typename S, typename V>
__simd_callee__ inline void Pack(S& dstReg, V& srcReg)

参数说明

表1 模板参数说明

参数名称描述
T目的操作数数据类型。
源操作数和目的操作数的数据类型约束参考见表 源操作数和目的操作数的数据类型对应表
U源操作数数据类型。
part枚举类型,用于控制写入dstReg的低半部分还是高半部分。
• HighLowPart::LOWEST,低位模式,写入dstReg的低半部分。
• HighLowPart::HIGHEST,高位模式,写入dstReg的高半部分。
注:RegTraitNumTwo只支持LOWEST模式。
S目的操作数RegTensor类型,由编译器自动推导,用户不需要填写。
V源操作数RegTensor类型,由编译器自动推导,用户不需要填写。

表2 函数参数说明

参数名称描述
dstReg目的操作数。
类型为RegTensor
srcReg源操作数。
类型为RegTensor

返回值说明

数据类型

表 3 源操作数和目的操作数的数据类型对应表

T数据类型U数据类型
uint8_tint16_t
uint8_tuint16_t
uint16_tint32_t
uint16_tuint32_t
uint32_tint64_t
uint32_tuint64_t

约束说明

调用示例

C++
template<typename T, typename U, int32_t mode = 0>
__simd_vf__ inline void PackVF(__ubuf__ T* dstAddr, __ubuf__ U* srcAddr, uint32_t oneDstRepSize, uint32_t oneSrcRepSize, uint16_t repeatTimes)
{
    AscendC::Reg::RegTensor<U> srcReg;
    AscendC::Reg::RegTensor<T> dstReg;
    AscendC::Reg::MaskReg mask = AscendC::Reg::CreateMask<T, AscendC::Reg::MaskPattern::ALL>();
    for (uint16_t i = 0; i < repeatTimes; i++) {
        AscendC::Reg::LoadAlign(srcReg, srcAddr + i * oneSrcRepSize);
        if constexpr (mode == 0) {
            AscendC::Reg::Pack<T, U, AscendC::Reg::HighLowPart::LOWEST>(dstReg, srcReg);
        } else if constexpr (mode == 1) {
            AscendC::Reg::Pack<T, U, AscendC::Reg::HighLowPart::HIGHEST>(dstReg, srcReg);
        }
        AscendC::Reg::StoreAlign(dstAddr + i * oneDstRepSize, dstReg, mask);
    }
}

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