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

CANNBlazeCustomKernel模块手册

Blaze Custom Kernel 层模块手册

【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

定位:blaze_custom 路径下 Kernel 层各模块的使用手册。Kernel 层负责构建 GM Tensor、驱动 BlockScheduler 循环取块坐标、调用 BlockMmad 完成单 block 计算。


§1 MatmulKernel

项目说明
头文件kernel/matmul_kernel.h
命名空间Kernel::MatmulKernel
模板签名template <class ProblemShape, class BlockMmad, class BlockScheduler>
核心职责纯 AIC matmul,GM→L1→L0→MMAD→L0C→GM

模板参数说明

参数含义
ProblemShape问题规模结构体,须含mnk字段
BlockMmadBlock 层 MMAD 实现类(须来自Block::BlockMmad特化)
BlockSchedulerScheduler 策略标签(如MatmulSwatScheduler<NO_FULL_LOAD_MODE>

Params 结构体字段

字段类型说明
problemShapeProblemShape问题规模
mmadParamsBlockMmad::ParamsGM 地址(aGmAddr, bGmAddr, cGmAddr)
l1ParamsBlockMmad::L1ParamsL1 流水参数(kL1)
schParamsBlockSchedulerOp::Params调度器参数
qbmmParamsMatmulTilingTiling 参数(baseM, baseN, baseK, dbL0C)

运行模式:仅 AIC 核心执行,AIV 直接返回(if ASCEND_IS_AIV { return; })。

支持的 dtype / trans / format

  • AType/BType:floatbfloat16_thalfint8_tfp8_e4m3_t
  • transA/transB:由BlockMmad::LayoutA/LayoutB推导(TagToTrans
  • GM Layout:NDExtLayoutPtn(行主序)/DNExtLayoutPtn(列主序),C0 = 32 / sizeof(dtype)

§2 MatmulKernelFused

项目说明
头文件kernel/matmul_kernel_fused.h
命名空间Kernel::MatmulKernelFused
模板签名template <class ProblemShape, class BlockMmad, class BlockScheduler, class Epilogue>
核心职责AIC/AIV 融合 matmul,CV 同步 + Epilogue 后处理

与 MatmulKernel 的关键差异

差异点MatmulKernelMatmulKernelFused
模板参数3 个4 个(多Epilogue
核心模式纯 AICAIC + AIV 混合
输出 TensorGM Tensor(CopyL0C2GM)UB Tensor(CopyL0C2UB)
CV 同步CrossCoreSetFlag / CrossCoreWaitFlag
EpilogueAIV 端执行后处理并写回 GM

CV 同步协议:使用CvSync::MODE(=4),AIC 通过CrossCoreSetFlag通知 AIV 数据就绪,AIV 完成 Epilogue 后通过CrossCoreSetFlag回复 AIC。Flag ID 按count / COUNT_ID_MAX % COUNT_FLAG轮转,避免信号冲突。

Params 额外字段:在 MatmulKernel 基础上增加EpilogueParams epilogueParams


§3 GroupMatmulKernel

项目说明
头文件kernel/group_matmul_kernel.h
命名空间Kernel::GroupMatmulKernel
模板签名template <class ProblemShape, class BlockMmad, class BlockScheduler, class Epilogue = void>
核心职责M 轴分组 Matmul,每组独立调度

分组机制

  • groupListGmAddr:GM 上的int64_t数组,每个元素为该组的 M 维度大小
  • 外层循环遍历groupIdx ∈ [0, groupNum),每轮:
    1. 读取groupM = groupList[groupIdx]
    2. 计算prefixM(前缀 M 偏移),用于定位 A/C 的 GM 地址
    3. B 矩阵按groupIdx * n * k偏移(每组独立 B)
    4. 调用CalcBalancedBaseM动态调整当前组的 baseM
    5. 调用bs.UpdateBaseM(curBaseM)+bs.UpdateNextProblem(shape)刷新调度器

Epilogue 默认值Epilogue = void时为纯 AIC 直写 GM;传非 void Epilogue 启用 AIC/AIV 融合路径,通过GroupMatmulEpilogueTraits判断是否启用。

TileContext 结构体:融合路径下传递给 Epilogue 的上下文,包含groupIdxgroupNumprefixMgroupMmOffsetnOffsetcurMcurNwriteMtotalMtotalNtotalK


§4 MatmulKernelMxFused(MxMatmulKernelFused)

项目说明
头文件kernel/matmul_kernel_mx_fused.h
命名空间Kernel::MxMatmulKernelFused
模板签名template <class ProblemShape, class BlockMmad, class BlockScheduler, class Epilogue>
核心职责MX 量化 matmul + CV 融合 Epilogue

与 blaze 库 MX Block 的对接

  • BlockMmad 使用 blaze 库的Blaze::Gemm::BlockMmad(MX 量化版),而非 blaze_custom Block
  • operator()调用签名:blockMmadOp(gmA, gmB, gmScaleA, gmScaleB, gmBias, ubBlockC, singleShape)
  • Init接受 4D ProblemShape,附加isBias/dbL0C参数
  • BlockScheduler 直接使用 blaze 库调度器(无BlockSchedulerSelector
  • C0_SIZE 由IsFp4<AType>()决定:FP4 → 64,FP8 → 32
  • L0CType 固定为float
  • Scale Tensor 需要额外的 layout(ScaleADNLayoutPtn/ScaleANDLayoutPtn)和 Slice
  • MxMatmulKernelFused传入 UB Tensor 触发 blaze library MX Block 的 L0C2UB 路径;当前该路径使用CopyL0C2UBSplitMTrait / DUAL_DST_SPLIT_M,Epilogue 必须按GetTaskRation()/GetSubBlockIdx()消费 M 分片

QBMMTiling 额外字段:在 baseM/baseN/baseK/dbL0C 基础上增加isBias(uint32_t)。


§5 混用禁令

默认情况下,blaze_custom 的 Kernel / Block / Scheduler 只能互相搭配,禁止与 blaze 库模块任意混用。MX C+V 的MxMatmulKernelFused是唯一明确支持的受控例外。

组合合法性说明
blaze_custom Kernel + blaze_custom Block + blaze_custom Scheduler合法标准 blaze_custom 路径
任意手工混用 blaze_custom Kernel + blaze 库 Block禁止模板参数数量、Params、SFINAE 机制不兼容
任意手工混用 blaze_custom Kernel + blaze 库 Scheduler禁止Scheduler 接口不匹配BlockSchedulerSelector
MxMatmulKernelFused+ blaze 库 BlockMmad + blaze 库 Scheduler合法MX 场景的例外,Kernel 本身引用 blaze 库头文件

§6 命名空间说明

模块命名空间说明
blaze_custom KernelKernel::Kernel::MatmulKernelKernel::MatmulKernelFused
blaze 库 KernelBlaze::Gemm::Kernel::Blaze::Gemm::Kernel::KernelMatmulBasic
blaze_custom BlockBlock::Block::BlockMmadBlock::MatmulBlockScheduler
blaze 库 BlockBlaze::Gemm::Block::Blaze::Gemm::Block::BlockMmad

两者命名空间完全独立,不存在继承关系。blaze_custom 使用Block::BlockSchedulerSelector做调度器派发,blaze 库使用GemmUniversal框架直接绑定。

【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

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

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

相关文章:

  • 亲身到店探访广州宝玑官方售后服务中心|全新服务热线及完整地址(2026年7月最新) - 亨得利钟表维修中心
  • MATLAB实战:从灰度直方图到图像增强的完整流程
  • 2026杭州临安区靠谱的蛋糕西点咖啡培训学校推荐 - 烘焙行业测评
  • tRPC.panel()性能优化:缓存机制与零开销设计原理
  • 电镀企业固废鉴别/工业园区固废危废鉴别/政府年度框架项目找哪家?斯坦德衡立:134.62万年度框架/备案493件全国前列 - 十大品牌榜
  • CANN/ops-nn Huber损失梯度算子
  • C51单片机中reentrant关键字的使用,关于MULTIPLE CALL TO FUNCTION警告的问题
  • 回溯算法实战:从分书问题到约束满足的C++实现与优化
  • Grape-Entity 部署指南:生产环境中的最佳配置与监控
  • LFM2.5-Embedding-350M-bf16开发者指南:从模型加载到推理的完整流程
  • LFM2.5-Embedding-350M-bf16性能评测:bf16精度在8个数据集上的表现分析
  • MCP协议源码解析:一次搞懂Tool、Resource、Prompt三大核心能力
  • 深度解析 GPT-5.6:大模型架构演进与复杂任务实战指南
  • 成本分析:2026苹果录音软件app哪个好用,选对一年省138元
  • Bril项目结构解析:开源教育项目的组织方式
  • FastMCP源码深度解析:一个@tool()装饰器背后到底发生了什么?
  • 2026年无机纤维喷涂行业实力之选:廊坊强晟防腐材料有限公司品牌价值深度解析 - 甄选服务推荐
  • CANN/ops-nn最大池化梯度
  • Cervus部署最佳实践:生产环境中的内核模块配置与监控
  • 苹果折叠iPhone 7月量产,能否重塑折叠屏手机市场格局?
  • 如何5分钟快速部署SingGuard-8b:一站式多模态内容安全解决方案
  • LightTrack架构详解:探测器、姿态估计器与匹配器的协同工作原理
  • 终极解决方案:3步解决macOS与Android文件传输难题
  • Qwen3-Embedding-0.6B-8bit模型优化技巧:提升嵌入质量的10个实用方法
  • 帝舵官方售后服务中心电话和热线实地考察报告+多信源验证(2026年7月更新) - 帝舵中国官方服务中心
  • 三菱CNC数据采集
  • PyTumblr社区贡献指南:如何参与开源项目开发、提交PR和解决常见问题
  • Windows 再曝高危零日:LegacyHive 权限
  • openEuler服务能力参考:一站式操作系统服务标准完全指南
  • 通过同时双击左右耳恢复出厂设置