Kernel 层扩展开发指南【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills适用路径blaze_custom路径 A§1 何时需要扩展条件示例需要新的数据通路新增 INT4 量化路径需要新的调度策略自定义负载均衡、三维 K 切分仅更换 dtype/Layout → 修改 Launcher 模板参数仅增加 epilogue → 用MatmulKernelFused。参考 →references/fundamentals/blaze-framework-overview.md§4§2 扩展 DispatchPolicyScheduleType 标签空结构体struct KernelMmadMyNewStrategy {};Policy 结构体template uint64_t FULL_LOAD_MODE_ 0 struct MyNewPolicy { using ScheduleType KernelMmadMyNewStrategy; constexpr static uint64_t fullLoadMode FULL_LOAD_MODE_; };SFINAE 绑定blaze_custom 统一用is_base_of风格见matmul_block_mmad.h:77-79template class DispatchPolicy_, class AType_, ... class BlockMmadDispatchPolicy_, AType_, ..., enable_if_tis_base_of_vMyNewPolicy0, DispatchPolicy_ { /* 实现 */ };blaze 库风格则用直接类型匹配BlockMmadMyNewPolicy0, AType_, ...。§3 扩展 GemmUniversal 偏特化blaze 库路径按ScheduleTypeSFINAE 选择GemmUniversal偏特化template typename PS, typename BM, typename BE, typename BS, typename Enable void struct GemmUniversal { static_assert(always_false_vBM, Unsupported); }; template typename PS, typename BM, typename BE, typename BS struct GemmUniversalPS, BM, BE, BS, enable_if_tis_same_vtypename BM::DispatchPolicy::ScheduleType, KernelMmadMyNewStrategy { /* 实现 */ };blaze_custom 路径不使用GemmUniversal直接编写独立 Kernel 类见 §4。§4 自定义 Kernel 开发3 参数模板 block 循环参考MatmulKernelmatmul_kernel.htemplate class ProblemShape, class BlockMmad, class BlockScheduler class MyNewKernel { public: struct Params { ProblemShape problemShape; typename BlockMmad::Params mmadParams; typename BlockMmad::L1Params l1Params; typename BlockSchedulerOp::Params schParams; }; __aicore__ inline void operator()(const Params params) { if ASCEND_IS_AIV { return; } BlockSchedulerOp bs(params.problemShape, params.schParams); BlockMmad mmadOp; mmadOp.Init(/* ... */); auto gmA MakeTensor(MakeMemPtrLocation::GM(aGmPtr), layoutA); BlockCoord blockIdx; while (bs.GetTileIdx(blockIdx)) { BlockShape singleShape bs.GetBlockShape(blockIdx); mmadOp(gmA.Slice(...), gmB.Slice(...), gmC.Slice(...), singleShape); } } };融合场景参考MatmulKernelFused修饰符改__mix__输出用Location::UB增加 CrossCore 同步 Epilogue 调用。模块索引 →references/modules/blaze-custom/kernel-modules.md【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考