跳到主要内容
TileLang 系统教程

tilelang-tutorial.huandu.me

第 21 章 布局推导(Layout Inference)原理与实现

/code/21-layout-inference/

05-ascend-nz-layout/README.md1190 字节
# 05 · 昇腾:分形布局与四个 pass

## 目的

对应第 21 章 §5。演示昇腾侧的两件事:

1. 用 `make_ascend_major_k_layout` / `make_ascend_l0c_layout` 理解
   **分形物理形状**(`C0 = 32 字节 / 元素大小 = 256 / bits`);
2. 用 `try_extract_fractal_layout` 读出布局的语义标签(kind / c0 / axis),
   理解 `NormalizeAscendFractalStorage` 为什么需要「canonical tag」才能工作
   (`_vendor/tilelang-v0.1.15/src/ascend/layout/ascend_layouts.h:82-120`)。

## 运行前提

* 昇腾 NPU + CANN + TileLang `v0.1.15`(含昇腾后端)。
* `make_ascend_*_layout` 需要一个真实的 `tirx.Buffer`,所以必须在 kernel 作用域里
  构造;本脚本把它放进一个最小 `T.gemm` 里。

## 运行命令

```bash
python3 ascend_nz_layout.py --dry-shape   # 只打印公式推导(纯 Python,不需 NPU)
python3 ascend_nz_layout.py --compile     # 需要 NPU:编译并查看推断布局
```

## 预期输出

`--dry-shape` 打印 C0 与物理形状的**公式计算**(例如 bf16、`[64, 48]` →
`[3, 4, 16, 16]`)。`--compile` 打印编译器为 L0A/L0B/L0C 推断出的布局。

**`--compile` 的输出需要 NPU 才能得到;本机没有 NPU,本章不提供该输出。**

## 验证级别

* `--dry-shape` 分支是纯 Python 公式复算,**CPU 逻辑可复现**(与
  `code/01-layout-algebra` 同级);C0 公式来自
  `_vendor/tilelang-v0.1.15/src/ascend/layout/ascend_layouts.cc:111-115`。
* `--compile` 分支**仅静态核对**:`make_ascend_major_k_layout` /
  `make_ascend_l0c_layout` / `try_extract_fractal_layout` 的签名在
  `tilelang/layout/ascend.py:20-206` 核对过;**未在硬件上运行**。

← 浏览本章全部代码