尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

cannbot-skills Blaze后处理模块

cannbot-skills Blaze后处理模块
📅 发布时间:2026/7/16 17:53:22

Blaze Custom Epilogue 层模块手册

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

定位:blaze_custom 路径下 Epilogue 层各模块的使用手册。Epilogue 层运行在 AIV 核心上,接收 AIC 通过 CopyL0C2UB 写入 UB 的 matmul 结果,执行 vector 后处理并写回 GM。


§1 模块清单

模块头文件类型说明
EpilogueFusionRegBaseepilogue/epilogue_fusion_regbase.h通用 RegBase 框架使用__VEC_SCOPE__+Reg::API,中间值不写回 UB
MulEpilogueepilogue/epilogue_fusion_membase.h参考 MemBase 实现Output = matmul(A,B) × D,使用AscendC::Mul
CvSync常量epilogue/cv_sync_constants.h同步常量集MODE=4, AIC_TO_AIV_FLAG=8, AIV_TO_AIC_FLAG=5, COUNT_ID_MAX=15, COUNT_FLAG=3

设计文档入口:

  • 通用设计方法:development/epilogue-dev-guide.md
  • MemBase 设计:development/epilogue-membase-design.md
  • RegBase 设计:development/epilogue-regbase-design.md

RegBase 核心特性:

  • 计算核心使用__VEC_SCOPE__块,内部声明Reg::RegTensor<T>和Reg::MaskReg
  • 中间值全程驻留向量寄存器,不落 UB,减少 UB 中间 buffer 数量
  • 通过Reg::LoadAlign加载、Reg::StoreAlign写回
  • 支持Reg::Add/Sub/Mul/Div、Reg::Adds/Muls/Divs、Reg::Axpy、Reg::Exp/Log/Abs/Sqrt、Reg::Compare/Select等 API

MemBase 参考实现(MulEpilogue):

  • 使用标准 AscendC API(AscendC::Mul)
  • 三路 UB buffer:cLocal_(matmul 结果)+dLocal_(第二路输入)+cLocalTmp_(计算结果)
  • StageNum = 2(UB 分区数)

§2 RegBase vs MemBase 选择

判断维度选 RegBase选 MemBase
公式复杂度复杂公式(GELU / SwiGLU / LayerNorm),3+ 中间值简单 vector 操作(Mul / Add / Div)
可用 API需要Reg::系列 API(Exp/Log/Axpy 等)已有现成AscendC::API(如AscendC::Mul)
UB 占用较少(2-3 blocks)较多(3-4 blocks)
AIV 效率更高(寄存器级操作,无 UB 读写开销)一般(需 UB 中间 buffer 读写)
开发难度较高(需理解 RegTensor/MaskReg/VF 循环)较低(类标准 AscendC 开发)

决策建议:优先 RegBase。仅当融合操作为单一 vector op 且已有对应AscendC::API 时选 MemBase。

设计细节请查阅:

  • development/epilogue-dev-guide.md
  • development/epilogue-membase-design.md
  • development/epilogue-regbase-design.md

§3 接口契约

普通 C+V 与 MX C+V 的 Epilogue 类必须提供以下四个接口,与MatmulKernelFused/MxMatmulKernelFused兼容:

接口签名说明
Paramsstruct Params { ... }参数结构体,含 GM_ADDR 字段
Initvoid Init(Params, baseM, baseN, ProblemShape)初始化 UB 布局、绑定 GM 地址
operator()void operator()(BlockShape, gmOffset, flagId)逐 tile 执行后处理
GetTensorauto GetTensor()返回cLocal_(UB Tensor,供 Kernel 层 CopyL0C2UB 使用)

Grouped C+V 使用 context-based Epilogue,operator()签名不同:

__aicore__ inline void operator()(BlockShape blockShape, TileContext tileContext, int64_t flagId)

TileContext由GroupMatmulKernel传入,包含groupIdx、prefixM、mOffset、nOffset、writeM、totalM、totalN、totalK等字段。普通 linear offset Epilogue 不直接兼容 Grouped C+V。

兼容性矩阵

Epilogue 类型普通 C+VMX C+VGrouped C+V
MulEpilogue/ 普通 linear offset Epilogue可用可用,但必须按GetTaskRation()/GetSubBlockIdx()消费 SplitM 后的 UB不直接可用
MX SplitM-aware Epilogue不需要可用不直接可用
context-based grouped Epilogue不需要不需要必需

Params 结构体约定:

  • RegBase:GM_ADDR extraInputAddr(额外输入)+GM_ADDR outputGmAddr(输出)
  • MemBase(MulEpilogue):GM_ADDR multiplierGmAddr(乘数 D)+GM_ADDR outputGmAddr(输出)

BlockShape / ProblemShape:

  • BlockShape = AscendC::Shape<int64_t, int64_t, int64_t, int64_t>—{curM, curN, 1, 1}
  • ProblemShape = AscendC::Shape<int64_t, int64_t, int64_t, int64_t>—{m, n, k, 1}

辅助方法:

  • InitParams(Params)—__host_aicore__静态方法,用于 host 端参数透传

§4 UB 占用情况

路径UB 分区说明
RegBase2-3 blockscLocal_(matmul 结果,固定)+extraBuf_(额外输入,1 行)+bf16Out_(输出,stageRows 行)
MemBase3-4 blockscLocal_(matmul 结果,固定)+dLocal_(第二路输入,stageSize)+cLocalTmp_(计算结果,stageSize)

RegBase UB 布局计算:

matmulAreaBytes = ceilDiv(baseM, taskRation) × nAlign × sizeof(L0CDataType) extraBufBytes = nAlign × sizeof(ComputeType) remainBytes = TOTAL_UB_SIZE - matmulAreaBytes - extraBufBytes stageRows_ = remainBytes / (nAlign × sizeof(OutputType))

MemBase UB 布局计算:

matmulArea = ceilDiv(baseM, taskRation) × nAlign // 元素数 lastUBBytes = TOTAL_UB_SIZE - matmulArea × sizeof(DataType) stageSize_ = min(lastUBBytes / StageNum / sizeof(DataType), matmulArea)

RegBase 通过ReinterpretCast划分 UB 区域,MemBase 通过LocalTensor偏移划分。RegBase 的 stage 循环按行切分(rowsThisStage),MemBase 按元素数切分(curStageSize)。


§5 命名空间说明

模块命名空间说明
EpilogueFusionRegBase全局作用域不在任何 namespace 内
MulEpilogue全局作用域不在任何 namespace 内
CvSyncCvSync::namespace同步常量集合

Epilogue 类定义在全局作用域,不归属Kernel::或Block::namespace。Kernel 层通过模板参数直接引用 Epilogue 类名(如MatmulKernelFused<..., EpilogueFusionRegBase>)。

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

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

相关新闻

  • 企业级部署指南(Claude最新模型更新后首个生产级Docker镜像+GPU显存优化方案,仅限前500名技术负责人领取)
  • Dolphin3-Cyber-8B-GGUF提示词工程:如何让AI生成精准的漏洞利用代码与防御建议
  • 计算机毕业设计之基于springboot的志愿者服务管理系统

最新新闻

  • Radare2高级功能:动态调试与漏洞利用实战
  • 上海翡翠回收避坑|5家主流平台实测对比!冰种/糯种翡翠这样卖最保值 - 奢侈品回收知识分享
  • 生命涌现的小龙虾技能之【Pet Picky Eater Detection | 宠物选择性拒食识别】简介
  • Fiddler中文版插件推荐:10个必备扩展提升工作效率
  • 2026年数据分析工具五大推荐 - 科技焦点
  • 计算机毕业设计之基于springboot的在线考试管理系统

日新闻

  • Toon Boom Harmony 高效工作流:从节点视图到镜头标记的实战技巧
  • 真力时售后维修电话,为您提供专业腕表保养与故障修复服务权威公示(2026年7月最新) - 亨得利官方服务中心
  • 【C++】类和对象--构造函数进阶(初始化列表与explicit)

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号