GetMatmulApiTiling【免费下载链接】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 推理产品xAtlas 推理系列产品 AI CorexAtlas 推理系列产品 Vector CorexAtlas 训练系列产品xKirin X90√功能说明本接口用于在编译期间获取常量化的Matmul Tiling参数。Matmul Tiling常量化功能为在编译期期间获取常量化的Matmul Tiling参数并进行算子编译从而减少Scalar计算开销提升算子整体性能。具体为在获取Matmul模板时可以确定MatmulConfig的singleCore ShapeMatmulConfig中的singleCoreM/singleCoreN/singleCoreK和Base ShapeMatmulConfig中的basicM/basicN/basicK参数或者只确定Base Shape参数通过指定获取模板的接口中的singleCore Shape和Base Shape参数或者只指定Base Shape参数获取自定义模板然后调用本接口得到常量化的Matmul Tiling参数。当在调用获取MatmulConfig模板的接口时只将(baseM, baseN, baseK)设置为常数值时称为部分常量化此时(singleCoreM, singleCoreN, singleCoreK)都保持默认值0部分常量化场景在Kernel侧使用REGIST_MATMUL_OBJ初始化Matmul对象时仍需要使用Tiling将(baseM, baseN, baseK, singleCoreM, singleCoreN, singleCoreK)都设置为常数值时称为全量常量化这时可以在REGIST_MATMUL_OBJ的入参传递Tiling参数的位置使用空指针替代。经过上述部分常量化或全部常量化后将得到带有常量化参数的MatmulConfig模板然后使用本接口将Tiling参数常量化。本接口的返回值包含常量化的Matmul Tiling参数和MatmulConfig模板。函数原型templateclass A_TYPE, class B_TYPE, class C_TYPE, class BIAS_TYPE __aicore__ constexpr MatmulApiStaticTiling GetMatmulApiTiling(const MatmulConfig mmCFG, int32_t l1Size Impl::L1_SIZE)参数说明表 1模板参数说明参数名描述A_TYPEA矩阵类型信息通过MatmulType来定义。B_TYPEB矩阵类型信息通过MatmulType来定义。C_TYPEC矩阵类型信息通过MatmulType来定义。BIAS_TYPEBIAS矩阵类型信息通过MatmulType来定义。表 2参数说明参数名输入/输出描述mmCFG输入获取的MatmulConfig模板。对于Ascend 950PR/Ascend 950DT支持常量化的为全部模板Norm, IBShare, MDL模板。对于Atlas A3 训练系列产品 / Atlas A3 推理系列产品支持常量化的模板有Norm, MDL模板。对于Atlas A2 训练系列产品 / Atlas A2 推理系列产品支持常量化的模板有Norm, MDL模板。对于Kirin X90支持常量化的模板有Norm, MDL模板。l1Size输入可用的L1大小默认值L1_SIZE。返回值说明MatmulApiStaticTiling约束说明入参mmCFG在调用获取MatmulConfig模板的接口获取时需要使用常数值指定(baseM, baseN, baseK)或者指定(baseM, baseN, baseK, singleCoreM, singleCoreN, singleCoreK)并且指定的参数值需要和Tiling计算的值保持一致。Batch Matmul场景支持全量常量化但不支持使用空指针替代REGIST_MATMUL_OBJ的入参Tiling。调用示例//定义Matmul对象 typedef AscendC::MatmulTypeAscendC::TPosition::GM, CubeFormat::ND, half aType; typedef AscendC::MatmulTypeAscendC::TPosition::GM, CubeFormat::ND, half bType; typedef AscendC::MatmulTypeAscendC::TPosition::GM, CubeFormat::ND, float cType; typedef AscendC::MatmulTypeAscendC::TPosition::GM, CubeFormat::ND, float biasType; // 这里CFG使用GetNormalConfig接口获取并指定已知的singleshape信息和baseM,baseN,baseK指定的数值跟运行时tiling保持一致 constexpr auto staticTiling GetMatmulApiTilingaType, bType, cType, biasType(CFG, 524288); // 该示例L1 Buffer可用大小为512KB AscendC::MatmulaType, bType, cType, biasType, staticTiling mm;【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考