CANN/asc-devkit废弃Gemm矩阵计算API
# Gemm废弃【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit产品支持情况产品是否支持Ascend 950PR/Ascend 950DTxAtlas A3 训练系列产品/Atlas A3 推理系列产品xAtlas A2 训练系列产品/Atlas A2 推理系列产品xAtlas 200I/500 A2 推理产品xAtlas 推理系列产品AI Core√Atlas 推理系列产品Vector CorexAtlas 训练系列产品√功能说明该接口废弃并将在后续版本移除请不要使用该接口。根据输入的切分规则将给定的两个输入张量做矩阵乘输出至结果张量。将A和B两个输入矩阵乘法在一起得到一个输出矩阵C。函数原型功能接口template typename T, typename U, typename S __aicore__ inline void Gemm(const LocalTensorT dst, const LocalTensorU src0, const LocalTensorS src1, const uint32_t m, const uint32_t k, const uint32_t n, GemmTiling tilling, bool partialsum true, int32_t initValue 0)切分方案计算接口template typename T __aicore__ inline GemmTiling GetGemmTiling(uint32_t m, uint32_t k, uint32_t n)参数说明表1接口参数说明参数名称类型说明dst输出目的操作数。Atlas 训练系列产品支持的TPosition为CO1CO2Atlas 推理系列产品AI Core支持的TPosition为CO1CO2src0输入源操作数TPosition为A1。src1输入源操作数TPosition为B1。m输入左矩阵Src0Local有效Height范围[1, 4096]。注意m可以不是16的倍数。k输入左矩阵Src0Local有效Width、右矩阵Src1Local有效Height。•当输入张量Src0Local的数据类型为float时范围[1, 8192]•当输入张量Src0Local的数据类型为half时范围[1, 16384]•当输入张量Src0Local的数据类型为int8_t时范围[1, 32768]注意k可以不是16的倍数。n输入右矩阵Src1Local有效Width范围[1, 4096]。注意n可以不是16的倍数。tilling输入切分规则类型为GemmTiling结构体具体定义为struct GemmTiling {const uint32_t blockSize 16;LoopMode loopMode LoopMode::MODE_NM;uint32_t mNum 0;uint32_t nNum 0;uint32_t kNum 0;uint32_t roundM 0;uint32_t roundN 0;uint32_t roundK 0;uint32_t c0Size 32;uint32_t dtypeSize 1;uint32_t mBlockNum 0;uint32_t nBlockNum 0;uint32_t kBlockNum 0;uint32_t mIterNum 0;uint32_t nIterNum 0;uint32_t kIterNum 0;uint32_t mTileBlock 0;uint32_t nTileBlock 0;uint32_t kTileBlock 0;uint32_t kTailBlock 0;uint32_t mTailBlock 0;uint32_t nTailBlock 0;bool kHasTail false;bool mHasTail false;bool nHasTail false;bool kHasTailEle false;uint32_t kTailEle 0;};参数说明请参考表3。partialsum输入当dst参数所在的TPosition为CO2时通过该参数控制计算结果是否搬出。•取值0搬出计算结果•取值1不搬出计算结果可以进行后续计算。initValue输入表示dst是否需要初始化。•取值0dst需要初始化dst初始矩阵保存有之前结果新计算结果会累加前一次Gemm计算结果。•取值1dst不需要初始化dst初始矩阵中数据无意义计算结果直接覆盖dst中的数据。表2src0、src1和dst的数据类型组合src0.dtypesrc1.dtypedst.dtypeint8_tint8_tint32_thalfhalffloathalfhalfhalf表3GemmTiling结构内参数说明参数名称类型说明blockSizeuint32_t固定值恒为16一个维度内存放的元素个数。loopModeLoopMode遍历模式结构体具体定义为enum class LoopMode {MODE_NM 0,MODE_MN 1,MODE_KM 2,MODE_KN 3};mNumuint32_tM轴等效数据长度参数值范围[1, 4096]。nNumuint32_tN轴等效数据长度参数值范围[1, 4096]。kNumuint32_tK轴等效数据长度参数值。•当输入张量Src0Local的数据类型为float时范围[1, 8192]。•当输入张量Src0Local的数据类型为half时范围[1, 16384]。•当输入张量Src0Local的数据类型为int8_t时范围[1, 32768]。roundMuint32_tM轴等效数据长度参数值且以blockSize为倍数向上取整范围[1, 4096]。roundNuint32_tN轴等效数据长度参数值且以blockSize为倍数向上取整范围[1, 4096]。roundKuint32_tK轴等效数据长度参数值且以c0Size为倍数向上取整。•当输入张量Src0Local的数据类型为float时范围[1, 8192]。•当输入张量Src0Local的数据类型为half时范围[1, 16384]。•当输入张量Src0Local的数据类型为int8_t时范围[1, 32768]。c0Sizeuint32_t一个block的字节长度范围[16或者32]。dtypeSizeuint32_t传入的数据类型的字节长度范围[1, 2]。mBlockNumuint32_tM轴Block个数mBlockNum mNum / blockSize。nBlockNumuint32_tN轴Block个数nBlockNum nNum / blockSize。kBlockNumuint32_tK轴Block个数kBlockNum kNum / blockSize。mIterNumuint32_t遍历M轴维度数量范围[1, 4096]。nIterNumuint32_t遍历N轴维度数量范围[1, 4096]。kIterNumuint32_t遍历K轴维度数量范围[1, 4096]。mTileBlockuint32_tM轴切分块个数范围[1, 4096]。nTileBlockuint32_tN轴切分块个数范围[1, 4096]。kTileBlockuint32_tK轴切分块个数范围[1, 4096]。kTailBlockuint32_tK轴尾块个数范围[1, 4096]。mTailBlockuint32_tM轴尾块个数范围[1, 4096]。nTailBlockuint32_tN轴尾块个数范围[1, 4096]。kHasTailboolK轴是否存在尾块。mHasTailboolM轴是否存在尾块。nHasTailboolN轴是否存在尾块。kHasTailElebool是否存在尾块元素。kTailEleuint32_tK轴尾块元素范围[1, 4096]。数据类型表4src0、src1和dst的数据类型组合src0.dtypesrc1.dtypedst.dtypeint8_tint8_tint32_thalfhalffloathalfhalfhalf返回值说明无约束说明参数mkn可以不是16对齐但因硬件原因操作数dstSrc0Local和Src1Local的shape需满足对齐要求即m方向n方向要求向上16对齐k方向根据操作数数据类型按16或32向上对齐。操作数地址对齐要求请参见通用地址对齐约束。调用示例该接口已废弃请使用Mmad接口替代。【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考