mcpField
C
catlass-operator-code-gen

catlass-operator-code-gen

github.com/ascendDevelopment52137 installsUpdated 25w ago
Repository

About catlass-operator-code-gen

A skill for generating Ascend C operator code from design documents and Catlass examples. It covers host and kernel files, tests, and validation.

Key features

  1. 01Generate code from operator specifications
  2. 02Select Catlass implementation references
  3. 03Create op_host and op_kernel files
  4. 04Generate test_aclnn tests
  5. 05Check structure and compile

Use cases

  1. 01Turn an operator design into project code
  2. 02Use Catlass examples to guide implementation
  3. 03Validate operator structure and builds

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/ascend/agent-skills --skill catlass-operator-code-gen

After installing, type/catlass-operator-code-genin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

examples/
catlass_basic_matmul.cpp
references/
code-structure.md
compile-options.md
references/example/
example-rules.md
golden.md
references/op_host/
def-rules.md
infershape-rules.md
tiling-rules.md
references/op_kernel/
custom-epilogue.md
kernel-rules.md

Details

From the project README

Catlass 算子代码生成

核心工作流

设计文档解析 → Catlass 实现参考选型 → op_host 生成 → op_kernel 生成 → test_aclnn 生成 → 质量验证

设计文档遵守规范(CRITICAL)

设计文档是代码生成的唯一依据,须 100% 遵守。

章节必须遵守内容验证方式
算子名含 catlass 子串,snake_case 目录名与 CamelCase 类名一致目录、OpDef、test_aclnn 命名一致
I/O 与 dtype输入输出 shape、dtype、formatOpDef 与 test_aclnn tensor 一致
核心组件ArchTag、BlockMmad、BlockEpilogue、BlockScheduler、Kernel 类型op_kernel 与 custom-epilogue.md 一致
参考 example指定的 catlass example 路径与选型理由实现与选型一致(非整份粘贴)
TilingKey各分支对应 dtype/转置等Host SetTilingKey 与 TILING_KEY_IS 一一对应
Workspace固定写法见 kernel-rules.md

前置条件

检查项说明
设计文档含算子名、I/O、dtype、转置、参考 example、Kernel/Block/Epilogue
工程OPS_PROJECT_ROOT 已定,含 build.sh、ops/
Catlass<OPS_PROJECT_ROOT>/catlass/ 含 include/、examples/;缺则在工程根克隆

条件不明时追问用户。


Catlass 实现参考选型

在 catlass/examples/ 中按设计文档选定实现参考(读结构、抄组件组合思路,不是把 example 当 ops/ 迁移源):

  1. 找与算子形态最接近的示例
  2. 确定可复用的 Kernel/Block/Epilogue;算子工程 op_kernel 须 Device 调用
  3. 将 tiling 常量、Workspace、TILING_KEY_IS 分支与 Host 侧对齐

端到端步骤

Step 0:生成骨架(强制)

在 OPS_PROJECT_ROOT:bash build.sh --genop=ops/<op_name>

Step 1:清理模板、配置编译选项

删无用模板;按 compile-options.md 配置 ascendc_config.json

Step 2:对照设计文档列清单

算子名、I/O、dtype、转置、参考路径、Kernel/Block/Epilogue、Workspace、TilingKey 分支

Step 3:锁定实现参考

同上文「Catlass 实现参考选型」

Step 4:写 op_host

生成 3 类 4 个文件:

Step 5:写 op_kernel

按 kernel-rules.md:GET_TILING_DATA、TILING_KEY_IS、Device 调用、#define K_MAX_SHAPE_DIM 0、勿 #include tiling.h

Step 6:写 test_aclnn

按 example-rules.md 覆盖 examples/test_aclnn_<op_name>.cpp

Step 7:验证

常见陷阱

NEVER:跳过 --genop;tiling/infershape 并进 def;漏 IMPL_OP_* 注册;def 里 SetTiling/SetInferShape;目录名无 catlass;Kernel 内用 if 代替 TilingKey;op_kernel 用 DeviceGemm;op_kernel #include tiling.h;对 Gemm 仅用 shape 推断转置;忘记在 ascendc_config.json 中配置 Catlass 编译选项

ALWAYS:先 opgen 再覆盖;三文件分文件注册;严格按设计文档组件选型;在 ascendc_config.json 中配置 Catlass 编译选项;改算子后 --pkg 安装再跑示例


references 索引

文件内容
compile-options.md编译选项配置
code-structure.md目录树、文件职责索引
example-rules.mdtest_aclnn 写法
tiling-rules.mdtiling.h / tiling.cpp
def-rules.mddef.cpp
infershape-rules.mdinfershape.cpp
kernel-rules.mdCatlass 依赖与 Device 调用
custom-epilogue.md自定义 Tile Epilogue

参考资料

文档/目录用途
catlass/examples/advanced/basic_matmul_aclnn工程化 op_host / op_kernel / 测试组织对照
catlass/examples/03_matmul_addMatmulEpilogue + BlockEpilogue 组合参考
ascendc-operator-compile-debug编译、安装、跑示例
catlass-operator-design设计文档

Comments

Markdown supported