Skip to content

UnPack

产品支持情况

  • 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中低半部分或高半部分的元素以高位填0扩充位宽的方式写入dstReg。对于有符号整型,将源操作数srcReg中低半部分或高半部分的元素以保持符号位扩充位宽的方式写入dstReg。

图 1 UnPack示意图

UnPack

函数原型

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

参数说明

表 1 模板参数说明

参数名称描述
T目的操作数数据类型。
源操作数和目的操作数的数据类型约束参考见表 源操作数和目的操作数的数据类型对应表
U源操作数数据类型。
part枚举类型,用于控制读取srcReg的低半部分还是高半部分。
• HighLowPart::LOWEST,低位模式,读取srcReg的低半部分。
• HighLowPart::HIGHEST,高位模式,读取srcReg的高半部分。
注:RegTraitNumTwo只支持LOWEST模式。
S目的操作数RegTensor类型。
V源操作数RegTensor类型。

表 2 函数参数说明

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

返回值说明

数据类型

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

T数据类型U数据类型
int16_tint8_t
uint16_tuint8_t
int32_tint16_t
uint32_tuint16_t
int64_tint32_t
uint64_tuint32_t

约束说明

调用示例

C++
template<typename T, typename U, int32_t mode>
__simd_vf__ inline void UnPackVF(__ubuf__ T* dstAddr, __ubuf__ U* srcAddr, uint32_t oneDstRepSize, uint16_t repeatTimes, uint32_t oneSrcRepSize)
{
    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::UnPack<T, U, AscendC::Reg::HighLowPart::LOWEST>(dstReg, srcReg);
        } else if constexpr (mode == 1) {
            AscendC::Reg::UnPack<T, U, AscendC::Reg::HighLowPart::HIGHEST>(dstReg, srcReg);
        }
        AscendC::Reg::StoreAlign(dstAddr + i * oneDstRepSize, dstReg, mask);
    }
}

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