news 2026/7/17 8:29:45

CANN/Ascend C Matmul模板参数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN/Ascend C Matmul模板参数

Matmul模板参数

【免费下载链接】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 训练系列产品:不支持
  • Kirin X90:支持
  • Kirin 9030:支持

功能说明

创建Matmul对象时需要传入:

  • A、B、C、Bias的参数类型信息,类型信息通过MatmulType来定义,包括:内存逻辑位置、数据格式、数据类型、是否转置、数据排布和是否开启L1复用。

  • MatmulConfig信息(可选),用于配置Matmul模板信息以及相关的配置参数。不配置默认使用Norm模板。

    针对Atlas 200I/500 A2 推理产品,当前只支持使用默认的Norm模板。

  • MatmulCallBackFunc回调函数信息(可选),用于配置A矩阵从GM拷贝到L1 Buffer(A1)、B矩阵从GM拷贝到L1 Buffer(B1)、计算结果从L0C Buffer(CO1)拷贝到GM的自定义函数。当前支持如下产品型号:

    Ascend 950PR/Ascend 950DT

    Atlas A3 训练系列产品/Atlas A3 推理系列产品

    Atlas A2 训练系列产品/Atlas A2 推理系列产品

    Kirin X90

  • MatmulPolicy信息(可选),用于配置Matmul可拓展模块策略。不配置使用默认模板策略。当前支持如下产品型号:

    Ascend 950PR/Ascend 950DT

    Atlas A3 训练系列产品/Atlas A3 推理系列产品

    Atlas A2 训练系列产品/Atlas A2 推理系列产品

    Atlas 200I/500 A2 推理产品

    Atlas 推理系列产品AI Core

    Kirin X90

函数原型

Matmul模板参数如下:

template <class A_TYPE, class B_TYPE, class C_TYPE, class BIAS_TYPE = C_TYPE, const auto& MM_CFG = CFG_NORM, class MM_CB = MatmulCallBackFunc<nullptr, nullptr, nullptr>, MATMUL_POLICY_DEFAULT_OF(MatmulPolicy)>
  • A_TYPE、B_TYPE、C_TYPE类型信息通过MatmulType来定义。

  • auto类型的参数MM_CFG(可选):

    • 支持MatmulConfig类型:

      Matmul模板信息,具体内容见MatmulConfig。

    • 支持MatmulApiStaticTiling类型:

      MatmulApiStaticTiling参数说明见表1。

      MatmulApiStaticTiling结构体中包括一组常量化Tiling参数和MatmulConfig结构。这种类型参数的定义方式为,通过调用MatmulConfig章节中介绍的获取模板的接口,指定(singleM, singleN, singleK, baseM, baseN, baseK)参数,获取自定义模板;将该模板传入GetMatmulApiTiling接口,得到常量化的参数。这种常量化的方式将得到MatmulApiStaticTiling结构体中定义的一组常量化参数,可以优化Matmul计算中的Scalar计算。当前支持定义为MatmulApiStaticTiling常量化的Tiling参数的模板有:Norm、IBShare、MDL模板。MxMatmul场景支持定义为MatmulApiStaticTiling常量化的Tiling参数的模板有:Norm、MDL模板。

  • MM_CB(可选),用于支持不同的搬入搬出需求,实现定制化的搬入搬出功能。具体内容见MatmulCallBackFunc。

  • MATMUL_POLICY_DEFAULT_OF(MatmulPolicy)(可选),用于配置Matmul可拓展模块的策略。当前支持不配置该参数(使用默认模板策略)或者配置1个MatmulPolicy参数。

    MATMUL_POLICY_DEFAULT_OF定义如下,用于简化MATMUL_POLICY的类型声明。该模板参数的详细使用方式请参考MatmulPolicy。

    #define MATMUL_POLICY_DEFAULT_OF(DEFAULT) \ template <const auto& = MM_CFG, typename ...> \ class MATMUL_POLICY = AscendC::Impl::Detail::DEFAULT

参数说明

表1MatmulApiStaticTiling常量化Tiling参数说明

| 参数 | 数据类型 | 说明 | | --- | --- | --- | | M, N, Ka, Kb,

singleCoreM, singleCoreN, singleCoreK,

baseM, baseN, baseK,

depthA1, depthB1,

stepM, stepN,stepKa,stepKb,

isBias,

transLength,

iterateOrder,

dbL0A, dbL0B,

dbL0C,

shareMode,

shareL1Size,

shareL0CSize,

shareUbSize,

batchM,

batchN,

singleBatchM,

singleBatchN,

mxTypePara | int32_t | 与TCubeTiling结构体中各同名参数含义一致。本结构体中的参数是常量化后的常数值。 | | cfg | MatmulConfig | Matmul模板的参数配置。 |

返回值说明

约束说明

调用示例

// 用户自定义回调函数 void DataCopyOut( const __gm__ void* gm, const LocalTensor<int8_t>& co1Local, const void* dataCopyOutParams, const uint64_t tilingPtr, const uint64_t dataPtr); void CopyA1( const AscendC::LocalTensor<int8_t>& aMatrix, const __gm__ void* gm, int row, int col, int useM, int useK, const uint64_t tilingPtr, const uint64_t dataPtr); void CopyB1( const AscendC::LocalTensor<int8_t>& bMatrix, const __gm__ void* gm, int row, int col, int useK, int useN, const uint64_t tilingPtr, const uint64_t dataPtr); // 定义创建对象时需要传入的A、B、C、Bias参数类型信息 typedef AscendC::MatmulType<AscendC::TPosition::GM, CubeFormat::ND, half> aType; typedef AscendC::MatmulType<AscendC::TPosition::GM, CubeFormat::ND, half> bType; typedef AscendC::MatmulType<AscendC::TPosition::GM, CubeFormat::ND, float> cType; typedef AscendC::MatmulType<AscendC::TPosition::GM, CubeFormat::ND, float> biasType; // 使用MDL模板,创建Matmul实例 AscendC::Matmul<aType, bType, cType, biasType, CFG_MDL> mm1; AscendC::MatmulConfig mmConfig{false /*不使用Norm模板*/, true /*使用BasicBlock模板*/, false /*不使用MDL模板*/, 128 /*Matmul计算时base块M轴长度*/, 128 /*Matmul计算时base块N轴长度*/, 64 /*Matmul计算时base块K轴长度*/}; mmConfig.enUnitFlag = false; // 不开启UnitFlag功能 // 使用自定义的mmConfig,创建Matmul实例 AscendC::Matmul<aType, bType, cType, biasType, mmConfig> mm2; // 使用NORM模板、自定义的mmConfig和自定义的回调函数,创建Matmul实例 AscendC::Matmul<aType, bType, cType, biasType, CFG_NORM, AscendC::MatmulCallBackFunc<DataCopyOut, CopyA1, CopyB1>> mm3;

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 8:28:17

3分钟掌握网易云音乐NCM解密:ncmdump让你的音乐自由播放

3分钟掌握网易云音乐NCM解密&#xff1a;ncmdump让你的音乐自由播放 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经为网易云音乐下载的NCM格式文件无法在其他设备上播放而烦恼&#xff1f;这些加密的音乐文件只能在网易云…

作者头像 李华
网站建设 2026/7/17 8:27:14

LLM Agent规划能力构建:从任务分解到动态调整的五大核心维度

1. 项目概述&#xff1a;为什么“规划”是LLM Agent的命门&#xff1f; 最近和不少做LLM应用的朋友聊天&#xff0c;发现一个挺有意思的现象&#xff1a;大家一窝蜂地都在搞“Agent”&#xff0c;但聊到深处&#xff0c;十个里有八个会卡在“规划”这个环节上。一个Agent&#…

作者头像 李华
网站建设 2026/7/17 8:24:36

WSL2图形化界面配置指南:使用VcXsrv与xfce4

1. 为什么要在WSL2上使用图形化界面&#xff1f; Windows Subsystem for Linux 2&#xff08;WSL2&#xff09;作为微软推出的Linux子系统&#xff0c;已经成为开发者日常工作的利器。但默认情况下&#xff0c;WSL2只提供命令行界面&#xff0c;这对于需要图形界面&#xff08;…

作者头像 李华
网站建设 2026/7/17 8:23:34

CANN Ascend C矩阵计算SetFixSplit函数

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

作者头像 李华
网站建设 2026/7/17 8:22:26

广东广氟新材料|高品质 PTFE 系列功能膜材应用指南

在高端电子、通讯、精密制造、防护封装等产业快速迭代的当下&#xff0c;高性能膜材成为决定产品稳定性、使用寿命与核心性能的关键基础材料。PTFE聚四氟乙烯膜凭借优异的介电性能、耐高低温、耐腐蚀、低摩擦及高稳定性等特性&#xff0c;被广泛应用于各类高精尖工业场景&#…

作者头像 李华