CANN/asc-devkit稀疏矩阵数据加载API
# LoadDataWithSparse【免费下载链接】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。用于从L1 Buffer中搬运以512字节为单位存放的稠密权重矩阵到L0B Buffer里同时搬运以128字节为单位的索引矩阵到内置的专用buffer空间用于后续MmadWithSparse接口进行读取。索引矩阵的数据类型为uint2需要拼成uint8的数据类型再传入接口。索引矩阵在一个uint8的地址中的排布是逆序排布的例如索引矩阵在地址中的排布为1 0 2 1 0 1 2 0其中1 0 2 1对应索引矩阵前四位1 2 0 1为一个uint80 1 2 0对应索引矩阵后四位0 2 1 0为一个uint8。仅支持如下数据通路的搬运L1 Buffer-L0B Buffer。图1L1 Buffer-L0B Buffer LoadDataWithSparse示意图LoadData2dParams参数配置startIndex 1repeatTimes 5表示需要从源操作数src中第1块数据分形开始搬运5块连续的数据分形从源操作数idx中第1块index分形开始搬运5块连续的index分形。函数原型template typename T int8_t, typename U uint8_t, typename Std::enable_ifStd::is_samePrimTT, int8_t::value, bool::type true, typename Std::enable_ifStd::is_samePrimTU, uint8_t::value, bool::type true __aicore__ inline void LoadDataWithSparse(const LocalTensorT dst, const LocalTensorT src, const LocalTensorU idx, const LoadData2dParams loadDataParam)参数说明表1模板参数说明参数名描述Tdst、src的数据类型。Uidx的数据类型。Std::enable_ifStd::is_samePrimTT, int8_t::value, bool::type用于T的数据类型检查用户无需关注。Std::enable_ifStd::is_samePrimTU, uint8_t::value, bool::type用于U的数据类型检查用户无需关注。表2参数说明参数名称输入/输出含义dst输出目的操作数类型为LocalTensor。分形约束参考矩阵计算输入搬运约束。起始地址对齐约束参考对齐约束。支持的数据类型为int8_t。Atlas A2 训练系列产品/Atlas A2 推理系列产品支持的物理存储位置为L0B Buffer(TPosition: B2)。Atlas A3 训练系列产品/Atlas A3 推理系列产品支持的物理存储位置为L0B Buffer(TPosition: B2)。src输入源操作数类型为LocalTensor。分形约束参考矩阵计算输入搬运约束。起始地址对齐约束参考对齐约束。支持的数据类型为int8_t。Atlas A2 训练系列产品/Atlas A2 推理系列产品支持的物理存储位置为L1 Buffer(TPosition: B1)。Atlas A3 训练系列产品/Atlas A3 推理系列产品支持的物理存储位置为L1 Buffer(TPosition: B1)。idx输入源操作数类型为LocalTensor。数据分形大小为128字节每个数据分形shape为16 * 32 * 2bit。起始地址对齐约束参考对齐约束。支持的数据类型为uint8_t。Atlas A2 训练系列产品/Atlas A2 推理系列产品支持的物理存储位置为L1 Buffer(TPosition: B1)。Atlas A3 训练系列产品/Atlas A3 推理系列产品支持的物理存储位置为L1 Buffer(TPosition: B1)。loadDataParam输入LoadData参数结构体类型为• LoadData2dParams具体参考LoadData2dParams结构体内参数说明。需要注意的是本接口仅支持连续的数据分形搬运不支持跳stride因此仅支持配置loadDataParam中的startIndex和repeatTimes参数其余参数未使用无需配置。数据类型支持数据类型为src和dst支持int8_tidx支持uint8_t。返回值说明无约束说明当配置loadDataParam中参数repeatTimes0时表示不执行搬运该接口将被视为NOP空操作。最大支持repeatTimes255。不支持转置功能仅支持连续的数据分形搬运不支持跳stride仅支持配置loadDataParam中的startIndex和repeatTimes参数其余参数未使用。存放索引矩阵的专用buffer空间大小为L0B Buffer大小的四分之一开发者无需配置地址MmadWithSparse接口会自动从该buffer中读取数据。仅支持L1 Buffer-L0B Buffer通路且L1 Buffer上的分形为Zn。每次迭代中的startIndex不能小于零。调用示例本接口用于配合Sparse Mmad使用完整示例请参考MmadWithSparse调用样例。【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考