GMToL1-2D矩阵搬运LoadData【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit产品支持情况Ascend 950PR/Ascend 950DT支持Atlas A3 训练系列产品/Atlas A3 推理系列产品支持Atlas A2 训练系列产品/Atlas A2 推理系列产品支持Atlas 200I/500 A2 推理产品支持Atlas 推理系列产品AI Core支持Atlas 推理系列产品Vector Core不支持Atlas 训练系列产品支持Kirin X90支持Kirin 9030支持功能说明头文件路径为basic_api/kernel_operator_mm_intf.h。负责完成普通矩阵计算所需的2D格式数据的搬运以大小为512字节的数据分形为单位从Global Memory搬运至L1 BufferTPosition为A1/B1。函数原型template typename T __aicore__ inline void LoadData(const LocalTensorT dst, const GlobalTensorT src, const LoadData2DParams loadDataParams)参数说明表1通用参数说明参数名称输入/输出含义dst输出目的操作数类型为LocalTensor。分形约束参考矩阵计算输入搬运约束。起始地址对齐约束参考矩阵计算输入搬运约束中的对齐约束。数据类型和src的数据类型保持一致。支持的物理存储位置为L1 BufferTPosition为A1/B1。src输入源操作数类型为GlobalTensor。分形约束参考矩阵计算输入搬运约束。起始地址对齐约束参考矩阵计算输入搬运约束中的对齐约束。数据类型和dst的数据类型保持一致。支持的物理存储位置为Global MemoryTPosition为GM。loadDataParams输入LoadData参数结构体类型为LoadData2DParams具体参考表2。表2LoadData2DParams结构体内参数说明参数名称含义startIndex分形矩阵ID说明搬运起始位置为源操作数中第几个分形0为源操作数中第1个分形矩阵。取值范围startIndex∈[0, 65535]。单位512字节。默认为0。repeatTimes迭代次数每个迭代可以处理512字节数据。取值范围repeatTimes∈[0, 255]。注repeatTimes 0表示不执行搬运该接口将被视为NOP空操作。srcStride相邻迭代间源操作数前一个分形与后一个分形起始地址的间隔单位512字节。取值范围srcStride∈[0, 65535]。默认为0。注srcStride 0表示在连续的重复执行周期之间重复获取相同的分形矩阵。sid此参数用户无需关注设置为0即可。dstGap相邻迭代间目的操作数前一个分形结束地址与后一个分形起始地址的间隔单位512字节。取值范围dstGap∈[0, 65535]。默认为0。注dstGap 0表示相邻repeat目的操作数起始地址间隔1个数据分形即连续存放。ifTranspose是否启用转置功能对每个分形矩阵进行转置默认为false• true启用。• false不启用。注本通路场景下不支持转置参数无意义保持默认即可。addrMode用于控制多次迭代场景下源操作数中每一次迭代的分形矩阵索引ID是递增还是递减0表示递增下一次repeat index startIndex srcStride * repeatTime。1表示递减下一次repeat index startIndex - srcStride * repeatTime。数据类型针对Ascend 950PR/Ascend 950DT支持数据类型为uint8_t、int8_t、uint16_t、int16_t、half、bfloat16_t、uint32_t、int32_t、float。针对Atlas A3 训练系列产品/Atlas A3 推理系列产品支持数据类型为b8、b16、b32。针对Atlas A2 训练系列产品/Atlas A2 推理系列产品支持数据类型为b8、b16、b32。针对Atlas 200I/500 A2 推理产品支持数据类型为uint8_t、int8_t、uint16_t、int16_t、half、bfloat16_t、uint32_t、int32_t、float。针对Atlas 推理系列产品AI Core支持数据类型为uint8_t、int8_t、uint16_t、int16_t、half。针对Atlas 训练系列产品支持数据类型为uint8_t、int8_t、uint16_t、int16_t、half。针对Kirin X90支持数据类型为int8_t、half。针对Kirin 9030支持数据类型为half。返回值说明无约束说明操作数地址对齐要求请参见通用地址对齐约束。本通路搬运过程中不支持转置。目的地址必须32字节对齐。源地址必须1字节对齐指令执行占用的流水为PIPE_MTE2。当srcStride0时表示连续的repeat之间读取的源操作数中的同一块数据分形。针对Atlas 训练系列产品不支持dstGap设置参数。调用示例如下示例中在数据类型为half的场景下通过调用LoadData接口完成GM-L1 Buffer的Nz2Nz数据搬运。搬运过程的数据排布变化示意图如下示例代码片段如下// m32, k32, fractalShape[0] 16,fractalShape[1] 16, fractalSize 256; uint32_t dstOffset fractalSize; uint32_t srcOffset fractalSize; AscendC::LoadData2DParams loadDataParams; loadDataParams.repeatTimes CeilDivision(k, fractalShape[1]); loadDataParams.srcStride CeilDivision(m, fractalShape[0]); loadDataParams.dstGap CeilDivision(m, fractalShape[0]) - 1; for (uint16_t i 0; i CeilDivision(m, fractalShape[0]); i) { AscendC::LoadData(a1Local[i * dstOffset], aGM[i * srcOffset], loadDataParams); }【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考