| name | tilelang-pass-design |
| description | 根据 Pass 需求生成 TileLang-Ascend Pass 设计文档(pass-design.md)。涵盖 Pass 定位分析(Phase 1/2归属、Pipeline位置、依赖关系)、IR 变换设计、C++ 实现方案、测试方案、风险分析等。触发关键词:设计 Pass、Pass 设计文档、写 Pass、实现 Pass、添加 Pass、新建 Pass、Pass 设计、开发 Pass。 |
TileLang-Ascend Pass 设计文档生成 Skill
1. 目标
根据 Pass 需求信息,生成一份完整的 TileLang-Ascend Pass 设计文档(pass-design.md),涵盖以下核心决策:
- Pass 定位:Phase 1 / Phase 2 归属、Pipeline 具体位置
- 依赖分析:上游 Pass 输入、下游 Pass 输出、数据流传递
- IR 变换设计:输入 IR 结构、输出 IR 结构、变换逻辑
- 实现方案:C++ 类设计、核心方法、Python Wrapper、Pipeline 集成
- 测试方案:功能测试、依赖测试、边界测试
- 风险分析:已知约束、常见错误、与其他 Pass 的交互
2. 输入要求
必需信息
| 字段 | 说明 |
|---|
| Pass 名称 | 如 BufferReuseOptimizer、L0CLayoutOptimization |
| 功能描述 | Pass 要解决的问题和目标 |
| IR 变换类型 | 修改 IR / 收集信息 / 验证 IR |
| 平台范围 | 平台无关 / Ascend 特定 |
提问规则(必须严格遵守):
- 每次只询问一个字段:使用
question 工具时,questions 数组中只包含一个元素
- 按表格顺序依次询问:Pass 名称 → 功能描述 → IR 变换类型 → 平台范围
- 已提供的字段跳过:如果用户在初始请求中已提供某个字段的值,跳过该字段继续下一个
推荐信息
| 字段 | 说明 |
|---|
| 参考 Pass | 可参考的现有 Pass 名称 |
| 输入数据依赖 | Pass 需要哪些 attrs(如 buffer_shapess、address_map) |
| 输出数据供给 | Pass 产生哪些 attrs 供下游使用 |
| 性能目标 | Pass 对编译时间或生成代码性能的影响 |
3. 工作流程
Phase 1:需求澄清
- 解析用户提供的 Pass 需求信息
- 检查必需字段是否完整
- 按顺序逐一提问补全缺失字段(每次只问一个)
Phase 2:信息收集
-
查阅 Pass 定位参考资料:
tilelang-pass-workflow-analyzer/references/pass-pipeline-overview.md - Pipeline 架构
tilelang-pass-workflow-analyzer/references/new-pass-placement-guide.md - 定位决策流程
tilelang-pass-workflow-analyzer/references/pass-dependency-graph.md - 依赖关系
-
查阅 Pass 实现参考资料:
tilelang-pass-analyzer/references/pass-registry-ascend.md - 类似 Pass 实现
tilelang-pass-analyzer/references/ir-examples.md - IR 变换示例格式
-
查阅本 skill 的实现模式参考:
references/pass-impl-patterns.md - C++ 类模板、注册方式
Phase 3:Pass 定位分析
按照 new-pass-placement-guide.md 的决策流程:
Step 1:分析 Pass 功能
- Pass 的主要功能是什么?
- Pass 修改 IR 还是收集信息?
- Pass 是平台无关还是 Ascend 特定?
- Pass 属于哪类优化(Lowering / 合法化 / 内存 / 流水线 / 同步 / 其他)?
Step 2:分析依赖关系
- Pass 需要哪些输入数据(attrs)?
- 这些数据由哪个 Pass 产生?
- Pass 产生哪些输出数据?
- 这些数据由哪个 Pass 使用?
Step 3:确定阶段归属
- DSL Lowering / IR 合法化 → Phase 1
- 硬件优化 / 内存优化 / 同步优化 → Phase 2
- 输入数据来自 Phase 1 → 可在 Phase 1 或 Phase 2
- 输入数据来自 Phase 2 → 必须在 Phase 2
Step 4:确定具体位置
- 依赖优先:Pass 必须在产生其输入数据的 Pass 后执行
- 供给优先:Pass 必须在使用其输出数据的 Pass 前执行
- 功能相邻:将 Pass 放在功能相似的 Pass 附近
Phase 4:生成 pass-design.md
基于 templates/pass-design-template.md 模板,填充所有章节:
- 概述
- Pass 定位
- IR 变换设计
- 实现方案
- 测试方案
- 风险点与注意事项
- 交付清单
Phase 5:质量自检
按照 §5 中的自检清单逐项检查,确保文档质量。
Phase 6:针对性修订
仅修正未通过自检的项目。信息确实不足的标注为「待确认」并说明原因。
Phase 7:输出与关联引导
- 将
pass-design.md 输出到当前目录或用户指定路径
- 若文件已存在,询问是否覆盖
- 关联引导:提示用户可使用相关 skill 查看详细信息
4. 定位决策速查表
阶段归属速查
| Pass 功能特征 | 阶段归属 | 理由 |
|---|
| DSL Lowering | Phase 1 | 将高级 DSL 转换为底层 IR |
| IR 合法化 | Phase 1 | 确保 lowered IR 符合规范 |
| 信息收集 | Phase 1 或 Phase 2 | 根据收集时机决定 |
| 硬件优化 | Phase 2 | 针对 Ascend 硬件特性优化 |
| 内存优化 | Phase 2 | 利用硬件内存层级优化 |
| 流水线优化 | Phase 2 | 多核流水线规划 |
| 同步优化 | Phase 2 | 多核同步策略 |
典型定位场景
| Pass 功能特征 | 推荐位置 |
|---|
| IR 合法化检查 | Phase 1 末尾 |
| 新 Tile 操作 Lowering | Phase 1,LowerTileOp 后 |
| 内存优化 | Phase 2,AscendStorageRewrite 后,AscendMemoryPlanning 前 |
| 同步优化 | Phase 2,AscendMemoryPlanning 后,AscendSyncInsert 前 |
| 流水线优化 | Phase 2,PipelinePlanning 后 |
| 信息收集 | 根据收集内容类型决定 |
关键数据依赖
| 输入数据 | 产生 Pass | 阶段 |
|---|
buffer scope | AscendInferBufferScope | Phase 1 |
buffer_shapess | CollectBufferShapes | Phase 1 |
address_map | AscendMemoryPlanning | Phase 2 |
size_map | AscendMemoryPlanning | Phase 2 |
5. 质量自检清单
生成 pass-design.md 后,逐项检查:
| # | 检查项 | 是否必须通过 |
|---|
| 1 | 阶段归属有明确结论和理由:不是「视情况而定」 | ✅ 必须 |
| 2 | Pipeline 位置具体到步骤:如「Phase 2 步骤 13,在 X Pass 后」 | ✅ 必须 |
| 3 | 依赖关系完整:上游 Pass + 下游 Pass + 数据传递 | ✅ 必须 |
| 4 | IR 变换有输入/输出示例:伪 IR 格式,标注变化点 | ✅ 必须 |
| 5 | C++ 类名和核心方法明确:具体到类名和关键方法名 | ✅ 必须 |
| 6 | Pipeline 集成代码完整:包含集成到 phase.py 的代码片段 | ✅ 必须 |
| 7 | 无占位符或模糊描述:无 {placeholder}、TODO、「待补充」 | ✅ 必须 |
通过条件:所有必须项全部通过。
6. 信息源优先级
| 优先级 | 信息源 | 用途 |
|---|
| 1 | tilelang-pass-workflow-analyzer/references/ | Pass 定位、依赖分析 |
| 2 | tilelang-pass-analyzer/references/ | Pass 实现参考、IR 变换示例 |
| 3 | references/pass-impl-patterns.md(本 skill) | C++ 类模板、注册方式 |
| 4 | tilelang/engine/phase.py | Pipeline 集成参考 |
| 5 | src/transform/*.cc | 典型实现模式(仅在追问时使用) |
冲突处理:当信息源之间矛盾时,以 pass-pipeline-overview.md 和 new-pass-placement-guide.md 为准。
7. 错误处理
| 场景 | 处理方式 |
|---|
| 用户未提供 Pass 名称 | 提问补全 |
| 必需字段缺失 | 列出缺失项,逐一提问 |
| 无法确定阶段归属 | 分析依赖关系后给出推荐方案,标注为「需确认」 |
| 目标文件已存在 | 询问用户是否覆盖或另存 |
| Pass 功能过于复杂 | 建议拆分为多个子 Pass 分别设计 |
8. 完成报告与关联引导
文档生成完成后,输出以下格式的报告:
## Pass 设计文档生成报告
- Pass 名称: {Pass 名称}
- 阶段归属: {Phase 1 / Phase 2}
- Pipeline 位置: {具体位置描述}
- IR 变换类型: {修改 IR / 收集信息 / 验证 IR}
- 输出路径: {文件路径}
### 自检结果
1. 阶段归属明确: ✅ / ❌
2. Pipeline 位置具体: ✅ / ❌
3. 依赖关系完整: ✅ / ❌
4. IR 变换示例清晰: ✅ / ❌
5. C++ 实现方案明确: ✅ / ❌
6. Pipeline 集成代码完整: ✅ / ❌
7. 无占位符: ✅ / ❌
### 待确认项
- {列出需要用户进一步确认的内容}
### 后续步骤建议
1. 查看详细 Pass 工作流:使用 **tilelang-pass-workflow-analyzer** skill
2. 查看类似 Pass 实现:使用 **tilelang-pass-analyzer** skill
3. 开始实现 Pass:使用 **tilelang-pass-generate** skill
9. 参考资料
本 skill 依赖以下参考文件:
| 文件 | 路径 | 用途 |
|---|
| Pass 定位指南 | tilelang-pass-workflow-analyzer/references/new-pass-placement-guide.md | 定位决策流程 |
| Pipeline 架构 | tilelang-pass-workflow-analyzer/references/pass-pipeline-overview.md | 阶段划分、Pass 列表 |
| 依赖关系图 | tilelang-pass-workflow-analyzer/references/pass-dependency-graph.md | 数据流分析 |
| Pass 注册表 | tilelang-pass-analyzer/references/pass-registry-ascend.md | 类似 Pass 参考 |
| IR 示例 | tilelang-pass-analyzer/references/ir-examples.md | IR 变换格式 |
| 实现模式 | references/pass-impl-patterns.md(本 skill) | C++ 模板代码 |
10. 与其他 Skill 的关系
| Skill | 关系 | 使用时机 |
|---|
tilelang-pass-workflow-analyzer | 依赖 | 查阅 Pipeline 架构、Pass 定位、依赖关系 |
tilelang-pass-analyzer | 依赖 | 查阅现有 Pass 实现细节、IR 变换示例 |
tilelang-pass-generate | 后续 | 根据设计文档生成 Pass 代码(先输出 pass-impl-skeleton.md 框架,再落 C++/Python/Pipeline/测试) |