当前位置: 首页 > news >正文

AscendC Matmul Tiling使用说明

Matmul Tiling类使用说明

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

Ascend C提供一组Matmul Tiling API,方便用户获取Matmul kernel计算时所需的Tiling参数。用户只需要传入A/B/C矩阵的Position位置、Format格式和DType数据类型等信息,调用API接口,即可获取到Init中TCubeTiling结构体中的相关参数。

Matmul Tiling API分为Matmul单核Tiling接口、多核Tiling接口和BatchMatmul Tiling接口,分别用于Matmul单核计算、多核计算和BatchMatmul计算场景。获取Tiling参数的流程如下:

  1. 创建一个单核Tiling对象,或多核Tiling对象,或BatchMatmul Tiling对象。
  2. 设置A、B、C、Bias的参数类型信息;M、N、Ka、Kb形状信息等。
  3. 调用GetTiling接口,获取Tiling信息。

使用Matmul单核Tiling接口、多核Tiling接口和BatchMatmul Tiling接口获取Tiling参数的样例如下:

  • Matmul单核Tiling

    auto ascendcPlatform = platform_ascendc::PlatformAscendC(context->GetPlatformInfo()); matmul_tiling::MatmulApiTiling tiling(ascendcPlatform); // 设置A、B、C、Bias矩阵Position、Format、DType信息 tiling.SetAType(matmul_tiling::TPosition::GM, matmul_tiling::CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT16); tiling.SetBType(matmul_tiling::TPosition::GM, matmul_tiling::CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT16); tiling.SetCType(matmul_tiling::TPosition::GM, matmul_tiling::CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT); tiling.SetBiasType(matmul_tiling::TPosition::GM, matmul_tiling::CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT); tiling.SetShape(1024, 1024, 1024); // 设置单核计算的M、N、K大小 tiling.SetOrgShape(1024, 1024, 1024); // 设置原始输入M、N、K大小,单核Tiling与SetShape一致。 // 若Ka,Kb不等长时,设置tiling.SetOrgShape(1024,1024, 1024, 1280) tiling.EnableBias(true); // 设置matmul计算包含bias tiling.SetBufferSpace(-1, -1, -1); // 设定允许使用的空间,缺省使用该AI处理器所有空间 optiling::TCubeTiling tilingData; int64_t ret = tiling.GetTiling(tilingData); // if ret = -1, get tiling failed
  • Matmul多核Tiling

    auto ascendcPlatform = platform_ascendc::PlatformAscendC(context->GetPlatformInfo()); matmul_tiling::MultiCoreMatmulTiling tiling(ascendcPlatform); tiling.SetDim(1); // 设置参与计算的核数为1 tiling.SetAType(matmul_tiling::TPosition::GM, matmul_tiling::CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT16); tiling.SetBType(matmul_tiling::TPosition::GM, matmul_tiling::CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT16); tiling.SetCType(matmul_tiling::TPosition::GM, matmul_tiling::CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT); tiling.SetBiasType(matmul_tiling::TPosition::GM, matmul_tiling::CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT); tiling.SetShape(1024, 1024, 1024); tiling.SetSingleShape(1024, 1024, 1024); tiling.SetOrgShape(1024, 1024, 1024); tiling.EnableBias(true); tiling.SetBufferSpace(-1, -1, -1); // 设定允许使用的空间,缺省使用该AI处理器所有空间 optiling::TCubeTiling tilingData; int64_t ret = tiling.GetTiling(tilingData); // if ret = -1, get tiling failed
  • BatchMatmul Tiling

    auto ascendcPlatform = platform_ascendc::PlatformAscendC(context->GetPlatformInfo()); matmul_tiling::BatchMatmulTiling bmmTiling(ascendcPlatform); bmmTiling.SetAType(matmul_tiling::TPosition::GM, matmul_tiling::CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT16); bmmTiling.SetBType(matmul_tiling::TPosition::GM, matmul_tiling::CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT16); bmmTiling.SetCType(matmul_tiling::TPosition::GM, matmul_tiling::CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT); bmmTiling.SetBiasType(matmul_tiling::TPosition::GM, matmul_tiling::CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT); bmmTiling.EnableBias(true); bmmTiling.SetShape(64, 48, 32); bmmTiling.SetSingleShape(64, 48, 32); bmmTiling.SetOrgShape(64, 48, 32); // Layout类型为NORMAL时,通过SetBatchInfoForNormal设置A、B、C矩阵的Layout轴信息 bmmTiling.SetBatchInfoForNormal(2, 2, 64, 48, 32); // Layout类型为BSNGD、SBNGD、BNGS1S2时,通过SetALayout、SetBLayout、SetCLayout设置A、B、C矩阵的Layout轴信息 // bmmTiling.SetALayout(3, 64, 2, 2, 32); // bmmTiling.SetBLayout(3, 32, 2, 2, 48); // bmmTiling.SetCLayout(3, 64, 2, 2, 48); bmmTiling.SetBatchNum(2); bmmTiling.SetBufferSpace(-1, -1, -1); // 设定允许使用的空间,缺省使用该AI处理器所有空间 optiling::TCubeTiling tilingData; int64_t ret = bmmTiling.GetTiling(tilingData); // if ret = -1, get tiling failed

接口列表如下:

表1MatmulApiTiling/MultiCoreMatmulTiling/BatchMatmulTiling共有接口列表

接口功能
SetAType设置A矩阵的位置,数据格式,数据类型,是否转置等信息。
SetBType设置B矩阵的位置,数据格式,数据类型,是否转置等信息。
SetCType设置C矩阵的位置,数据格式,数据类型等信息。
SetDequantType设置反量化的模式。
SetBiasType设置Bias的位置,数据格式,数据类型等信息。
SetShape设置Matmul单次计算的形状singleM、singleN、singleK,单位为元素个数。
SetOrgShape设置Matmul计算时的原始完整的形状M、N、Ka、Kb,单位为元素个数。
SetALayout设置A矩阵的Layout轴信息。
SetBLayout设置B矩阵的Layout轴信息。
SetCLayout设置C矩阵的Layout轴信息。
SetBatchInfoForNormal设置A/B矩阵的M/N/K轴信息,以及A/B矩阵各自的Batch数。
SetBatchNum设置多Batch计算的最大Batch数。
EnableBias设置Bias是否参与运算。
SetBias设置Bias是否参与运算。建议使用EnableBias接口。
SetFixSplit设置固定的baseM、baseN、baseK,单位为元素个数。
SetBufferSpace设置Matmul计算时可用的L1/L0C/UB空间大小,单位为字节。
SetTraverse设置遍历方式,M轴优先还是N轴优先。
SetMadType设置是否开启HF32模式。当前版本暂不支持。
SetSplitRange设置baseM/baseN/baseK的最大值和最小值。
SetMatmulConfigParams自定义设置MatmulConfig参数。
SetDoubleBuffer设置A/B/C/Bias是否开启double buffer功能,以及是否需要做ND2NZ或者NZ2ND的转换。该接口为预留接口,当前版本暂不支持。
GetBaseM获取baseM值。
GetBaseN获取baseN值。
GetBaseK获取baseK值。
GetTiling获取Tiling参数。

表2MultiCoreMatmulTiling其他接口

接口功能
SetDim设置多核Matmul时,可以参与运算的核数。
SetSingleRange设置singleCoreM/singleCoreN/singleCoreK的最大值与最小值,单位为元素个数。
SetSingleShape设置Matmul单核计算的形状singleCoreM、singleCoreN、singleCoreK,单位为元素个数。
GetSingleShape获取计算后的singleCoreM/singleCoreN/singleCoreK。
SetAlignSplit设置多核切分时singleCoreM/singleCoreN/singleCoreK的对齐值。
GetCoreNum获得多核切分后,使用的numBlocks。
SetSplitK多核场景,开启切K轴。建议使用EnableMultiCoreSplitK接口。
EnableMultiCoreSplitK多核场景,开启切K轴。

表3BatchMatmulTiling其他接口

接口功能
GetCoreNum获得多核切分后,使用的numBlocks。

需要包含的头文件

  • Matmul单核Tiling

    #include "lib/matmul/matmul_tiling.h"
  • Matmul多核Tiling

    #include "lib/matmul/bmm_tiling.h"
  • BatchMatmul Tiling

    #include "lib/matmul/bmm_tiling.h"

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/1208254/

相关文章:

  • 彻底解决Java JCE加密限制:Illegal key size异常分析与实战方案
  • GPT-5.6与Fable 5代码智能体深度对比与实战集成指南
  • ASCII Art实时ASCII艺术渲染库:5分钟快速入门指南
  • RDP Wrapper终极指南:3分钟免费解锁Windows远程桌面完整功能
  • Windows 11安装指南:从硬件检查到系统优化
  • 办公设计刚需!2026十大无版权图片网站有哪些?可高清大图下载网站推荐
  • 深圳奢侈品回收怎么避坑|2026门店实力甄选、行情研判与套路拆解攻略 - 全国二奢机构参考
  • CANN/asc-devkit ReduceXorSum临时空间接口
  • A40I平台与ADS1015 ADC芯片的工业数据采集方案
  • Go-Queryset案例研究:知名公司如何使用类型安全ORM提升开发效率
  • 飞腾派4G与MAX7219数码管驱动开发实战
  • 创建自定义图标集:使用createIconSet打造专属图标库
  • 16.1.智能密码锁-单片机毕业生设计【STM32-Arduino(单机】
  • 为什么每个TypeScript开发者都需要ts-extras?5大核心优势解析
  • DeepSeek-OCR Client与商业OCR工具对比:开源优势与使用场景分析
  • 从卡壳到爆发,Claude头脑风暴全流程拆解,深度解析3类典型失效场景及实时干预策略
  • CW32开发板驱动MPU6050传感器实战指南
  • 【JAVA毕设源码分享】基于springboot+vue智能水产养殖管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • Windows 10安装.NET 3.5的6种解决方案与深度解析
  • 2026常德危房鉴定检测怎么选?老旧房危房鉴定靠谱机构 TOP 结构安全检测+ 报告可查 电话汇总 - 中业金奢再生回收中心
  • 医学多模态大模型落地:400万预算打造AI能力闭环,小白程序员必收藏!
  • 终极指南:error-chain与其他Rust错误处理库对比:anyhow、thiserror、snafu
  • 3.5寸TFT彩屏SPI驱动方案在环境检测仪中的应用实践
  • IntelliJ IDEA 2026.2版本发布:支持新技术、升级AI,还修复超1300项错误!
  • AI在商业决策中的应用与核心技术解析
  • 自学者技术优势解析:非线性学习与问题导向的创新突破
  • Charge-BleMessage
  • 2026广州A-Level国际高中怎么选:华美英语实验学校30多年办学经验与16万平校园优势深度解析 - 运营方法论
  • Cursor搜索响应超2s?立即执行这6项性能调优操作,5分钟内见效
  • 北京古驰包包回收热门款热度不减,经典双环扣酒神包成色分级标准透明 - 分享测评官