公司动态

CANN/asc-devkit:LoadData矩阵搬运API

📅 2026/7/16 22:44:59
CANN/asc-devkit:LoadData矩阵搬运API
# LoadDataMX矩阵搬运【免费下载链接】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。负责完成矩阵计算所需的左右矩阵数据和对应的左右量化系数矩阵数据的搬运。其中左右矩阵数据以大小为512字节的数据分形为单位进行搬运左右量化系数矩阵以32字节的数据分形为单位进行搬运。支持的数据通路如下左右矩阵L1 Buffer-L0A Buffer、L1 Buffer-L0B Buffer。量化系数矩阵L1 Buffer-L0A_MX Buffer、L1 Buffer-L0B_MX Buffer。其中L0A_MX/L0B_MX Buffer的大小为4KB和L0A/L0B Buffer地址的映射关系如下$$L0A_MX\ Buffer\ Address L0A\ Buffer\ Address / 16$$$$L0B_MX\ Buffer\ Address L0B\ Buffer\ Address / 16$$对于b4数据类型左右矩阵数据分形在L0A Buffer中为一个16×64的矩阵在L0B Buffer中为一个64×16的矩阵。对于b8数据类型左右矩阵数据分形在L0A Buffer中为一个16×32的矩阵在L0B Buffer中为一个32×16的矩阵。量化系数矩阵分形是一个固定数据类型为fp8_e8m0_t、分形大小为16×2的矩阵。函数原型template typename T, typename U __aicore__ inline void LoadData(const LocalTensorU dst, const LocalTensorT src, const LocalTensorfp8_e8m0_t srcMx, const LoadData2DParamsV2 loadDataParams, const LoadData2DMxParams loadMxDataParams)参数说明表 1模板参数说明参数名称含义TT用来表示src的数据类型。支持数据类型为fp4x2_e2m1_t/fp4x2_e1m2_t/fp8_e4m3fn_t/fp8_e5m2_t。UU用来表示dst的数据类型。支持数据类型为fp4x2_e2m1_t/fp4x2_e1m2_t/fp8_e4m3fn_t/fp8_e5m2_t。表 2通用参数说明参数名称输入/输出含义dst输出目的操作数类型为LocalTensor。数据连续排列顺序由目的操作数所在TPosition决定具体约束如下• A2ZZ格式/NZ格式对应的分形大小为16 * (32字节 / sizeof(T))。• B2ZN格式对应的分形大小为 (32字节 / sizeof(T)) * 16。支持的物理存储位置为L0A BufferTPosition: A2/L0B BufferTPosition: B2。注L0A_MX Buffer和L0B_MX Buffer的地址和L0A/L0B的地址是固定比例关系接口中会自行按照L0A/L0B的地址进行推导用户无需配置。src输入源操作数类型为LocalTensor。数据类型需要与dst保持一致。支持的物理存储位置为L1 BufferTPosition: A1/B1。srcMx输入源操作数类型为LocalTensor仅支持fp8_e8m0_t类型。loadDataParams输入LoadData参数结构体类型为LoadData2DParamsV2。具体参考表LoadData2D矩阵搬运V2中的LoadData2DParamsV2结构体内参数说明。本结构体用于控制左右矩阵数据的搬运。loadMxDataParams输入LoadData参数结构体类型为LoadData2DMxParams。具体参考表3。本结构体用于控制左右量化系数矩阵的搬运。上述结构体参数定义请参考${INSTALL_DIR}/asc/include/basic_api/interface/kernel_struct_mm.h${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。表 3LoadData2DMxParams结构体参数说明参数名称含义xStartPosition源矩阵X轴方向的起始位置即M维度方向单位为1个分形1个单位代表一个32字节的分形。yStartPosition源矩阵Y轴方向的起始位置即K维度方向单位为32字节。xStep源矩阵X轴方向搬运长度即M维度方向单位为1个分形1个单位代表一个32字节的分形。取值范围xStep∈[0, 255]。注xStep0表示不执行搬运该接口将被视为NOP空操作。yStep源矩阵Y轴方向搬运长度即K维度方向单位为32字节。取值范围yStep∈[0, 255]。注yStep0表示不执行搬运该接口将被视为NOP空操作。srcStride源矩阵X方向前一个分形起始地址与后一个分形起始地址的间隔单位为32字节。dstStride目标矩阵X方向前一个分形起始地址与后一个分形起始地址的间隔单位为32字节。下面通过一个具体的示例来解释LoadData2DMxParams结构体参数。假设A矩阵shape为MK则ScaleA矩阵shape为MK/32ScaleA数据类型为fp8_e8m0_tScaleA矩阵分形排布见图1。图 1ScaleA在L0A Buffer的分形排布![](https://raw.gitcode.com/cann/asc-devkit/raw/1cd1d1192e01ae4a8684cd07552c35e13e5c4bdf/docs/zh/api/figures/ScaleA在L0A的分形排布.png ScaleA在L0A Buffer的分形排布?utm_sourcegitcode_repo_files)下图为ScaleA从L1 Buffer搬运至L0A Buffer过程中的配置参数示意。每一行为32字节对应着图1中的一个分形。xStep为M维度分形的个数如图中的xStep M / 16 3yStep为K维度32字节的个数如图中的yStep K / 32 / 2 21srcStride和dstStride同理表示在K维度上32字节的个数。图 2ScaleA从L1 Buffer搬运至L0A Buffer的配置参数示意![](https://raw.gitcode.com/cann/asc-devkit/raw/1cd1d1192e01ae4a8684cd07552c35e13e5c4bdf/docs/zh/api/figures/Nd2Nz转换示意图.png ScaleA从L1 Buffer搬运至L0A Buffer的配置参数示意?utm_sourcegitcode_repo_files)数据类型支持数据类型为fp4x2_e2m1_t、fp4x2_e1m2_t、fp8_e5m2_t、fp8_e4m3fn_t。返回值说明无约束说明操作数地址对齐要求请参见通用地址对齐约束。关键特性说明左右矩阵搬运的相关关键特性与LoadData2D矩阵搬运V2一致可参考LoadData2D矩阵搬运V2的关键特性说明。量化系数矩阵的搬运特性说明如下起始地址计算公式为$$startAddr srcAddr (xStartPosition \times \lvert srcStride \rvert yStartPosition) \times 32B$$量化系数矩阵分形是一个固定数据类型为fp8_e8m0_t、分形大小为16×2的矩阵搬运示意图如下图3量化系数矩阵搬运示意图![](https://raw.gitcode.com/cann/asc-devkit/raw/1cd1d1192e01ae4a8684cd07552c35e13e5c4bdf/docs/zh/api/figures/load2dmx_scale_transfer_demo.png 量化系数矩阵搬运示意图?utm_sourcegitcode_repo_files)调用示例完整调用示例请参考LoadDataMX矩阵搬运样例。【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考