- name
- tilelang-pass-workflow-analyzer
- description
- TileLang Ascend Pass 工作流分析。用于理解 Pass 之间的关系、执行顺序、数据依赖,以及帮助定位新 Pass 应该在哪里添加。触发时机:用户询问 Pass pipeline、Pass 执行顺序、Pass 之间的关系、如何添加新 Pass、Pass 依赖关系、"Pass 工作流"、"Pass 顺序"、"在哪里加 Pass" 等关键词时。
# TileLang Pass 工作流分析 Skill
## ⭐ 核心约束:分阶段信息获取
**严格遵守以下信息获取优先级:**
| 查询阶段 | 信息来源 | 工具使用 |
|---------|---------|---------|
| **首次回答** | ✅ **优先使用 reference 文件** | `read(references/*.md)` |
| 用户追问深入细节 | ✅ **读取源码补充** | `read(tilelang/engine/phase.py)` |
**执行规则:**
```
用户首次提问 Pass 工作流
↓
1. 立即读取 reference 文件(pass-pipeline-overview.md / pass-dependency-graph.md)
↓
2. 基于 reference 信息生成报告(足够回答 90% 的查询)
↓
3. 仅在用户追问"具体实现"、"源码细节"时才读取源码
```
**禁止行为:**
- ❌ 首次回答就读取源码文件
- ❌ 忽略 reference 文件中的已有信息
- ❌ 首次回答就并行读取 reference 和源码
---
## 核心目标
这个 skill 用于:
1. **串联 Pass 关系** - 展示 Pass 之间的依赖关系和数据流传递
2. **解释 Pipeline 架构** - 说明两阶段编译流程及其设计原理
3. **定位新 Pass** - 帮助用户确定新 Pass 应该添加在 Pipeline 的哪个位置
**与 tilelang-pass-analyzer 的区别:**
- `tilelang-pass-analyzer`:侧重于单个 Pass 的功能、原理、实现细节
- `tilelang-pass-workflow-analyzer`:侧重于 Pass 之间的关系、整体工作流、新 Pass 定位
## 工作流程
当用户提出与 Pass 工作流相关的询问时,按照以下步骤响应:
### Step 1: 识别用户意图
判断用户是想要:
- **了解整体架构** → 提供 Pipeline overview
- **理解 Pass 关系** → 展示依赖关系图
- **添加新 Pass** → 提供定位指南和建议
- **查询特定阶段** → 定位到具体阶段并解释
### Step 2: 选择合适的分析方式
根据意图,使用以下工具:
| 用户意图 | 参考文档 | 分析方式 |
|---------|---------|---------|
| 了解整体架构 | `references/pass-pipeline-overview.md` | 展示两阶段架构图,解释设计原理 |
| 理解 Pass 关系 | `references/pass-dependency-graph.md` | 展示依赖关系图,说明数据传递 |
| 添加新 Pass | `references/new-pass-placement-guide.md` | 分析 Pass 功能特征,给出定位建议 |
| 查询特定阶段 | 根据阶段名称查找 | 定位到具体 Pass,展示上下游关系 |
### Step 3: 提供分析报告
输出格式:
```markdown
# Pass 工作流分析报告
## 用户问题
[用户的具体问题]
## 分析结果
### [根据意图提供对应内容]
### 关键要点
- [要点 1]
- [要点 2]
### 建议操作
[如果用户要添加新 Pass,给出具体建议]
```
## 两阶段 Pipeline 架构概要
TileLang-Ascend 采用两阶段编译流程:
```
Python DSL (@tilelang.jit)
↓
[Phase 1: LowerAndLegalize] ← 前端标准化、Lowering
- 目标:将高级 DSL 转换为标准化 TIR
- 特点:语义保持、平台无关优化
↓
[Phase 2: OptimizeForTarget] ← 后端优化、平台特化
- 目标:针对 Ascend 硬件特性的优化
- 特点:硬件相关、性能导向
↓
CANN 工具链 → NPU 执行
```
**详细架构请查阅:** `references/pass-pipeline-overview.md`
## Pass 依赖关系核心概念
### 数据传递方式
Pass 之间通过 `PrimFunc` attrs 传递数据:
| 数据名称 | Attr 键 | 产生 Pass | 消费 Pass |
|---------|---------|-----------|-----------|
| Buffer Scope | buffer annotations | `AscendInferBufferScope` | `CrossCorePipeline`, `CombineCV` |
| Buffer Shapes | `buffer_shapess` | `CollectBufferShapes` | `AscendMemoryPlanning` |
| Address Map | `address_map` | `AscendMemoryPlanning` | `AscendSyncInsert` |
| Size Map | `size_map` | `AscendMemoryPlanning` | `AscendSyncInsert` |
**详细依赖关系请查阅:** `references/pass-dependency-graph.md`
## 新 Pass 定位指南核心原则
### 定位原则
添加新 Pass 时,遵循以下原则:
1. **功能归属** - Pass 的功能属于哪个阶段?
- 前端 Lowering → Phase 1 (LowerAndLegalize)
- 后端优化 → Phase 2 (OptimizeForTarget)
2. **数据依赖** - Pass 需要哪些输入数据?
- 识别上游 Pass 产生的 attrs
- 确保上游 Pass 已经执行
3. **输出供给** - Pass 产生哪些输出数据?
- 识别下游 Pass 需要的 attrs
- 确保下游 Pass 可以访问
4. **语义范围** - Pass 是平台无关还是平台特定?
- 平台无关 → Phase 1
- Ascend 特定 → Phase 2
### 典型定位场景
| Pass 功能特征 | 推荐位置 | 理由 |
|-------------|---------|------|
| IR 合法化检查 | Phase 1 末尾 | 确保 lowered IR 正确性 |
| 新 Tile 操作 lowering | Phase 1,`LowerTileOp` 后 | 紧跟核心 lowering pass |
| 内存优化 | Phase 2,`AscendStorageRewrite` 后 | 利用 memory planning 信息 |
| 同步优化 | Phase 2,`AscendSyncInsert` 前 | 为 sync insert 提供信息 |
**详细定位指南请查阅:** `references/new-pass-placement-guide.md`
## 参考资料
当需要详细信息时,查阅以下文档:
- **Pipeline 架构详解**:`references/pass-pipeline-overview.md`(两阶段架构、每个阶段的 Pass 列表、设计原理)
- **依赖关系图**:`references/pass-dependency-graph.md`(数据流、依赖链、关键 Pass 之间的关系)
- **新 Pass 定位指南**:`references/new-pass-placement-guide.md`(定位原则、典型场景、案例分析)
- **已有 Pass 注册表**:`.agents/skills/tilelang-pass-analyzer/references/pass-registry-ascend.md`(所有 Pass 的详细信息)
## 输出报告模板
当用户询问 Pass 工作流时,使用以下模板生成报告:
```markdown
# Pass 工作流分析报告
## 问题类型
[整体架构 / Pass 关系 / 新 Pass 定位 / 特定阶段查询]
## 核心分析
### [根据问题类型提供对应分析]
#### [具体分析内容]
- [要点 1]
- [要点 2]
- [要点 3]
## 数据流分析
### 输入依赖
- [上游 Pass 1]: [提供的数据 1]
- [上游 Pass 2]: [提供的数据 2]
### 输出供给
- [下游 Pass 1]: [需要的数据 1]
- [下游 Pass 2]: [需要的数据 2]
## 定位建议
### 推荐位置
[具体位置描述,如 "Phase 2,在 Pass X 和 Pass Y 之间"]
### 理由
1. [理由 1]
2. [理由 2]
### 需要注意的依赖
- [依赖说明 1]
- [依赖说明 2]
## 实现建议
### 参考实现
可以参考以下 Pass 的实现:
- [Pass A]: [文件路径]
- [Pass B]: [文件路径]
### 关键步骤
1. C++ 实现:[说明]
2. Python Wrapper:[说明]
3. Pipeline 集成:[说明]
## 相关文件路径
- Pipeline 定义:`tilelang/engine/phase.py`
- Pass 注册:`src/transform/*.cc`
- Python API:`tilelang/transform/__init__.py`
```
## 使用示例
### 示例 1: 用户询问整体架构
**用户问题**: "整个 Pass pipeline 是怎么组织的?"
**响应策略**:
1. 读取 `references/pass-pipeline-overview.md`
2. 展示两阶段架构图
3. 解释 Phase 1 和 Phase 2 的设计原理
4. 提供关键 Pass 的简要说明
### 示例 2: 用户询问 Pass 关系
**用户问题**: "AscendMemoryPlanning 和 AscendSyncInsert 有什么关系?"
**响应策略**:
1. 读取 `references/pass-dependency-graph.md`
2. 展示数据流:`AscendMemoryPlanning` → `address_map` → `AscendSyncInsert`
3. 解释依赖关系:Sync Insert 需要 Memory Planning 提供的地址映射
4. 说明如果要在它们之间添加新 Pass,需要注意数据传递
### 示例 3: 用户想添加新 Pass
**用户问题**: "我想加一个 Pass 来优化 L0C buffer 的数据布局,应该加在哪里?"
**响应策略**:
1. 读取 `references/new-pass-placement-guide.md`
2. 分析 Pass 功能特征:
- 功能:优化 buffer 数据布局
- 依赖:需要知道 buffer scope (L0C)
- 平台:Ascend 特定
3. 推荐位置:Phase 2,在 `AscendStorageRewrite` 后
4. 理由:
- `AscendStorageRewrite` 已经完成存储优化
- 此时 buffer scope 和 shape 信息已经完备
- 属于 Ascend 后端优化范畴
5. 给出实现建议和参考 Pass
## 注意事项
1. **区分单个 Pass 分析 vs 工作流分析**
- 用户询问单个 Pass 功能 → 使用 `tilelang-pass-analyzer` skill
- 用户询问 Pass 关系/工作流 → 使用此 skill
2. **优先展示关键信息**
- 避免一次性输出过多细节
- 先展示概要,再根据用户追问提供详细信息
3. **定位建议需明确**
- 提供具体位置(如 "Phase 2,第 X 步,在 Pass Y 之后")
- 解释理由,不要只给出结论
4. **关联已有文档**
- 充分利用 `tilelang-pass-analyzer` skill 的注册表文档
- 当用户询问特定 Pass 时,引导其查看详细注册信息
Ver no GitHub