跳到主要内容
TileLang 系统教程

tilelang-tutorial.huandu.me

第 08 章 语言基础

/code/08-language-basics/

02-dtypes/README.md2335 字节
# 02-dtypes · 数据类型与低精度表达

对应正文第 4 节。

## 目的

1. 把 v0.1.15 暴露的 **173 个 dtype 名字**按家族摊开,并核对回源码;
2. 说明 int4 / bool / `float4_e2m1_unpacked` 三种「没有向量形」的例外;
3. 说明 fp8 的八个拼法、fp6 的两个拼法、fp4 的两种存储模型;
4. 说明混合精度时累加 dtype 必须显式给出。

## 文件

| 文件 | 类型 | 验证级别 |
| --- | --- | --- |
| `dtype_families.py` | 纯标准库清单 + 比对 | **CPU 逻辑验证** |
| `fp8_fp4_exprs.py` | TileLang 示例 | **仅静态核对** |

## 运行 `dtype_families.py`

```bash
python3 dtype_families.py            # 家族清单
python3 dtype_families.py --lanes    # lane 展开计数
python3 dtype_families.py --diff     # 与 vendor 的 _all_dtypes 逐条比对
```

前提:Python 3.9+,只用标准库。作者在 macOS (Apple Silicon) + Python 3.11 上
实际运行过。

关键输出(真实输出,非示意):

```text
$ python3 dtype_families.py --diff
vendor entries: 173; transcription entries: 173
exact match

$ python3 dtype_families.py --lanes
Lane expansion (names exported as attributes of tilelang.language)
  aliases (no lane forms)         7 names
  no-lane scalars                 3 names
  signed int                      4 names
  unsigned int                    4 names
  float                           3 names
  float8                          8 names
  float6                          2 names
  bfloat16/tfloat32/float4       16 names
  TOTAL                         173 names
```

`--diff` 会去读
`../../../_vendor/tilelang-v0.1.15/tilelang/language/dtypes.py`,从
`_all_dtypes = [...]` 里把字符串抠出来做集合比较。所以这个脚本同时是一个
**回归护栏**:如果哪天换了 pin、`_all_dtypes` 变了,`--diff` 会立刻报差异。

## `fp8_fp4_exprs.py` 的运行前提(未在本机运行)

* 运行前提:TileLang `v0.1.15`;其中 `fp8_gemm` 需要支持 fp8 的 NVIDIA GPU
  (sm89+),`fp4_storage_model()` 只查 dtype 属性,理论上不需要卡。
* 静态检查命令(本机实际执行过):

  ```bash
  python3 -m py_compile fp8_fp4_exprs.py   # 通过
  ```

* 在有卡的机器上如何验证:

  ```python
  from fp8_fp4_exprs import fp4_storage_model
  print(fp4_storage_model())   # {'packed_bits': 4, 'unpacked_bits': 8, ...}
  ```

  对 `fp8_gemm` 则用 `torch.float8_e4m3fn` 输入与 fp32 参考做对照
  (fp8 的容差按用例自行设定,本示例不承诺具体容差)。
* 性能口径:本示例不做性能断言。
* 作者实际做到的验证级别:**仅静态核对**(`py_compile` 通过 + 每个 dtype 符号
  与 helper 在 `_vendor/tilelang-v0.1.15/tilelang/language/dtypes.py` 与
  `fp8.py` 里核对过)。**未在硬件上运行**。

## 原文出处

* `_vendor/tilelang-v0.1.15/tilelang/language/dtypes.py:105, 120-142, 187-253,
  262-317, 319-347, 633-711, 891`
* `_vendor/tilelang-v0.1.15/tilelang/language/fp8.py:1-49`
* `_vendor/tilelang-v0.1.15/docs/programming_guides/type_system.md:7-41`

← 浏览本章全部代码