{operator_name} Catlass 算子设计文档模板【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills⚠️Architect 生成此文档时必须替换以下占位符{operator_name}→ 实际算子名称snake_case必须含catlass子串如catlass_matmul_add{OperatorName}→ CamelCase 类名如CatlassMatmulAdd{arch}→ catlass 架构号如 220 / 1000. 概述0.0 catlass 命名校验项目内容operator_name{operator_name}含catlass子串✅ / ❌不通过禁止继续一致映射 CamelCase{OperatorName}0.1 基本信息项目内容算子名称{operator_name}算子类别GEMM / Matmul Epilogue / Quant Matmul / 其他 catlass 表达的融合算子需求类型特定用例M/N/K..., dtype... / 通用支持数据类型A/B/C 各自的 dtype目标 SoCAtlas A2 / A3 / A5是否量化是 / 否转置约定A: {NN/TN/NT/TT}特殊约束M/N/K 上下界、对齐、是否带 bias 等1. 算子设计1.1 数学公式// 输入输出定义 A: shape[M, K], dtype... B: shape[K, N], dtype... C: shape[M, N], dtype... // 数学公式 C epilogue(A B, ...)1.2 Catlass 组件选型表⚠️ 所有using必须打开catlass/include/catlass/*对应 header 验证形参后再写入禁止凭印象。组件选型头文件路径选型理由ArchTagCatlass::Arch::AtlasA2catlass/include/catlass/arch/arch.hpp目标 SoC 为 A2DispatchPolicyCatlass::Gemm::MmadAtlasA2Pingpongtruecatlass/include/catlass/gemm/dispatch_policy.hppA/B 均 Pingpong最大化流水重叠L1TileShapeCatlass::GemmShape128, 256, 256—M128 K256 是 A2 上典型最优L0TileShapeCatlass::GemmShape128, 256, 64—与 L1 配套ATypeCatlass::Gemm::GemmTypehalf, Catlass::layout::RowMajorcatlass/include/catlass/gemm/gemm_type.hppA 为 fp16 行主序BTypeCatlass::Gemm::GemmTypehalf, Catlass::layout::RowMajor同上B 为 fp16 行主序CTypeCatlass::Gemm::GemmTypefloat, Catlass::layout::RowMajor同上C 累加为 fp32BlockMmadCatlass::Gemm::Block::BlockMmadDispatchPolicy, L1TileShape, L0TileShape, AType, BType, CTypecatlass/include/catlass/gemm/block/block_mmad.hpp上述参数组合BlockEpiloguevoid纯 GEMM/Catlass::Epilogue::Block::BlockEpilogue{Policy}...catlass/include/catlass/epilogue/block/block_epilogue_*.hpp算子需要的后处理BlockSchedulerCatlass::Gemm::Block::GemmIdentityBlockSwizzle3, 0catlass/include/catlass/gemm/block/gemm_block_swizzle.hpp3D Swizzle 缓解 L2 cache 冲突KernelCatlass::Gemm::Kernel::BasicMatmulKernelBlockMmad, BlockEpilogue, BlockSchedulercatlass/include/catlass/gemm/kernel/*与 BlockMmad/Scheduler 匹配1.3 参考 Example项目内容Example 路径catlass/examples/00_basic_matmul/00_basic_matmul.cpp选型理由与本算子形态最接近GEMM 可选 Epilogue抄结构范围仅抄 catlass 拼装类 Device 调用结构不抄main()因 main 仅 example 用1.4 Kernel 适配方案Example main() 阶段本算子归属实现位置ACL 初始化 / device 内存分配hostop_host/{operator_name}.ascTiling 计算输出 TilingData workspaceSize tilingKeyhostop_host/{operator_name}.asc中的 Tiling 函数usedNumBlocks, ...Kernel 启动host mainop_host/{operator_name}.asccatlass 拼装usingKernel{}(params)deviceop_kernel/{operator_name}.ascDeviceGemm适配器example 用去除本算子直接Kernel{}(params)结果搬回 / verifyhostop_host/{operator_name}.asc1.5 BlockEpilogue 槽位清单如 BlockEpilogue ≠ void打开catlass/include/catlass/epilogue/block/block_epilogue_policy.hpp读出每个槽位的模板形参与签名后填写。槽位形参签名来自 header来源现成 / 粒度 A 自定义 / 粒度 B 新特化TileEpiloguetemplate class CType, class DType, ...block_epilogue_policy.hpp第 N 行现成TileBroadcastOneBlktemplate class XType, ...同上现成TileMultemplate class XType, class YType, ...同上自定义见 §1.61.6 自定义 Tile 契约如有按/catlass-op-designreferences/custom-epilogue.md 写头文件骨架与契约。// op_kernel/tiles/{tile_name}.hpp template class XType, class YType, class ZType /* 必须与槽位期望严格一致 */ struct {TileName} { static constexpr DispatchCategory DISPATCH_CATEGORY DispatchCategory::{...}; CATLASS_DEVICE void operator()( XType const x, YType const y, ZType z, /* ... */) { // 契约操作粒度 ... // 契约UB 占用 ... } };契约项内容DispatchPolicy 类别DispatchCategory::{...}操作粒度per-Tile / per-Block / per-ElementUB 占用多少字节同步要求是否需要 SyncBlock2. 架构设计2.1 TilingKey 分支条件与合法组合分支dtype 组合转置组合SwizzleDispatchPolicyKernel 实例化0Afp16, Bfp16, Cfp32NNIdentity3,0PingpongBasicMatmulKernel...1Abf16, Bbf16, Cfp32NNIdentity3,0PingpongBasicMatmulKernel...2Afp16, Bfp16, Cfp16TNIdentity3,0PreloadPreloadMatmulKernel.....................2.2 Workspace 量级项目内容来源 APIAscendC::GetUserWorkspace(workspace)计算依据catlassKernel::GetWorkspaceSize(...)或 example 推导公式量级约 N KB / MBhost 端处理host Tiling 时累加 workspaceSize 返回给框架2.3 实现约束约束说明C3 编译选项CMakeLists.txt 必须注入-Icatlass/include-DCATLASS_ARCH{arch}C4 Device 调用直接Kernel{}(params)禁用DeviceGemmC5 自实现禁项op_kernel 不得自实现矩阵乘 / 逐元素 / 拷贝循环C6 Workspace必须AscendC::GetUserWorkspace(workspace)禁用SetSysWorkspaceForceC7 头文件边界op_kernel禁include 算子自身的 tiling 实现文件3. 确认清单{operator_name}含catlass子串CamelCase 一致映射catlass 选型表§1.2每个using已打开对应 header 验证参考 example 路径已锁定§1.3Kernel 适配方案已说明§1.4BlockEpilogue 槽位清单§1.5已与 header 对齐如适用自定义 Tile 契约§1.6已写出如适用TilingKey 分支条件 / 合法组合已穷举§2.1Workspace 量级与计算依据已记录§2.2§2.3 实现约束已声明【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考