Skip to content

LoadDataWithSparse

产品支持情况

  • 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)为一个uint8,0 1 2 0(对应索引矩阵后四位0 2 1 0)为一个uint8。

仅支持如下数据通路的搬运:L1 Buffer->L0B Buffer。

图1 L1 Buffer->L0B Buffer LoadDataWithSparse示意图,LoadData2dParams参数配置startIndex = 1,repeatTimes = 5,表示需要从源操作数src中第1块数据分形开始搬运5块连续的数据分形,从源操作数idx中第1块index分形开始搬运5块连续的index分形。

函数原型

C++
template <typename T = int8_t, typename U = uint8_t, typename Std::enable_if<Std::is_same<PrimT<T>, int8_t>::value, bool>::type = true, typename Std::enable_if<Std::is_same<PrimT<U>, uint8_t>::value, bool>::type = true>
__aicore__ inline void LoadDataWithSparse(const LocalTensor<T>& dst, const LocalTensor<T>& src, const LocalTensor<U>& idx, const LoadData2dParams& loadDataParam)

参数说明

表1 模板参数说明

参数名描述
Tdst、src的数据类型。
Uidx的数据类型。
Std::enable_if<Std::is_same<PrimT<T>, int8_t>::value, bool>::type用于T的数据类型检查,用户无需关注。
Std::enable_if<Std::is_same<PrimT<U>, 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_t,idx支持uint8_t。

返回值说明

约束说明

  • 当配置loadDataParam中参数repeatTimes=0时,表示不执行搬运,该接口将被视为NOP(空操作)。最大支持repeatTimes=255。
  • 不支持转置功能,仅支持连续的数据分形搬运,不支持跳stride,仅支持配置loadDataParam中的startIndex和repeatTimes参数,其余参数未使用。
  • 存放索引矩阵的专用buffer空间大小为L0B Buffer大小的四分之一,开发者无需配置地址,MmadWithSparse接口会自动从该buffer中读取数据。
  • 仅支持L1 Buffer->L0B Buffer通路,且L1 Buffer上的分形为Zn。
  • 每次迭代中的startIndex不能小于零。

调用示例

本接口用于配合Sparse Mmad使用,完整示例请参考:MmadWithSparse调用样例

免责声明:本站内容由 asc-devkit 仓 master 分支自动编译生成,属于持续开发版本,可能存在缺陷,仅供预览与参考。如需稳定及商用资料,请查阅官方 昇腾社区