en un clic
tilelang-mode-guide
// TileLang Ascend Developer/Expert 模式选择与 pass_configs 配置指南。当需要确定编程模式、配置 pass_configs、或在两种模式之间转换时触发。API 详情请参考 tilelang-api-best-practices skill。
// TileLang Ascend Developer/Expert 模式选择与 pass_configs 配置指南。当需要确定编程模式、配置 pass_configs、或在两种模式之间转换时触发。API 详情请参考 tilelang-api-best-practices skill。
| name | tilelang-mode-guide |
| description | TileLang Ascend Developer/Expert 模式选择与 pass_configs 配置指南。当需要确定编程模式、配置 pass_configs、或在两种模式之间转换时触发。API 详情请参考 tilelang-api-best-practices skill。 |
API 用法详情(内存分配、计算原语、同步原语等)请参考 tilelang-api-best-practices skill,本文档不再重复。
| 维度 | Developer 模式 | Expert 模式 |
|---|---|---|
| 内存分配 | T.alloc_shared / T.alloc_fragment | T.alloc_L1 / T.alloc_ub / T.alloc_L0A/L0B/L0C |
| 计算表达 | T.Parallel + 符号运算 | T.tile.xxx 扩展原语 |
| 作用域 | 编译器自动分离 Cube/Vector | 手动 with T.Scope("C"/"V") |
| 同步 | 编译器自动插入 | 手动 T.barrier_all / T.set_flag / T.wait_flag |
| pass_configs | 全部开启 | 全部关闭或不设 |
| 适用场景 | 大多数算子,跨平台兼容 | 极致性能优化,需要底层控制 |
| 示例目录 | examples/developer_mode/ | examples/flash_attention/fa_opt/flash_attn_bhsd_expert_*.py |
混合模式:Developer 主体 + 少量 Expert / Ascend 专属 T.tile.xxx。使用 Developer 的 pass_configs,不写 T.Scope 和手动同步。大多数实际算子使用混合模式。
import tilelang
pass_configs = {
tilelang.PassConfigKey.TL_ASCEND_AUTO_SYNC: True, # ① 自动核内同步
tilelang.PassConfigKey.TL_ASCEND_MEMORY_PLANNING: True, # ② 自动内存规划
tilelang.PassConfigKey.TL_ASCEND_AUTO_CV_COMBINE: True, # ③ 自动CV分离
tilelang.PassConfigKey.TL_ASCEND_AUTO_CV_SYNC: True, # ④ 自动核间同步
}
"tl.ascend_auto_sync",默认 FalseT.barrier_all() 等同步指令T.barrier_all()、T.set_flag/T.wait_flag"tl.ascend_memory_planning",默认 FalseT.annotate_address 规划内存地址"tl.ascend_auto_cv_combine",默认 Falsewith T.Scope("C") / with T.Scope("V"),编译器根据 buffer 类型和所用原语自动识别T.Scope 标注每段代码的执行域注意:避免在开启 AUTO_CV_COMBINE 同时手写
T.Scope,可能会导致编译器无法正确处理代码
"tl.ascend_auto_cross_core_sync",默认 FalseT.set_cross_flag/T.wait_cross_flag| 场景 | AUTO_SYNC | MEMORY_PLANNING | AUTO_CV_COMBINE | AUTO_CV_SYNC | 手动 Scope |
|---|---|---|---|---|---|
| 纯 Vector 算子(elementwise, softmax) | ✅ | ✅ | ❌ | ❌ | ❌ |
| Developer GEMM(完全自动) | ✅ | ✅ | ✅ | ✅ | ❌ |
| Developer Flash Attention(核间流水线) | ✅ | ✅ | ✅ | ✅ | ❌ |
| Developer CV 融合(Vector计算+Cube GEMM) | ✅ | ✅ | ✅ | ✅ | ❌ |
| 混合模式 CV 融合 | ✅ | ✅ | ❌ | ❌ | ✅ |
| Expert 极致性能 | ❌ | ❌ | ❌ | ❌ | ✅ |
纯 Vector 算子(来自 Programming Guide §2.2):
pass_configs = {
tilelang.PassConfigKey.TL_ASCEND_AUTO_SYNC: True,
tilelang.PassConfigKey.TL_ASCEND_MEMORY_PLANNING: True,
}
Developer GEMM / Developer CV 融合(推荐配置):
pass_configs = {
tilelang.PassConfigKey.TL_ASCEND_AUTO_CV_COMBINE: True, # 自动分离 Cube/Vector
tilelang.PassConfigKey.TL_ASCEND_AUTO_SYNC: True, # 自动核内同步
tilelang.PassConfigKey.TL_ASCEND_MEMORY_PLANNING: True, # 自动内存规划
tilelang.PassConfigKey.TL_ASCEND_AUTO_CV_SYNC: True, # 自动核间同步
}
Expert 全手动:
pass_configs = {
tilelang.PassConfigKey.TL_ASCEND_AUTO_CV_COMBINE: False,
tilelang.PassConfigKey.TL_ASCEND_AUTO_CV_SYNC: False,
tilelang.PassConfigKey.TL_ASCEND_MEMORY_PLANNING: False,
tilelang.PassConfigKey.TL_ASCEND_AUTO_SYNC: False,
}
T.alloc_L1 → T.alloc_shared,T.alloc_L0C → T.alloc_fragment,T.alloc_ub → T.alloc_sharedwith T.Scope("C") / with T.Scope("V")T.barrier_all()、T.set_flag/T.wait_flag、T.set_cross_flag/T.wait_cross_flagT.tile.exp(dst, src) → for i,j in T.Parallel(...): dst[i,j] = T.exp(src[i,j])T.annotate_address| Expert 写法 | Developer 写法 |
|---|---|
T.alloc_L1(shape, dtype) | T.alloc_shared(shape, dtype) |
T.alloc_ub(shape, dtype) | T.alloc_shared(shape, dtype) |
T.alloc_L0A/L0B(shape, dtype) | 删除(gemm_v0 内部处理) |
T.alloc_L0C(shape, dtype) | T.alloc_fragment(shape, dtype) |
with T.Scope("C"): ... | 直接写代码(编译器自动分离) |
T.barrier_all() | 删除(编译器自动插入) |
T.set_flag/T.wait_flag(...) | 删除 |
T.set_cross_flag/T.wait_cross_flag(...) | 删除 |
T.tile.exp(dst, src) | for i,j in T.Parallel(...): dst[i,j] = T.exp(src[i,j]) 或保留 |
T.annotate_address({...}) | 删除(开启 MEMORY_PLANNING) |
| 模式 | 目录 | 说明 |
|---|---|---|
| Developer | examples/developer_mode/ | GEMM、elementwise 等 |
| Expert | examples/gemm/example_gemm_intrinsic.py、examples/flash_attention/fa_opt/flash_attn_bhsd_expert_*.py | 极致性能优化 |
| 混合(核间流水线) | examples/flash_attention/flash_attn_bhsd_cc_sync.py、examples/flash_attention/fa_opt/flash_attn_bhsd_auto_pipeline_*.py | FA 核间流水线 |
| 纯 Vector | examples/elementwise/、examples/softmax/ | 无 Cube 操作 |
| CV 融合 | examples/dequantize_gemm/、examples/quant_batch_matmul/ | Vector 计算 + Cube GEMM |
完整代码对比(Developer vs Expert):
根据 pass-design.md 与 workflow 分析结果生成 TileLang-Ascend Pass 的最终实现代码(不含 UT/ST)。先输出实现骨架文档(pass-impl-skeleton.md)确认框架设计,再生成 C++ 实现、Python 封装、Pipeline 接入,并完成最小冒烟验证。测试生成由后续独立 skill 负责。触发关键词:实现 Pass、生成 Pass 代码、Pass 编码、根据设计文档实现 Pass、写 Pass 代码、落地 Pass、新增 Pass 实现。
TileLang-Ascend 算子测试设计技能。支持多种场景:(1) 从 design.md 设计测试配置 (2) 从 examples/{op}/*.py 补充测试 (3) 手动提供算子信息生成测试 (4) 测试覆盖率分析。理解算子实现逻辑后智能判断测试策略。触发:设计算子测试、生成测试用例、补充测试、测试覆盖率不足。
TileLang 算子性能调优与潜在性能劣化模式检查。提供性能数据采集、瓶颈诊断、优化实施、效果验证能力;也用于生成或评审算子时对照常见性能劣化模式示例检查当前 kernel 代码。触发:算子精度通过后需要优化性能、性能不及预期时。
TileLang Ascend API 使用最佳实践。提供内存分配、数据搬运、矩阵计算、归约、元素级运算、同步、调度原语等 API 的正确用法和最佳实践。触发:使用 TileLang API 编写 Ascend NPU kernel 时或遇到 API 相关问题时。
根据算子需求生成 TileLang-Ascend 算子设计文档(design.md)。涵盖编程模式选型(Developer/Expert/混合)、API 映射、内存层级规划、Tiling 策略、循环结构、同步策略、验证方案等。触发:设计算子、生成 design.md、算子方案设计、新算子开发、算子实现方案。
基于设计文档生成 TileLang-Ascend 算子实现代码与测试。从 design.md 中提取关键信息,结合 examples/ 中的参考实现生成可运行代码。触发:实现算子、写 kernel、生成代码、算子编码、根据设计文档实现。