en un clic
tilelang-perf-optimization
// TileLang 算子性能调优与潜在性能劣化模式检查。提供性能数据采集、瓶颈诊断、优化实施、效果验证能力;也用于生成或评审算子时对照常见性能劣化模式示例检查当前 kernel 代码。触发:算子精度通过后需要优化性能、性能不及预期时。
// TileLang 算子性能调优与潜在性能劣化模式检查。提供性能数据采集、瓶颈诊断、优化实施、效果验证能力;也用于生成或评审算子时对照常见性能劣化模式示例检查当前 kernel 代码。触发:算子精度通过后需要优化性能、性能不及预期时。
| name | tilelang-perf-optimization |
| description | TileLang 算子性能调优与潜在性能劣化模式检查。提供性能数据采集、瓶颈诊断、优化实施、效果验证能力;也用于生成或评审算子时对照常见性能劣化模式示例检查当前 kernel 代码。触发:算子精度通过后需要优化性能、性能不及预期时。 |
Step 1: 精度校验(强制前置)→ Step 2: 性能数据采集 → Step 3: 算子类型判断
↓
Step 4: 优化实施 → Step 5: 精度再验证 → Step 6: 效果验证
examples/{op_name}/perf_tuning/ 目录python examples/{op_name}/<script_name>.py<script_name> 获取:在 examples/{op_name}/ 目录下查找包含 @tilelang.jit 装饰器的 Python 脚本。若存在多个,询问用户确认使用哪一个,后续步骤自动复用该选择。msprof op --kernel-name="main_kernel" --output=./msprof_output ./examples/{op_name}/<script_name>.py
生成翻译后的 Ascend C 代码:
在算子脚本中,JIT 编译返回的函数对象调用 get_kernel_source() 可获取翻译后的 Ascend C 代码:
func = jit_func(batch=B, seq_len=S, ...)
print(func.get_kernel_source())
运行脚本后,从输出中搜索关键字判断算子类型:
| 判断依据 | 类型 | 典型算子 |
|---|---|---|
IS_ASCEND_AIC 出现 | Cube 型 | GEMM、MatMul、Linear |
IS_ASCEND_AIV 出现 | Vector 型 | RoPE、Softmax、Add |
| 两者均出现 | 混合型 | FlashAttention、SparseFlashAttention |
根据算子类型选择优化手段(详见 optimization-guide):
生成/改写算子前的性能关注项检查:
optimization_log.md 中记录 shape、dtype、保留原因和后续替换方案| 优化方向 | 说明 | 典型手段 |
|---|---|---|
| pass_configs 调优 | 调整编译器 pass 行为 | 关闭自动同步、关闭内存规划 |
| 核内优化 | 提升单核内指令并行度 | Double Buffer、L1 常驻、指令向量化、Split-K pipelined GEMM |
| 核间优化 | 优化 Cube/Vector 核间协作 | num_stages 调优、同步优化、Fixed Core 模式 |
| 流水线优化 | 计算与访存重叠 | T.Pipelined(核内/核间流水)、T.Persistent(数据块调度) |
| Fixed Core | 按物理核数 launch,减少冗余初始化和显存膨胀 | T.Kernel(core_num, is_npu=True)、Workspace 按物理核分配 |
| 指令融合 | 减少指令下发次数 | AXPY 融合指令、broadcast 向量化 |
| 稀疏访存优化 | 离散数据高效搬运 | 双 vector 核访存、Gather + 连续搬出、异步拷贝 |
编程模式选择:
优先使用 Developer 模式(自动内存规划、自动同步、编译器自动分离 Cube/Vector),参考 tilelang-expert-to-developer。
如无法满足性能要求,再使用 Expert 模式手动控制(显式指定 L1/UB/L0 层级、手动同步、细粒度调度),参考同一文档。
/tilelang-api-best-practices 查阅相关 API 用法参考以下算子的优化实践文档,学习具体优化技巧:
| 算子类型 | 最佳实践文档 | 核心优化技术 |
|---|---|---|
| Vector 型 | RoPE 优化实践 | NPU 内动态生成 Mask、Tile API 向量化、参数简化 |
| Cube 型 | GEMM Intrinsic 优化 | 多缓冲流水线、细粒度 Flag 同步、MMA intrinsic、L0 分块、负载均衡 |
| CV 融合型 | Flash Attention 优化 | num_stages 流水线、批量 Softmax、Cross-core Semaphore、数据布局优化 |
文档内容涵盖:
python examples/{op_name}/<script_name>.py(<script_name> 为 examples/{op_name}/ 目录下的 Python 脚本文件名)调试手段:
| 方法 | 用途 | 示例 |
|---|---|---|
T.printf(fmt, *args) | 设备端打印中间值 | T.printf("val=%d\n", val) |
T.dump_tensor(tensor, desc, size, shape_info) | 转储张量内容到文件 | T.dump_tensor(acc_o, "acc_o", 128, (128, 128)) |
| 查看生成的 Ascend C 代码 | 分析编译器生成逻辑 | print(func.get_kernel_source()) |
详细说明参考 TileLang-Ascend Programming Guide。
性能目标要求:
< 100 us)| 参数 | 默认值 | 调优建议 |
|---|---|---|
TL_ASCEND_AUTO_SYNC | True | 关闭可提升性能,手动插入同步避免冗余 |
中间文件统一保存在 examples/{op_name}/perf_tuning/ 目录:
baseline.json - 基线性能数据optimization_log.md - 优化记录(每轮详情)final_report.md - 最终优化报告(必须包含验收 shape、dtype 及性能标准对比)| 调用时机 | 调用 Skill | 用途 |
|---|---|---|
| Step 4 优化实施 | /tilelang-api-best-practices | 查阅内存、计算、调度 API 用法 |
根据 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 Ascend API 使用最佳实践。提供内存分配、数据搬运、矩阵计算、归约、元素级运算、同步、调度原语等 API 的正确用法和最佳实践。触发:使用 TileLang API 编写 Ascend NPU kernel 时或遇到 API 相关问题时。
TileLang Ascend Developer/Expert 模式选择与 pass_configs 配置指南。当需要确定编程模式、配置 pass_configs、或在两种模式之间转换时触发。API 详情请参考 tilelang-api-best-practices skill。
根据算子需求生成 TileLang-Ascend 算子设计文档(design.md)。涵盖编程模式选型(Developer/Expert/混合)、API 映射、内存层级规划、Tiling 策略、循环结构、同步策略、验证方案等。触发:设计算子、生成 design.md、算子方案设计、新算子开发、算子实现方案。
基于设计文档生成 TileLang-Ascend 算子实现代码与测试。从 design.md 中提取关键信息,结合 examples/ 中的参考实现生成可运行代码。触发:实现算子、写 kernel、生成代码、算子编码、根据设计文档实现。