CANNBlazeCustomKernel模块手册

📅 2026/7/16 21:06:16
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 matmulGM→L1→L0→MMAD→L0C→GM模板参数说明参数含义ProblemShape问题规模结构体须含m、n、k字段BlockMmadBlock 层 MMAD 实现类须来自Block::BlockMmad特化BlockSchedulerScheduler 策略标签如MatmulSwatSchedulerNO_FULL_LOAD_MODEParams 结构体字段字段类型说明problemShapeProblemShape问题规模mmadParamsBlockMmad::ParamsGM 地址aGmAddr, bGmAddr, cGmAddrl1ParamsBlockMmad::L1ParamsL1 流水参数kL1schParamsBlockSchedulerOp::Params调度器参数qbmmParamsMatmulTilingTiling 参数baseM, baseN, baseK, dbL0C运行模式仅 AIC 核心执行AIV 直接返回if ASCEND_IS_AIV { return; }。支持的 dtype / trans / formatAType/BTypefloat、bfloat16_t、half、int8_t、fp8_e4m3_t等transA/transB由BlockMmad::LayoutA/LayoutB推导TagToTransGM LayoutNDExtLayoutPtn行主序/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 融合 matmulCV 同步 Epilogue 后处理与 MatmulKernel 的关键差异差异点MatmulKernelMatmulKernelFused模板参数3 个4 个多Epilogue核心模式纯 AICAIC AIV 混合输出 TensorGM TensorCopyL0C2GMUB TensorCopyL0C2UBCV 同步无CrossCoreSetFlag / CrossCoreWaitFlagEpilogue无AIV 端执行后处理并写回 GMCV 同步协议使用CvSync::MODE4AIC 通过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每组独立调度分组机制groupListGmAddrGM 上的int64_t数组每个元素为该组的 M 维度大小外层循环遍历groupIdx ∈ [0, groupNum)每轮读取groupM groupList[groupIdx]计算prefixM前缀 M 偏移用于定位 A/C 的 GM 地址B 矩阵按groupIdx * n * k偏移每组独立 B调用CalcBalancedBaseM动态调整当前组的 baseM调用bs.UpdateBaseM(curBaseM)bs.UpdateNextProblem(shape)刷新调度器Epilogue 默认值Epilogue void时为纯 AIC 直写 GM传非 void Epilogue 启用 AIC/AIV 融合路径通过GroupMatmulEpilogueTraits判断是否启用。TileContext 结构体融合路径下传递给 Epilogue 的上下文包含groupIdx、groupNum、prefixM、groupM、mOffset、nOffset、curM、curN、writeM、totalM、totalN、totalK。§4 MatmulKernelMxFusedMxMatmulKernelFused项目说明头文件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::BlockMmadMX 量化版而非 blaze_custom Blockoperator()调用签名blockMmadOp(gmA, gmB, gmScaleA, gmScaleB, gmBias, ubBlockC, singleShape)Init接受 4D ProblemShape附加isBias/dbL0C参数BlockScheduler 直接使用 blaze 库调度器无BlockSchedulerSelectorC0_SIZE 由IsFp4AType()决定FP4 → 64FP8 → 32L0CType 固定为floatScale Tensor 需要额外的 layoutScaleADNLayoutPtn/ScaleANDLayoutPtn和 SliceMxMatmulKernelFused传入 UB Tensor 触发 blaze library MX Block 的 L0C2UB 路径当前该路径使用CopyL0C2UBSplitMTrait / DUAL_DST_SPLIT_MEpilogue 必须按GetTaskRation()/GetSubBlockIdx()消费 M 分片QBMMTiling 额外字段在 baseM/baseN/baseK/dbL0C 基础上增加isBiasuint32_t。§5 混用禁令默认情况下blaze_custom 的 Kernel / Block / Scheduler 只能互相搭配禁止与 blaze 库模块任意混用。MX CV 的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 接口不匹配BlockSchedulerSelectorMxMatmulKernelFused blaze 库 BlockMmad blaze 库 Scheduler合法MX 场景的例外Kernel 本身引用 blaze 库头文件§6 命名空间说明模块命名空间说明blaze_custom KernelKernel::如Kernel::MatmulKernel、Kernel::MatmulKernelFusedblaze 库 KernelBlaze::Gemm::Kernel::如Blaze::Gemm::Kernel::KernelMatmulBasicblaze_custom BlockBlock::如Block::BlockMmad、Block::MatmulBlockSchedulerblaze 库 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),仅供参考