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

CANN/ops-tensor矩阵乘Kernel框架

Kernel基础框架

【免费下载链接】ops-tensorops-tensor 是 CANN (Compute Architecture for Neural Networks)算子库中提供张量类计算的基础算子库,采用模块化设计,支持灵活的算子开发和管理。项目地址: https://gitcode.com/cann/ops-tensor

公共接口说明

概述

矩阵乘 Kernel 基础框架,提供统一的模板参数、数据结构和核心流程。不同实现(Basic、QBMM MX、StreamK)在此基础上扩展特定功能,其中 QBMM MX 支持 MxFP4/MxFP8 量化、Scale 因子处理、多 Batch 维度。

详见:README.md 查看 API 清单和实现对比。

类模板概述

模板参数

参数说明
ProblemShape_问题形状类型,通常为AscendC::Te::Shape<int64_t, int64_t, int64_t, int64_t>(m, n, k, batch)
BlockMmad_BlockMmad 类,矩阵乘计算组件
BlockEpilogue_BlockEpilogue 类,后处理组件
BlockScheduler_BlockScheduler 类,任务调度组件

特殊模板参数(量化 Kernel)

参数说明
isAtomicAdd是否启用 Atomic Add 模式(QBMM MX)

说明:QBMM MX Kernel 支持isAtomicAdd参数,用于多核并行累加场景。

类模板概述

模板参数

参数说明
ProblemShape_问题形状类型,通常为AscendC::Te::Shape<int64_t, int64_t, int64_t, int64_t>(m, n, k, batch)
BlockMmad_BlockMmad 类,矩阵乘计算组件
BlockEpilogue_BlockEpilogue 类,后处理组件
BlockScheduler_BlockScheduler 类,任务调度组件

类型别名

类型说明
ProblemShape问题形状类型(继承自模板参数)
BlockMmadBlockMmad 类型(继承自模板参数)
BlockEpilogueBlockEpilogue 类型(继承自模板参数)
BlockSchedulerBlockScheduler 类型(继承自模板参数)
ATypeA 矩阵数据类型(继承自 BlockMmad)
BTypeB 矩阵数据类型(继承自 BlockMmad)
CTypeC 矩阵数据类型(继承自 BlockMmad)
BiasTypeBias 数据类型(继承自 BlockMmad)
LayoutAA 矩阵布局类型(继承自 BlockMmad)
LayoutBB 矩阵布局类型(继承自 BlockMmad)
LayoutCC 矩阵布局类型(继承自 BlockMmad)
LayoutBiasBias 布局类型(继承自 BlockMmad)
TupleShapeTile 形状类型AscendC::Te::Shape<int64_t, int64_t, int64_t, int64_t>

Layout 构建类型

类型说明
MakeLayoutAA 矩阵 Layout 构建器FrameLayoutFormat<LayoutA, ...>
MakeLayoutBB 矩阵 Layout 构建器FrameLayoutFormat<LayoutB, ...>
MakeLayoutCC 矩阵 Layout 构建器FrameLayoutFormat<LayoutC, ...>
MakeLayoutBiasBias Layout 构建器FrameLayoutFormat<LayoutBias, ...>

核心数据结构

Params
struct Params { ProblemShape problemShape; // 问题 shape (m, n, k, batch) BlockMmadParams mmadParams; // mmad 参数(包含 GM 地址) BlockEpilogueParams epilogueParams; // epilogue 参数 BlockSchedulerParams schedulerParams; // scheduler 参数 };
Arguments
struct Arguments { ProblemShape problemShape; // 问题 shape (m, n, k, batch) BlockMmadArguments mmadArgs; // mmad 参数 BlockEpilogueArguments epilogueArgs; // epilogue 参数 };

核心成员变量

变量类型说明
problemShape_TupleShape问题规模 (m, n, k, batch)
isBias_bool是否启用 bias 计算
aGmAddr___gm__ AType*A 矩阵 GM 地址
bGmAddr___gm__ BType*B 矩阵 GM 地址
cGmAddr___gm__ CType*C 矩阵 GM 地址
biasGmAddr___gm__ BiasType*Bias GM 地址(可选)

核心成员方法

构造函数

__aicore__ inline KernelMatmul()

功能:构造 Kernel 对象。

析构函数

__aicore__ inline ~KernelMatmul()

功能:析构 Kernel 对象。

Init函数

__aicore__ inline void Init(Params const& params)

功能:初始化 Kernel,提取问题规模和 GM 地址。 执行流程:

  1. 设置问题规模problemShape_
  2. 提取 BlockMmad 参数mmadParams
  3. 设置 A、B、C 的 GM 地址
  4. 判断 bias 地址是否为 nullptr,设置isBias_biasGmAddr_

operator函数

__aicore__ inline void operator()(Params const& params)

功能:执行矩阵乘 Kernel 计算。

公共执行流程

  1. 初始化:调用Init(params)设置参数
  2. BlockScheduler 初始化:创建调度器,获取 tile 信息
  3. Layout 构建:构建 A、B、C、Bias 的 ND layout
  4. GM Tensor 创建:创建 A、B、C、Bias 的 GM Tensor
  5. Tile 循环处理:遍历 tile 执行矩阵乘计算
  6. 清理:关闭 HF32/MM Layout Transform

公共调用示例

组件组装模板

// 定义数据类型和布局 using AType = half; using BType = half; using CType = float; using BiasType = float; using LayoutA = AscendC::Te::Layout::RowMajor; using LayoutB = AscendC::Te::Layout::ColMajor; using LayoutC = AscendC::Te::Layout::RowMajor; using LayoutBias = LayoutC; // 定义问题 shape using ProblemShape = AscendC::Te::Shape<int64_t, int64_t, int64_t, int64_t>; // 定义 BlockScheduler using BlockScheduler = Blaze::Gemm::Block::BlockSchedulerMatmulBasic<ProblemShape, FULL_LOAD_MODE>; // 定义 Kernel(根据需求选择 Basic 或 StreamK) using MatmulKernel = Blaze::Gemm::Kernel::KernelMatmulBasic<...>; // 或 using MatmulKernel = Blaze::Gemm::Kernel::KernelMatmulStreamK<...>;

参数准备模板

using Params = typename MatmulKernel::Params; Params params = { {m, n, k, batch}, // problem shape {aGM, bGM, cGM, biasGM}, // mmad args {...}, // epilogue args {mL1, nL1, kL1, baseM, baseN, baseK, ...} // scheduler params };

Kernel 执行模板

MatmulKernel mm; mm(params);

公共约束

  1. 模板参数要求

    • ProblemShape 必须为AscendC::Te::Shape<int64_t, int64_t, int64_t, int64_t>类型
    • BlockMmad 必须继承自相应的 BlockMmad 基类
    • BlockEpilogue 必须与 Kernel 类型匹配
    • BlockScheduler 必须提供 tile 切分和调度功能
  2. 数据格式

    • A、C、Bias:支持 ND 格式
    • B 矩阵:支持 ND 和 NZ 格式
  3. Bias 支持:可选 bias 输入,通过biasGmAddr是否为 nullptr 判断

  4. Layout 构建:使用FrameLayoutFormat根据数据类型自动适配 layout

性能优化建议(公共)

  1. Tile 大小选择

    • L1 tile:充分利用 L1 容量(通常 1MB)
    • L0 tile:匹配 L0A/L0B 容量(各 128KB)
  2. Block 数量配置:根据问题规模合理设置 block 数量

  3. HF32 模式:FP16 输入 + FP32 输出场景建议启用

  4. 数据布局:权重矩阵(B)优先使用 NZ 格式

【免费下载链接】ops-tensorops-tensor 是 CANN (Compute Architecture for Neural Networks)算子库中提供张量类计算的基础算子库,采用模块化设计,支持灵活的算子开发和管理。项目地址: https://gitcode.com/cann/ops-tensor

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

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

相关文章:

  • bezier-easing测试与基准测试:确保性能与精度的最佳实践
  • 对比直接使用原厂 API 体验 Taotoken 在多模型聚合与路由上的优势
  • 10分钟快速上手ModSecurity-nginx:从零构建企业级Web应用防火墙
  • 2026初学者电钢琴保姆级避坑指南|新手全阶段适配攻略,资深钢琴老师力荐
  • 为什么你的ElevenLabs新疆语输出总带口音?92%开发者忽略的3个IPA音系校准参数(附维吾尔语元音舌位图)
  • 大模型的商业化应用:从ToB到ToC的全场景覆盖
  • AI创业的现状与未来:大模型时代下的创业机会
  • 新手如何选购第一台电钢琴?真实经验分享,这8款闭眼入不踩坑
  • 题解:洛谷 P2845 [USACO15DEC] Switching on the Lights S
  • CANN/Ascend C:批处理矩阵乘法临时缓冲区大小计算
  • clawPDF命令行操作:10个实用技巧实现批量PDF处理
  • 如何快速安装Kimera-VIO:Ubuntu 20.04完整教程
  • 异常处理函数在WebShell免杀中的实战应用:绕过安全检测的终极指南
  • GetQzonehistory:如何用Python工具实现QQ空间数据备份的完整方案
  • Lawnicons疑难解答:常见问题与解决方案大全
  • article-extractor实战:5个真实场景下的文章提取解决方案
  • 在线去除视频水印用什么工具?2026 免费工具推荐及实测对比 - 科技热点发布
  • UnattendGenerator实战案例:如何批量部署Windows系统
  • 工业AI模型全生命周期管理:AI模型养成记
  • 抖音视频怎样去水印?2026 抖音去水印方法全解析,免费在线工具实测对比 - 科技热点发布
  • 【荷兰语语音生成黄金标准】:基于176小时母语者听感测试的ElevenLabs参数调优白皮书
  • 小红书下载视频如何去水印?2026 最新下载无水印教程和实用工具 - 科技热点发布
  • 即梦视频怎么去水印?即梦AI水印怎么去除?2026最新手机去水印方法盘点 - 科技热点发布
  • R3nzSkin国服特供版:英雄联盟免费换肤工具完整使用指南
  • 2026年免费去水印在线工具推荐|去水印工具哪个最好用?实测对比 - 科技热点发布
  • SWOT分析是什么
  • 小红书视频怎么下载?2026最新下载方法+去水印工具盘点丨无损保存高清素材 - 科技热点发布
  • 抖音视频怎么去水印?2026免费去水印工具+方法完全指南 - 科技热点发布
  • 浩卡联盟一级代理邀请码16888,注册必填全网佣金置顶0抽成(附带注册攻略+使用教程) - 流量卡代理招商
  • CMake set的使用