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

CANN/cannbot-skills Scheduler开发指南

Scheduler 层扩展开发指南

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

适用路径:blaze_custom(路径 A)


§1 接口规范

构造函数MyBlockScheduler(const ProblemShape& shape, const Params& params)

内部计算mCnt_ = CeilDiv(m, baseM)nCnt_totalCnt_round_等状态。

必需 6 接口

接口职责
GetTileNum()当前核需处理的 tile 轮数
GetTileIdx(BlockCoord&)按轮次返回 tile 坐标,false = 结束
GetBlockShape(BlockCoord)tile 实际 M/N 尺寸(含尾块修正)
GetTileL1Shape(mL1, nL1, kL1)L1 级 tile 尺寸
GetTileL0Shape(mL0, nL0)L0 级 tile 尺寸
GetBlockCoord通过GetTileIdx输出 (mIdx, nIdx)

Params 结构体

struct Params { int64_t baseM, baseN; int64_t mTailTile, nTailTile; // 尾块拆分数(默认 1) int64_t mBaseTailSplitCnt, nBaseTailSplitCnt; int64_t mTailMain, nTailMain; };

§2 蛇形遍历模板

Z-scan 遍历 M-N 网格,奇数行反转 N 方向提升 L2 cache 复用:

bool GetTileIdx(BlockCoord& blockCoord) { if (roundIdx_ >= round_) return false; int64_t tileIdx = blockIdx_ + roundIdx_ * blockNum_; int64_t rowIdx = tileIdx / nCnt_ / mCoreNum_; int64_t mTileIdx, nTileIdx; if (rowIdx < mainRow_) { mTileIdx = rowIdx * mCoreNum_ + tileIdx % mCoreNum_; nTileIdx = (tileIdx / mCoreNum_) % nCnt_; } else { int64_t tailIdx = tileIdx - mainRow_ * mCoreNum_ * nCnt_; mTileIdx = mainRow_ * mCoreNum_ + tailIdx % mTailCoreNum_; nTileIdx = (tailIdx / mTailCoreNum_) % nCnt_; } if (rowIdx & 1) nTileIdx = nCnt_ - 1 - nTileIdx; Get<MNK_M>(blockCoord) = mTileIdx * baseM_; Get<MNK_N>(blockCoord) = nTileIdx * baseN_; roundIdx_++; return true; }

WINDOW_LEN = 4控制蛇形行宽(mCoreNum_ = Min(4, mCnt_))。


§3 尾块处理模式

策略实现适用
尾块合并mBaseTailSplitCnt > 1尾块 < baseM/2
尾块拆分mTailTile > 1尾块较大且核数有余
尾块独立默认(mTailTile=1通用默认

尾块尺寸:mBaseTail_ = m - (mCnt_ - 1) * baseM_GetBlockShapemTileIdx >= mBaseNormCnt_判断尾块区域并修正。


§4 Group Scheduler 扩展

GroupMatmulBlockSchedulerSplitM支持跨 group 迭代:

void UpdateNextProblem(const TupleShape& problemShape) { m_ = Get<MNK_M>(problemShape); n_ = Get<MNK_N>(problemShape); mCnt_ = CeilDiv(m_, baseM_); nCnt_ = CeilDiv(n_, baseN_); totalCnt_ = mCnt_ * nCnt_; roundIdx_ = 0; // 重置轮次 } void UpdateBaseM(uint32_t baseM) { baseM_ = baseM; }

Kernel 层外层遍历 group,内层GetTileIdx遍历当前 group 的 tile。

模块索引 →references/modules/blaze-custom/scheduler-modules.md

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

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

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

相关文章:

  • Blog.Admin:基于Vue的现代化管理后台系统完整指南
  • B样条算法演进:从理论基石到工业应用
  • 新手必看:lv_port_pc_visual_studio项目结构与文件说明完整指南
  • 从FIRSTVT/LASTVT到优先关系表:算符优先分析的核心构造实战
  • CANN/cannbot-skills Block层开发指南
  • CANN/asc-devkit L1到GM数据搬运API
  • 《计算机网络》核心概念实战演练:从理论到解题的深度解析
  • RK3568开发板系统烧写全流程与实战技巧
  • 欧米茄官方售后服务中心全部网点地址及电话实地考察报告+多信源验证(2026年7月更新) - 欧米茄官方服务中心
  • Hermes协议感知型Web UI:轻量、实时、可嵌入的工业通信前端
  • 四平黄金回收避坑真相|曝光三家无实体、无经营、纯软文虚构店铺 - 资讯在线
  • pacemaker-mgmt常见问题解答:新手必看的集群管理疑难解决手册
  • BAAI Orca-4B多模态学习揭秘:视觉与语言的统一世界建模
  • CameraKit iOS最佳实践:构建稳定相机应用的15个建议
  • XSS绕过实战:从基础过滤到高级混淆的攻防博弈
  • CANN/asc-devkit HF32取整模式设置
  • next-supabase-stripe-starter 部署指南:Vercel一键部署与生产环境配置
  • 雷达中国官方售后服务中心|服务热线及详细地址权威信息通知(2026年7月更新) - 亨得利钟表维修中心
  • C++ SIMD向量指令实战:从自动向量化到手动Intrinsic性能优化
  • SingGuard-2b-GGUF安全架构解析:如何实现查询侧与响应侧的AI安全防护
  • TTKWidgetTools仪表盘控件实战:打造炫酷的数据可视化界面
  • 分布式缓存问题
  • 浪琴中国官方售后服务中心|服务电话及全部网点地址权威信息公示(2026年7月更新) - 浪琴服务中心
  • CANNBlazeCustomKernel模块手册
  • 亲身到店探访广州宝玑官方售后服务中心|全新服务热线及完整地址(2026年7月最新) - 亨得利钟表维修中心
  • MATLAB实战:从灰度直方图到图像增强的完整流程
  • 2026杭州临安区靠谱的蛋糕西点咖啡培训学校推荐 - 烘焙行业测评
  • tRPC.panel()性能优化:缓存机制与零开销设计原理
  • 电镀企业固废鉴别/工业园区固废危废鉴别/政府年度框架项目找哪家?斯坦德衡立:134.62万年度框架/备案493件全国前列 - 十大品牌榜
  • CANN/ops-nn Huber损失梯度算子