LoadDataWithTranspose

功能说明

该接口实现带转置的2D格式数据从A1/B1到A2/B2的加载。

下面通过示例来讲解接口功能和关键参数:下文图中一个N形或者一个Z形代表一个分形。

函数原型

1
2
template <typename T>
__aicore__ inline void LoadDataWithTranspose(const LocalTensor<T>& dstLocal, const LocalTensor<T>& srcLocal, const LoadData2dTransposeParams& loadDataParams)

参数说明

表1 参数说明

参数名称

输入/输出

含义

dstLocal

输出

目的操作数,结果矩阵,类型为LocalTensor,支持的TPosition为A2/B2。

LocalTensor的起始地址需要保证512字节对齐。

Atlas A2训练系列产品/Atlas 800I A2推理产品,支持的数据类型为:half/bfloat16_t/float/int32_t/uint32_t/uint8_t/int8_t。

Atlas 200I/500 A2推理产品,支持的数据类型为:uint8_t/int8_t/uint16_t/int16_t/half/bfloat16_t/uint32_t/int32_t/float。

当TPosition为B2时,额外支持int4b_t数据类型。

数据类型和srcLocal的数据类型保持一致。

srcLocal

输入

源操作数,类型为LocalTensor,支持的TPosition为A1/B1。

LocalTensor的起始地址需要保证32字节对齐。

Atlas A2训练系列产品/Atlas 800I A2推理产品,支持的数据类型为:half/bfloat16_t/float/int32_t/uint32_t/uint8_t/int8_t。

Atlas 200I/500 A2推理产品,支持的数据类型为:uint8_t/int8_t/uint16_t/int16_t/half/bfloat16_t/uint32_t/int32_t/float。

当TPosition为B1时,额外支持int4b_t数据类型。

数据类型和dstLocal的数据类型保持一致。

LoadData2dTransposeParams

输入

LoadDataWithTranspose相关参数,类型为LoadData2dTransposeParams,结构体具体定义为:

1
2
3
4
5
6
7
struct LoadData2dTransposeParams {
    uint16_t startIndex = 0;
    uint8_t repeatTimes = 0;
    uint16_t srcStride = 0;
    uint16_t dstGap = 0;
    uint16_t dstFracGap = 0;
};

参数说明请参考表2

表2 LoadData2dTransposeParams结构体内参数说明

参数名称

输入/输出

含义

startIndex

输入

方块矩阵 ID,搬运起始位置为源操作数中第几个方块矩阵(0 为源操作数中第1个方块矩阵)。取值范围:startIndex∈[0, 65535] 。默认为0。

例如,源操作数中有20个大小为16*8*4B的分形(数据类型为float),startIndex=1表示搬运起始位置为第2个方块矩阵,即将第3和第4个分形从源操作数中转置到目的操作数中(第1、2个分形组成第1个方块矩阵,第3、4个分形组成第2个方块矩阵)。

repeatTimes

输入

迭代次数。

对于uint8_t/int8_t数据类型,每次迭代处理32*32*1B数据;

对于half/bfloat16_t数据类型,每次迭代处理16*16*2B数据;

对于float/int32_t/uint32_t数据类型,每次迭代处理16*16*4B数据。

对于int4b_t数据类型,每次迭代处理16*64*0.5B数据。

取值范围:repeatTimes∈[1, 255]。

srcStride

输入

相邻迭代间,源操作数前一个分形与后一个分形起始地址的间隔。这里的单位实际上是拼接后的方块矩阵的大小。

对于uint8_t/int8_t数据类型,单位是32*32*1B;

对于half/bfloat16_t数据类型,单位是16*16*2B;

对于float/int32_t/uint32_t数据类型,单位是16*16*4B。

对于int4b_t数据类型,每次迭代处理16*64*0.5B数据。

取值范围:srcStride∈[0, 65535]。默认为0。

dstGap

输入

相邻迭代间,目的操作数前一个迭代第一个分形的结束地址到下一个迭代第一个分形起始地址的间隔,单位:512B。取值范围:dstGap∈[0, 65535]。默认为0。

dstFracGap

输入

每个迭代内目的操作数转置前一个分形结束地址与后一个分形起始地址的间隔,单位为512B,仅在数据类型为float/int32_t/uint32_t/uint8_t/int8_t/int4b_t时有效。

注意事项

支持的型号

Atlas A2训练系列产品/Atlas 800I A2推理产品

Atlas 200I/500 A2推理产品

调用示例