Load2D
产品支持情况
产品
|
是否支持
|
Ascend 950PR/Ascend 950DT
|
√
|
Atlas A3 训练系列产品/Atlas A3 推理系列产品
|
√
|
Atlas A2 训练系列产品/Atlas A2 推理系列产品
|
√
|
Kirin X90
|
√
|
Kirin 9030
|
√
|
功能说明
Load2D支持如下数据通路的搬运:
GM->A1; GM->B1; GM->A2; GM->B2;
A1->A2; B1->B2。
函数原型
-
Load2D接口
template <typename T>
__aicore__ inline void LoadData(const LocalTensor<T>& dst, const LocalTensor<T>& src, const LoadData2DParams& loadDataParams)
template <typename T>
__aicore__ inline void LoadData(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const LoadData2DParams& loadDataParams)
-
Load2Dv2接口
template <typename T>
__aicore__ inline void LoadData(const LocalTensor<T>& dst, const LocalTensor<T>& src,const LoadData2DParamsV2& loadDataParam)
template <typename T>
__aicore__ inline void LoadData(const LocalTensor<T>& dst, const GlobalTensor<T>& src,const LoadData2DParamsV2& loadDataParam)
参数说明
表 1 模板参数说明
参数名称
|
含义
|
T
|
源操作数和目的操作数的数据类型。
- Load2D接口
Atlas A2 训练系列产品/Atlas A2 推理系列产品,支持数据类型为:uint8_t/int8_t/uint16_t/int16_t/half/bfloat16_t/uint32_t/int32_t/float
Atlas A3 训练系列产品/Atlas A3 推理系列产品,支持数据类型为:uint8_t/int8_t/uint16_t/int16_t/half/bfloat16_t/uint32_t/int32_t/float
Ascend 950PR/Ascend 950DT,支持数据类型为:uint8_t/int8_t/uint16_t/int16_t/half/bfloat16_t/uint32_t/int32_t/float,仅支持如下数据通路: GM->A1; GM->B1; A1->A2; B1->B2。
Kirin X90,支持的数据类型为:int8_t/half
Kirin 9030,支持的数据类型为:half
- Load2Dv2接口
Ascend 950PR/Ascend 950DT,
|
表 2 通用参数说明
参数名称
|
输入/输出
|
含义
|
dst
|
输出
|
目的操作数,类型为LocalTensor。
数据连续排列顺序由目的操作数所在TPosition决定,具体约束如下:
- A2:ZZ格式/NZ格式;对应的分形大小为16 * (32B / sizeof(T))。
- B2:ZN格式;对应的分形大小为 (32B / sizeof(T)) * 16。
- A1/B1:无格式要求,一般情况下为NZ格式。NZ格式下,对应的分形大小为16 * (32B / sizeof(T))。
|
src
|
输入
|
源操作数,类型为LocalTensor或GlobalTensor。
数据类型需要与dst保持一致。
|
loadDataParams
|
输入
|
LoadData参数结构体,类型为:
- LoadData2DParams,具体参考表3。
- LoadData2DParamsV2,具体参考表4。
上述结构体参数定义请参考${INSTALL_DIR}/include/ascendc/basic_api/interface/kernel_struct_mm.h,${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。
|
表 3 LoadData2DParams结构体内参数说明
参数名称
|
含义
|
startIndex
|
分形矩阵ID,说明搬运起始位置为源操作数中第几个分形(0为源操作数中第1个分形矩阵)。取值范围:startIndex∈[0, 65535] 。单位:512B。默认为0。
|
repeatTimes
|
迭代次数,每个迭代可以处理512B数据。取值范围:repeatTimes∈[1, 255]。
|
srcStride
|
相邻迭代间,源操作数前一个分形与后一个分形起始地址的间隔,单位:512B。取值范围:src_stride∈[0, 65535]。默认为0。
|
sid
|
预留参数,配置为0即可。
|
dstGap
|
相邻迭代间,目的操作数前一个分形结束地址与后一个分形起始地址的间隔,单位:512B。取值范围:dstGap∈[0, 65535]。默认为0。
|
ifTranspose
|
是否启用转置功能,对每个分形矩阵进行转置,默认为false:
注意:只有A1->A2和B1->B2通路才能使能转置,使能转置功能时,源操作数、目的操作数仅支持uint16_t/int16_t/half数据类型。
|
addrMode
|
控制地址更新方式,默认为false:
- true:递减,每次迭代在前一个地址的基础上减去srcStride。
- false:递增,每次迭代在前一个地址的基础上加上srcStride。
|
表 4 LoadData2DParamsV2结构体内参数说明
参数名称
|
含义
|
mStartPosition
|
以M*K矩阵为例,源矩阵M轴方向的起始位置,单位为16个元素。
|
kStartPosition
|
以M*K矩阵为例,源矩阵K轴方向的起始位置,单位为32B。
|
mStep
|
以M*K矩阵为例,源矩阵M轴方向搬运长度,单位为16 element。取值范围:mStep∈[0, 255]。
通过ifTranspose参数启用转置功能时,mStep除需满足 [0, 255]的取值范围外,还需满足以下额外约束:
- 当数据类型为b4时,mStep必须是4的倍数;
- 当数据类型为b8时,mStep必须是2的倍数;
- 当数据类型为b16时,mStep必须是1的倍数;
- 当数据类型为b32时,mStep无额外约束。
|
kStep
|
以M*K矩阵为例,源矩阵K轴方向搬运长度,单位为32B。取值范围:kStep∈[0, 255]。
通过ifTranspose参数启用转置功能时,kStep除需满足[0,255]的取值范围外,还需满足以下额外约束:
- 当数据类型为b4、b8或b16时,kStep没有额外约束;
- 当数据类型为b32时,kStep必须是2的倍数。
|
srcStride
|
以M*K矩阵为例,源矩阵K方向前一个分形起始地址与后一个分形起始地址的间隔,单位:512B。
|
dstStride
|
以M*K矩阵为例,目标矩阵K方向前一个分形起始地址与后一个分形起始地址的间隔,单位:512B。
|
ifTranspose
|
是否启用转置功能,对每个分形矩阵进行转置,默认为false。
注意:只有A1->A2和B1->B2通路才能使能转置。使能转置功能时,支持的数据类型约束如下:
对于Ascend 950PR/Ascend 950DT,源操作数、目的操作数支持b4、b8、b16、b32数据类型。
|
sid
|
预留参数,配置为0即可。
|
约束说明
返回值说明
无
调用示例
该调用示例支持的运行平台为Atlas 推理系列产品AI Core。