CANN/cannbot-skills Blaze Custom Scheduler 层模块手册
Blaze Custom Scheduler 层模块手册【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills定位blaze_custom 路径下 Scheduler 层各模块的使用手册重点说明 Tiling 字段含义与 TilingData 结构体。Scheduler 层负责把[M/baseM][N/baseN]的块格分配到各 AIC 核心。§1 MatmulSwatScheduler项目说明头文件block/block_scheduler_policy.h标签定义、block/matmul_block_scheduler.h实现命名空间标签在全局作用域实现在Block::模板签名MatmulSwatSchedulerNO_FULL_LOAD_MODE标签实际调度器为MatmulBlockSchedulerProblemShape, TransA, TransBMatmulSwatScheduler 标签template uint64_t FULL_LOAD_MODE_ struct MatmulSwatScheduler { static constexpr uint64_t fullLoadMode FULL_LOAD_MODE_; };通过BlockSchedulerSelector映射到具体调度器实现MatmulSwatSchedulerNO_FULL_LOAD_MODE→MatmulBlockSchedulerProblemShape, TransA, TransBParams 字段含义表字段类型含义baseMint64_tM 轴每块基础行数baseNint64_tN 轴每块基础列数mTailTileint64_tM 轴尾块切分份数剩余块数 AIC 数时启用nTailTileint64_tN 轴尾块切分份数mBaseTailSplitCntint64_tM 轴尾块合并数量合并最后几个 baseM 块为一个尾块组nBaseTailSplitCntint64_tN 轴尾块合并数量mTailMainint64_tM 轴合并后尾块主体行数非最后一块的尾块大小nTailMainint64_tN 轴合并后尾块主体列数调度特性WINDOW_LEN 4 行 serpentine 遍历平衡 N 轴 cache 复用尾块合并当mBaseTailSplitCnt 1时最后若干行合并为更大的尾块改善负载均衡尾分块切分当mTailTile * nTailTile 1时尾块被进一步切分给更多核心§2 GroupMatmulBlockSchedulerSplitM项目说明头文件block/group_matmul_block_scheduler.h命名空间Block::GroupMatmulBlockSchedulerSplitM模板参数无普通类非模板与 MatmulBlockScheduler 的关键差异差异点MatmulBlockSchedulerGroupMatmulBlockSchedulerSplitM模板参数有ProblemShape, TransA, TransB无构造参数(ProblemShape, Params)(Params)或(baseM, baseN, baseK)问题刷新无UpdateNextProblem(shape)每轮刷新baseM 调整无UpdateBaseM(baseM)动态调整Params 字段8 个仅 2 个baseM、baseN核心接口方法说明UpdateNextProblem(TupleShape)传入当前组的{groupM, n, k, 1}重算 mCnt/nCnt/round 等UpdateBaseM(uint32_t)动态调整当前组的 baseM由CalcBalancedBaseM计算SetTailAlign(uint32_t, uint32_t)设置 M/N 尾块对齐值GroupMatmul 中固定 16/16UpdateTailTile()自动计算尾块切分份数并更新GetTileIdx(BlockCoord)获取下一个 tile 的 M/N 坐标GetBlockShape(BlockCoord)获取当前 tile 的实际 M/N 尺寸per-group prefixMGroupMatmulKernel 在外层循环中维护prefixM每处理完一个 group 后prefixM groupM。Scheduler 本身不感知 prefixM仅负责当前组内的 tile 调度。§3 TilingData 结构体参考MatmulTilingData18 字段定义在tiling/matmul/blaze_matmul_tiling_data.hhost 端填写、device 端解包。#字段类型说明1muint32_t问题规模 M2nuint32_t问题规模 N3kuint32_t问题规模 K4mL1uint32_tL1 覆盖的 M 行数5nL1uint32_tL1 覆盖的 N 列数6kL1uint32_tL1 单次流水覆盖的 K 长度 baseK × stepK7baseMuint32_tM 轴每块基础行数8baseNuint32_tN 轴每块基础列数9baseKuint32_tK 轴每块基础深度10mTailCntuint32_t普通 SWAT TilingData 中的尾块切分份数传入 blaze_custom scheduler 时对应mTailTile11nTailCntuint32_t普通 SWAT TilingData 中的尾块切分份数传入 blaze_custom scheduler 时对应nTailTile12mBaseTailSplitCntuint32_tM 轴尾块合并数量默认 113nBaseTailSplitCntuint32_tN 轴尾块合并数量默认 114mTailMainuint32_tM 轴合并后尾块主体行数15nTailMainuint32_tN 轴合并后尾块主体列数16usedCoreNumuint32_t实际使用的 AIC 核心数17l1BufferNumuint8_tL1 buffer 数量18l0cDBuint8_tL0C 双缓冲标志1单缓冲2双缓冲QuantMatmulTilingData17 字段定义在tiling/data/quant_matmul_mx_tiling_data.h用于 MX 量化场景。#字段类型说明1muint32_t问题规模 M2nuint32_t问题规模 N3kuint32_t问题规模 K4baseMuint32_tM 轴每块基础行数5baseNuint32_tN 轴每块基础列数6baseKuint32_tK 轴每块基础深度7scaleKL1uint32_tScale 矩阵 L1 覆盖的 K 长度8mTailTileuint32_tM 轴尾块切分份数默认 19nTailTileuint32_tN 轴尾块切分份数默认 110mBaseTailSplitCntuint32_tM 轴尾块合并数量默认 111nBaseTailSplitCntuint32_tN 轴尾块合并数量默认 112mTailMainuint32_tM 轴合并后尾块主体行数13nTailMainuint32_tN 轴合并后尾块主体列数14usedCoreNumuint32_t实际使用的 AIC 核心数15stepKuint8_tK 轴 L1 流水步长16nBufferNumuint8_tbuffer 数量17dbL0cuint8_tL0C 双缓冲标志§4 可用 Tiling 引擎列表Tiling 引擎头文件适用模式说明MatmulTilingSwattiling/matmul/blaze_matmul_tiling.hSWAT普通 MatMul / 普通 Grouped MatMul 复用QuantMatmulTilingSwattiling/mx/quant_matmul_mx_tiling.hMX SWATMX MatMul / MX Grouped MatMul 复用调用方式host 端 launcher// 1. 创建 tiling 引擎实例 MatmulTilingSwat tiling; tiling.SetProblemSize(m, n, k); tiling.SetPlatformInfo(platformInfo); // 2. 执行 tiling 计算 MatmulTilingData tilingData; tiling.DoTiling(tilingData); // 3. 将 tilingData 序列化传入 kernelTiling 算法步骤MatmulTilingSwatFormulateLoadBalanceBlock256×256 起步做基础 M/N 分裂OptimizeEdgeBasicBlock合并尾块以改善最后一行/列的负载均衡CalcTailBasicBlock生成尾块切分份数当前优先保证功能正确性默认可退化为1/1CalL1Tiling依据 L1 容量决定 depthA1/depthB1 与 stepKa/stepKb§5 命名空间说明模块命名空间说明MatmulSwatScheduler全局作用域Scheduler 策略标签非Block::内MatmulBlockSchedulerBlock::实际调度器实现GroupMatmulBlockSchedulerSplitMBlock::GroupMatmul 专用调度器BlockSchedulerSelectorBlock::标签→实现的映射选择器MatmulSwatScheduler作为模板参数传入 Kernel 层后Kernel 内部通过Block::BlockSchedulerSelectorProblemShape, BlockScheduler, transA, transB::SchedulerOp解析出实际的MatmulBlockScheduler类型。【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考