LoadData>

产品支持情况>

产品 是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品 x
Atlas A2 训练系列产品/Atlas A2 推理系列产品 x
Atlas 200I/500 A2 推理产品 x
Atlas 推理系列产品AI Core x
Atlas 推理系列产品Vector Core x
Atlas 训练系列产品 x
Atlas 200/300/500 推理产品 x

功能说明>

LoadData接口支持Local Memory内部的数据搬运,能够完成L1 Buffer -> L0A Buffer或L1 Buffer -> L0B Buffer(A1到A2或B1到B2)的数据搬运。

函数原型>

template <constLoadDataTrait& trait = DEFAULT_LOAD_DATA_TRAIT, typename T, typename U>
__aicore__ inline typename Std::enable_if<VerifyingLoadDataTemplate<T, U>, void>::type LoadData(const T& dst, const U& src);

参数说明>

表 1 模板参数说明

参数名 描述
T 目的操作数的数据类型,通过TensorTrait构造的LocalTensor类型。
U 源操作数的数据类型,通过TensorTrait构造的LocalTensor类型。
LoadDataTrait LoadData相关配置参数,成员transposed用于指示A1/B1中的数据是否已转置,false表示未转置,true表示已转置。DEFAULT_LOAD_DATA_TRAIT为默认取值false,即A1/B1中的数据未经转置。struct LoadDataTrait { bool transposed = false;};constexpr LoadDataTrait DEFAULT_LOAD_DATA_TRAIT = {};

表 2 参数说明

参数名 输入/输出 含义
dst 输出 目的操作数。
src 输入 源操作数。

返回值说明>

VerifyingLoadDataTemplate表达式为模板参数校验表达式,执行效果如下:

  • 校验表达式成立,表明输入数据类型符合使用约束,LoadData函数表达式返回值为void。
  • 校验表达式不成立,表明输入数据类型不符合使用约束时,LoadData函数声明失效,继而会导致编译错误。

约束说明>

  • Tensor Layout相关约束:
    • TensorTrait中的Layout表述,统一采用层次化表述法(../struct/defenition/Layout和层次化表述法.md)同的物理存储位置,四个维度的配置均有不同的约束,部分维度为固定值,不可配置。详见[数据通路说明]。
    • dst的Shape、Stride只支持两个维度的数据配置。
    • Shape、Stride等数值数据,仅支持size_t类型和Std::[Int]类型。

数据通路说明>

表 3 L1 Buffer -> L0A Buffer通路使用说明

项目 内容
模板参数T 数据类型为LocalTensor。
模板参数U 数据类型为LocalTensor。
目的操作数TPosition取值范围 TPosition::A2
源操作数TPosition取值范围 TPosition::A1
目的操作数的数据类型 half、bfloat16_t、uint32_t、int32_t、float、uint8_t、int8_t、fp8_e4m3fn_t、fp8_e5m2_t、hifloat8_t
源操作数的数据类型 half、bfloat16_t、uint32_t、int32_t、float、uint8_t、int8_t、fp8_e4m3fn_t、fp8_e5m2_t、hifloat8_t
源操作数和目的操作数基础数据类型是否要求一致
源操作数数据对齐要求 起始地址和数据长度要求32字节对齐。
目的操作数数据对齐要求 起始地址和数据长度要求512字节对齐。
数据排布要求 NZ Layout -> NZ Layout : 源操作数和目的操作数均仅支持连续排布。
NZ Layout内层矩阵的Shape大小是16 * (32 / sizeof(T))。

表 4 L1 Buffer -> L0B Buffer通路使用说明

项目 内容
模板参数T 数据类型为LocalTensor。
模板参数U 数据类型为LocalTensor。
目的操作数TPosition取值范围 TPosition::B2
源操作数TPosition取值范围 TPosition::B1
目的操作数的数据类型 half、bfloat16_t、uint32_t、int32_t、float、uint8_t、int8_t、fp8_e4m3fn_t、fp8_e5m2_t、hifloat8_t
源操作数的数据类型 half、bfloat16_t、uint32_t、int32_t、float、uint8_t、int8_t、fp8_e4m3fn_t、fp8_e5m2_t、hifloat8_t
源操作数和目的操作数基础数据类型是否要求一致
源操作数数据对齐要求 起始地址和数据长度要求32字节对齐。
目的操作数数据对齐要求 起始地址和数据长度要求512字节对齐。
数据排布要求 NZ Layout -> ZN Layout : 源操作数和目的操作数均仅支持连续排布。
NZ Layout内层矩阵的Shape大小是16 * (32 / sizeof(T))。ZN Layout内存矩阵的Shape大小是 (32 / sizeof(T)) * 16。

调用示例>

...
// A1 -> A2
using SrcT = float;
using DstT = float;
size_t mLength = 128;
size_t kLength = 64;

auto dstLayout = AscendC::MakeNZLayout<DstT>(mLength, kLength);
auto srcLayout = AscendC::MakeNZLayout<SrcT>(mLength, kLength);

auto srcTrait = AscendC::MakeTensorTrait<SrcT, TPosition::A1>(srcLayout);
auto dstTrait = AscendC::MakeTensorTrait<DstT, TPosition::A2>(dstLayout);

using srcTraitType = decltype(srcTrait);
using dstTraitType = decltype(dstTrait);

LocalTensor<srcTraitType> SrcTraitTensor;
SrcTraitTensor.SetTensorTrait(srcTrait);

LocalTensor<dstTraitType> DstTraitTensor;
DstTraitTensor.SetTensorTrait(dstTrait);

AscendC::LoadData<DEFAULT_LOADDATA_TYPE_TRAITS, LocalTensor<dstTraitType>, LocalTensor<srcTraitType>>(DstTraitTensor, SrcTraitTensor);
...