Skip to content

asc_copy_l12l0b_sparse

产品支持情况

  • Ascend 950PR/Ascend 950DT:不支持
  • Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
  • Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
  • Atlas 200I/500 A2 推理产品:不支持
  • Atlas 推理系列产品AI Core:不支持
  • Atlas 推理系列产品Vector Core:不支持
  • Atlas 训练系列产品:不支持

功能说明

用于搬运存放在L1 Buffer里的512B大小的稠密权重矩阵到L0B Buffer里,同时读取128B大小的索引矩阵用于稠密矩阵的稀疏化。

索引矩阵在一个int8_t的地址中的排布是逆序排布的,例如:索引矩阵1 2 0 1 0 2 1 0,在地址中的排布为1 0 2 1 0 1 2 0,其中1 0 2 1(对应索引矩阵前四位1 2 0 1)拼成一个int8_t数据,0 1 2 0(对应索引矩阵后四位0 2 1 0)拼成一个int8_t数据。

函数原型

  • 高维切分搬运

    C++
    __aicore__ inline void asc_copy_l12l0b_sparse(__cb__ int8_t* dst, __cbuf__ int8_t* src, __cbuf__ int8_t* index, uint16_t start_index, uint8_t repeat)
    
  • 同步搬运

    C++
    __aicore__ inline void asc_copy_l12l0b_sparse_sync(__cb__ int8_t* dst, __cbuf__ int8_t* src, __cbuf__ int8_t* index, uint16_t start_index, uint8_t repeat)
    

参数说明

表1 参数说明

参数名输入/输出描述
dst输出目的操作数在L0B Buffer的起始地址。
src输入源操作数在L1 Buffer的起始地址。
index输入索引矩阵在L1 Buffer的起始地址。
start_index输入分形矩阵ID,说明搬运起始位置为源操作数中第几个分形(0为源操作数中第1个分形矩阵)。取值范围:[0, 65535]。单位:512B。
repeat输入迭代次数,每个迭代可以处理512B数据。取值范围:[1, 255]。

返回值说明

流水类型

PIPE_MTE1

约束说明

  • 各存储单元的空间大小和对齐要求请参考存储单元说明
  • 操作数地址重叠约束请参考通用地址重叠约束
  • repeat为0表示不执行。
  • start_index不能小于0。
  • 不支持转置功能。

调用示例

C++
__cb__ int8_t dst[256];
__cbuf__ int8_t src[256];
__cbuf__ int8_t index[64];
uint16_t start_index = 1;
uint8_t repeat = 8;
asc_copy_l12l0b_sparse(dst, src, index, start_index, repeat);

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