CANN/cannbot-skills: Ascend C MC2 通算融合算子开发最佳实践

发布时间:2026/7/11 14:27:55
CANN/cannbot-skills: Ascend C MC2 通算融合算子开发最佳实践 【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skillsname: ascendc-mc2-best-practice description: Ascend C MC2 通算融合算子多卡通信计算融合 Kernel 直调开发最佳实践。仅支持 Ascend 950npu-archdav-3510。当用户需要开发 MC2 通算融合算子、多卡通信计算融合的 Kernel 直调算子或提及MC2、SHMEM、通算融合、多卡通信直调、UDMA、URMA、AllToAllMatmul、多卡集合通信直调时必须使用。强制约束通信走 SHMEM禁止 HCCL 高阶 APIMatmul 走 Blaze 模板禁止 asc-devkit matmul API开发必须按 CANNBot AGENTS.md Step 1→7 流程执行。Ascend C MC2 通算融合算子开发最佳实践MC2Multi-Card Compute-Communication Coupling 多卡间 UDMA/SHMEM 集合通信 单卡内 Blaze Cube 计算 通算两层流水掩盖通信开销。本 skill 是 CANNBot 工作流的技术参考不是独立开发入口——识别到 MC2 需求后必须按父级plugins-official/ops-direct-invoke/AGENTS.mdStep 1→7 流程执行。架构硬约束仅支持Ascend 950dav-3510。其他架构含 dav-2201的 SHMEM/UDMA 行为未验证禁止使用。何时使用 / 不适用使用信号任一即可场景多卡协同的 Matmul/集合通信融合算子AllToAllMatmul、AllReduceMatmul、多卡 EP/TP 融合 Kernel关键词MC2、SHMEM、通算融合、多卡通信直调、UDMA、URMA、AllToAllMatmul代码现有工程同时出现shmem.h/aclshmem*API 与blaze/gemm/模板不适用走其他 skill纯单卡 Matmul无跨卡通信→ascendc-blaze-best-practiceVector 类逐元素/归约算子无 Cube、无跨卡通信非 3510 架构的通算融合三大约束红线Step 2 由 Architect 在 DESIGN.md 显式确认Step 4 由 Reviewer 交叉检查违反任意一条 FAIL。① 通信走 SHMEM禁止 HCCL 高阶 API通信侧统一用 SHMEMhost 侧aclshmem_*device 侧aclshmemx_udma_*aclshmemx_barrier_all_vec。来自asc-devkit/adv_api/hccl/的以下 API全部禁止类别API初始化/终结Hccl::Init()/Hccl::InitV2()/Hccl::Finalize()任务调度Hccl::Commit()/Hccl::Wait()/Hccl::Query()/Hccl::Iterate()集合通信原语Hccl::AllReduce()/Hccl::AllGather()/Hccl::ReduceScatter()/Hccl::AlltoAll()/Hccl::AlltoAllV()写操作Hccl::BatchWrite()/Hccl::AlltoAllvWrite()TilingHccl::SetCcTiling()/Hccl::SetCcTilingV2()跨组同步Hccl::InterHcclGroupSync()ContextGetHcclContext()理由HCCL 由服务端调度Kernel 无法在通信进行中插入计算指令通算只能串行。MC2 要求通信下发与计算下发在同一 Kernel 内通过CrossCoreSetFlag/CrossCoreWaitFlag精细同步只有 SHMEM/UDMA 能做到。SHMEM 文档https://shmem-doc.pages.dev/。② Matmul 走 Blaze 模板禁止 asc-devkit matmul API计算侧统一用 BlazeBlaze::Gemm::Block::BlockMmadBlaze::Gemm::Kernel::*与ascendc-blaze-best-practice共享基底。AscendC::Matmul等 asc-devkit 黑盒 API 无法接入通算流水禁用。③ 禁止跳过 CANNBot 7 步流程Step 1 环境检查含 NPU 架构校验3510→ environment.json all_passedtrue Step 2 设计Architect→ DESIGN.md PLAN.md含三大约束确认 Step 2.5 设计串讲 → WALKTHROUGH.md Step 3 开发Developer→ 复用 references/all_to_all_matmul/ 基底 Step 4 审查Reviewer→ REVIEW.md用下方 R1~R7 速查 Step 5 修复循环最多 3 轮— 仅 FAIL 时 Step 6 性能验收含 L2 cache flush msprof task-based 采集 Step 7 完成汇报禁止跳过环境检查直接写代码Step 2 未在 DESIGN.md 显式确认三大约束Step 3 之前生成任何 kernel 代码Step 6 性能采集时未刷 L2 cache前一轮热度会污染本轮指标。Reviewer 速查Step 4 必查#检查项方法应为空/匹配R1架构3510grep npu-arch CMakeLists.txt→dav-3510R2无 HCCL 高阶 APIgrep -rn Hccl:: operators/{op}/应为空R3无 asc-devkit matmulgrep -rn AscendC::Matmul\b operators/{op}/应为空R4通信走 SHMEM头文件含shmem.hdevice 侧用aclshmemx_udma_*/aclshmemx_barrier_all_vecR5Matmul 走 Blaze头文件含blaze/gemm/block/block_mmad*.hR6流程门禁完整docs/下 DESIGN/PLAN/WALKTHROUGH/REVIEW.md 齐全environment.jsonall_passedtrueR7L2 flush 证据src 中含heavy_add_kernel调用或等效 L2 flush 实现References按需展开文档何时读references/workflow_integration.md进入任意 Step 前看 MC2 场景的具体动作和门禁references/mc2_architecture.md第一次设计 MC2 算子建立 AIV/AIC 分工 4-buffer 流水 M 轴切分心智模型references/comm_shmem.md写/改通信层查 SHMEM API、UDMA 用法、扩展其他通信原语references/matmul_blaze.md写/改计算层选 Blaze 模板、改 DispatchPolicy、处理 Scalereferences/profiling_mc2.mdStep 6 性能验收msprof task-based 采集 L2 flush 多卡数据后处理references/pipeline_tuning.mdStep 2-4 用 tileCnt1 做串行基线Step 6 扫描 tileCnt 找通算并行最优值references/codebase_map.mdStep 3 复制基底工程后定位哪些文件改/不改与改造食谱references/all_to_all_matmul/编译验证过的基底工程所有 MC2 算子的起手模板【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考