DataCopy>

产品支持情况>

产品 是否支持
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

功能说明>

DataCopy提供数据搬运功能,该接口支持Local Memory与Global Memory之间的数据搬运和Local Memory内部的数据搬运。

函数原型>

template <const DataCopyTrait& trait = DEFAULT_DATA_COPY_TRAIT, typename T, typename U>
__aicore__ inline typename Std::enable_if<VerifyingDataCopyTemplate<T, U>, void>::type DataCopy(const T& dst, const U& src)

参数说明>

表 1 模板参数说明

参数名 描述
T 目的操作数的数据类型,通过TensorTrait构造的LocalTensor类型。
U 源操作数的数据类型,通过TensorTrait构造的GlobalTensor或LocalTensor类型。
DataCopyTrait 预留参数,保持默认值即可。

表 2 参数说明

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

返回值说明>

VerifyingDataCopyTemplate表达式为模板参数T和U的校验表达式,执行效果如下:

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

约束说明>

  • Tensor Layout相关约束:

    • TensorTrait中的Layout表述,统一采用层次化表述法
    • Shape、Stride只支持四个维度的数据配置,针对不同的物理存储位置,四个维度的配置均有不同的约束,部分维度为固定值,不可配置。详见[数据通路说明]。
    • Shape、Stride等数值数据,仅支持size_t类型和Std::Int类型。
  • L1 Buffer -> Fixpipe Buffer通路每次最多搬运4KB数据。

数据通路说明>

下文的数据通路均通过逻辑位置TPosition来表达,并注明了对应的物理通路。TPosition与物理内存的映射关系见[表1]。

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

项目 内容
模板参数T 数据类型为LocalTensor。
模板参数U 数据类型为GlobalTensor。
目的操作数TPosition取值范围 TPosition::A1、TPosition::B1、TPosition::C1
源操作数TPosition取值范围 TPosition::GM
目的操作数的数据类型 bfloat16_t、 half、 float、 int16_t、 int32_t、 int8_t、 uint16_t、 uint32_t、 uint8_t
源操作数的数据类型 bfloat16_t、 half、 float、 int16_t、 int32_t、 int8_t、 uint16_t、 uint32_t、 uint8_t
源操作数和目的操作数基础数据类型是否要求一致
源操作数数据对齐要求 起始地址和数据长度要求32字节对齐。
目的操作数数据对齐要求 起始地址和数据长度要求32字节对齐。
数据排布要求 NZ Layout -> NZ Layout : 源操作数和目的操作数均支持连续和非连续排布。ND Layout -> ND Layout : 源操作数和目的操作数均支持连续和非连续排布。RowMajor Layout -> NZ Layout :源操作数和目的操作数仅支持连续排布。ColumnMajor Layout -> NZ Layout:源操作数和目的操作数仅支持连续排布。NZ Layout内层矩阵的Shape大小是16 * (32 / sizeof(T))。非连续搬运时,外层矩阵列方向要保证连续,行方向可以跳跃。即:// StrideColumn1应满足:StrideColumn1 = StrideRow1 * ShapeRow1

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

项目 内容
模板参数T 数据类型为LocalTensor。
模板参数U 数据类型为LocalTensor。
目的操作数TPosition取值范围 TPosition::C2
源操作数TPosition取值范围 TPosition::C1
目的操作数的数据类型 half、bfloat16_t、int32_t、float
源操作数的数据类型 half、bfloat16_t、int32_t、float
源操作数和目的操作数基础数据类型是否要求一致
源操作数数据对齐要求 起始地址和数据长度要求32字节对齐。
目的操作数数据对齐要求 起始地址和数据长度要求64字节对齐。
数据排布要求 RowMajor Layout -> RowMajor Layout:源操作数和目的操作数均支持连续和非连续排布。非连续时仅支持以行为单位进行跳跃。

表 5 L1 Buffer -> Fixpipe Buffer通路使用说明

项目 内容
模板参数T 数据类型为LocalTensor。
模板参数U 数据类型为LocalTensor。
目的操作数TPosition取值范围 TPosition::C2PIPE2GM
源操作数TPosition取值范围 TPosition::C1
目的操作数的数据类型 bool、int8_t、uint8_t、hifloat8_t、fp8_e5m2_t、fp8_e4m3fn_t、fp8_e8m0_t、int16_t、uint16_t、half、bfloat16_t、int32_t、uint32_t、float、complex32、int64_t、uint64_t、double、complex64
源操作数的数据类型 bool、int8_t、uint8_t、hifloat8_t、fp8_e5m2_t、fp8_e4m3fn_t、fp8_e8m0_t、int16_t、uint16_t、half、bfloat16_t、int32_t、uint32_t、float、complex32、int64_t、uint64_t、double、complex64
源操作数和目的操作数基础数据类型是否要求一致
源操作数数据对齐要求 起始地址和数据长度要求32字节对齐。
目的操作数数据对齐要求 起始地址和数据长度要求128字节对齐。
数据排布要求 RowMajor Layout -> RowMajor Layout:源操作数和目的操作数均支持连续和非连续排布。非连续时仅支持以行为单位进行跳跃。

调用示例>

...
// GM -> A1
using SrcT = half;
size_t mLength = 128;
size_t kLength = 64;

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

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

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

GlobalTensor<srcTraitType> aGlobalTrait;
aGlobalTrait.SetTensorTrait(srcTrait);

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

AscendC::DataCopy(leftMatrixTrait, aGlobalTrait);
...