跳到主要内容
TileLang 系统教程

tilelang-tutorial.huandu.me

第 20 章 IR 与编译期管线精读

/code/20-ir-and-pass-pipeline/

04-version-diff/README.md1332 字节
# 04-version-diff — 昇腾侧两条路的 pass 词汇对照

## 目的

全书锁定两份昇腾相关的源码:

* `_vendor/tilelang-v0.1.15/tilelang/ascend/pipeline.py`(**进主干**的昇腾后端);
* `_vendor/tilelang-ascend-v0.1.2.000/tilelang/engine/phase.py`(**独立适配器仓库**)。

它们的 pass 词汇**不一样**。本脚本把两侧的 pass 名各抽一遍、做差集,并支持用
`--grep` 在整棵树里定位某个名字到底出现在哪里(例如 `InsertNd` 与 `InsertNd2Nz`)。

## 运行前提

* Python 3.10+(标准库)。
* checkout 内存在上面两份 `_vendor/`。
* 不需要 tilelang、torch、GPU、NPU。

## 运行命令

```bash
python3 compare_ascend_pipelines.py
python3 compare_ascend_pipelines.py --grep InsertNd2Nz
python3 compare_ascend_pipelines.py --grep AutoSchedule
python3 compare_ascend_pipelines.py --compare-main
```

## 预期输出

* `only in the in-tree ...` / `only in the adapter ...` 两段差集。据此可以确认:
  进主干的昇腾后端有整套 `AutoSchedule` / `InsertSync` / `MaterializeMultiBuffer`
  自动调度段与 `InsertNd2Nz`,适配器仓库走的是另一套
  `AscendLowerParallelToVector` / `CrossCorePipeline` / `AscendSyncInsert` 词汇。
* `--grep InsertNd2Nz` 会同时命中两份 `_vendor` 中的源码;而字面量 `InsertNd(`
  (不带 `2Nz`)在锁定版本里**找不到**——它是早期文档里的旧写法。
* `--compare-main` 会把进主干的 `v0.1.15` pipeline 与 corpus 的 **main 快照**
  (`../tilelang-corpus/02-tilelang-core-repo/raw/tilelang/...`)的 pass 名做差集。
  在 2026-10-01 的核验里两侧**互差为空**——也就是说正文列出的这些昇腾 pass
  **已经在 release 里**,不是「仅 main / 未进 v0.1.15」。这一条恰好反驳了
  「昇腾自动调度只在 main 上」的常见误解。

## 验证级别

**CPU 逻辑验证**:作者在本机跑通并核对了输出。脚本只做文本扫描,不编译任何 kernel。

← 浏览本章全部代码