Ascend C稀疏矩阵乘加函数文档
asc_mmad_sparse【免费下载链接】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 训练系列产品不支持功能说明头文件路径c_api/cube_compute/cube_compute.h。完成矩阵乘加操作传入的左矩阵A为稠密矩阵右矩阵B为稀疏矩阵。对于矩阵A在asc_mmad_sparse计算时完成稠密化对于矩阵B在计算执行前的输入数据准备时自行完成稠密化按照下文中介绍的稠密算法进行稠密化所以输入本接口的矩阵A为稠密矩阵。稠密矩阵A需要通过asc_copy_l12l0b_sparse载入同时加载索引矩阵索引矩阵在矩阵B稠密化的过程中生成再用于矩阵A的稠密化。函数原型常规计算__aicore__ inline void asc_mmad_sparse(__cc__ int32_t* c, __ca__ int8_t* a, __cb__ int8_t* b, uint16_t m, uint16_t k, uint16_t n, uint8_t unit_flag, bool c_matrix_source, bool c_matrix_init_val)同步计算__aicore__ inline void asc_mmad_sparse_sync(__cc__ int32_t* c, __ca__ int8_t* a, __cb__ int8_t* b, uint16_t m, uint16_t k, uint16_t n, uint8_t unit_flag, bool c_matrix_source, bool c_matrix_init_val)参数说明参数名输入/输出描述c输出目的操作数结果矩阵C起始地址需要1024字节对齐。a输入源操作数左矩阵A起始地址需要512字节对齐。b输入源操作数右矩阵B起始地址需要512字节对齐。m输入左矩阵Height取值范围m∈[0,4095]。k输入左矩阵Width、右矩阵Height取值范围k∈[0,4095]。n输入右矩阵Width取值范围n∈[0,4095]。unit_flag输入unit_flag是一种Mmad指令和Fixpipe指令细粒度的并行开启该功能后硬件每计算完一个分形计算结果就会被搬出该功能不适用于L0C Buffer累加的场景。取值说明如下0保留值。2开启unit_flag硬件执行完指令后不会关闭unit_flag功能。3开启unit_flag硬件执行完指令后会关闭unit_flag功能。开启该功能时Mmad指令的unit_flag在最后一个分形设置为3其余分形计算设置为2即可。c_matrix_source输入配置C矩阵初始值是否来源于BiasTable Buffer存放Bias的硬件缓存区。取值说明如下• true来源于BiasTable Buffer。• false来源于L0C Buffer。c_matrix_init_val输入配置C矩阵初始值是否为0。取值说明如下• trueC矩阵初始值为0。• falseC矩阵初始值通过c_matrix_source参数进行配置。返回值说明无流水类型PIPE_M约束说明原始稀疏矩阵B每4个元素中应保证最多2个非零元素如果存在3个或更多非零元素则仅使用前2个非零元素。当m、k、n中的任意一个值为0时该指令不会被执行。稠密算法说明假设原始稀疏矩阵B的每4个元素中至少有2个零稠密化后的矩阵B是一个在每4个元素中过滤掉2个零的稠密矩阵。矩阵B稠密化的过程中生成索引矩阵过程如下对于稀疏矩阵B中的每4个元素将在index矩阵中生成2个2位索引并按照以下规则进行编码。索引必须在{0, 1, 2}范围内。•第一个索引用于指示前3个元素中第1个非零元素的相对位置。•第二个索引用于指示第2个非零元素在后3个元素中的相对位置。具体可参考下表。其中“-”表示算法不关心该位置上的值因为其会被过滤。示例ele0ele1ele2ele3Index_a[i]Index_b[i]Two non-zero elements00XY2b102b100X0Y2b012b10X00Y2b002b100XY-2b012b01X0Y-2b002b01XY--2b002b00One non-zero element000X2b002b1000X02b102b000X002b012b00X0002b002b00All zero00002b002b00该索引矩阵用于A矩阵的稠密化根据索引矩阵从MatrixA中的4个元素中选择2个元素参与计算如下图所示调用示例constexpr uint32_t total_length 128; __ca__ int8_t a[total_length]; __cb__ int8_t b[total_length]; __cc__ int32_t c[total_length]; uint16_t m 2; uint16_t k 2; uint16_t n 1; uint8_t unit_flag 2; bool c_matrix_source true; bool c_matrix_init_val true; asc_mmad_sparse(c, a, b, m, k, n, unit_flag, c_matrix_source, c_matrix_init_val);【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考