TileLang-MUSA
TileLang-MUSA 是 TileLang 在摩尔线程(Moore Threads)MUSA 架构上的深度适配,包含 DSL 编程语言、JIT 编译器、运行时系统及预优化算子库。
概述
什么是 TileLang-MUSA
TileLang-MUSA 是 Tile Language(tile-lang)在 MUSA 架构上的后端适配,下文统一简称 TileLang。Tile Language 是一种简洁的基于 Tile 的领域特定语言,旨在提升高性能 GPU/CPU 算子的开发效率,相关算子包括 GEMM、Dequant GEMM、FlashAttention、LinearAttention 等。TileLang 采用 Python 风格语法,并且基于 TVM 构建底层编译器,使开发者能够在保持开发效率的同时利用实现先进性能所需的底层优化。
除了深度兼容 TileLang 本身的 API 和语言特性之外,TileLang-MUSA 还扩展了一些 MUSA 专属能力,帮助开发者更高效地编写高性能 MUSA 算子。
TileLang-MUSA 通过“分层编程模型 + 硬件感知编译 + 自动调优”三位一体方案,实现 TileLang 在 MUSA 架构上的深度适配:

三层编程接口:
- 入门级:无需了解硬件,用高层张量表达式编写算法;
- 开发者级:使用预定义 Tile Library(如 copy, gemm, reduce)快速构建 kernel;
- 专家级:直接操作线程原语(warp、barrier、shared memory),进行极致优化。
硬件抽象与自动映射:
T.gemm根据目标架构自动转换为 SQMMA、WMMA 或 FMA 路径;T.copy自动转换为 TME(Tensor Memory Extension)或 global↔shared 专用搬运路径;mbarrier原语在 MP31 上可编译为 ASYNC barrier,支持异步流水。
端到端编译链:源码 → Tile IR → MUSA 后端代码 → 可执行 kernel;复用现有 MUSA 工具链,兼容 nvrtc 式 JIT 流程。
关键特性
| 特性 | 说明 | 开发者价值 |
|---|---|---|
| ✅ 分层编程模型 | Beginner / Developer / Expert 三级接口 | 按需选择抽象层级,兼顾易用性与控制力 |
| ✅ MUSA 原生支持 | 已适配 MP22 与 MP31 两代架构 | 无需重写代码即可跨代际部署 |
| ✅ 硬件特性抽象 | 支持 TME、ASYNC、TCE、LDLMS 等 MP31 特有能力 | 自动利用高带宽异步搬运与 Tensor Core |
| ✅ 丰富算子库 | 覆盖 Elementwise、Reduction、GEMM、FA、MoE 等 50+ 算子 | 快速构建 Transformer、LLM 等模型 |
| ✅ 高性能 | 随仓库提供 benchmark 用例,覆盖 GEMM、FA、Sparse MLA、GDN 等典型 kernel | 便于在目标环境中对齐正确性和实测性能 |
| ✅ 自动调优 | 内置 autotuner 与 layout profiler | 自动搜索最优 tile size、内存布局、循环展开策略 |
架构原理
软硬件架构图

实现逻辑说明:
- 编译路径:基于
codegen_musa.cc实现,新增MUSA TARGET,复用 LLVM 兼容流程; - 原语映射:
copy(src, dst)→ MP31:TME 指令;MP22:专用 LD/ST 指令;gemm(a, b)→ MP31:TCE(Tensor Core Engine);MP22:FMA 序列;mbarrier→ MP31:ASYNC barrier,支持异步数据就绪通知;
- 内存模型:显式 shared memory 分配 + 自动 bank conflict 优化。
版本与环境
环境要求
运行 TileLang 需要准备以下环境:
- 支持 MUSA 架构的 GPU(如 MTTS series)
- 安装 MUSA SDK 5.2.0 版本(需要 MUSA SDK 包含 MCCL 和 muDNN)
- 准备一个可执行
torch_musa的 Python 3.10 环境 - 从源码安装 TileLang 时会一并编译所需的 TVM 组件,无需手动单独安装 TVM
请先准备好可运行 torch_musa 的 Python 环境。torch_musa 的安装,参见 Torch Musa。
版本说明
当前 MUSA SDK 5.2.0 对应的 TileLang-MUSA release 版本为 v0.1.8+musa.3;开源版本和内部 develop 版本为 v0.1.9+musa.1,该版本基于 TileLang 0.1.9 适配 MUSA 平台。
版本差异概览
release_v0.1.8_musa.3 与 develop 分支(v0.1.9+musa.1)的主要差异如下:
| 方向 | release_v0.1.8_musa.3 | develop / v0.1.9+musa.1 |
|---|---|---|
| 基础版本 | 基于 TileLang 0.1.8,MUSA patch 版本为 musa.3 | 基于 TileLang 0.1.9,MUSA patch 版本为 musa.1,同步更多上游 TileLang 语法和运行时能力 |
| MUSA copy / TME | 支持 MUSA T.copy、robust copy、async copy 和 TME 相关能力 | 完善 TMA/TME copy 路径,补充 T.tma_copy 语义;手动 barrier 使用 T.tma_copy(..., barrier=...),T.copy 不再接受 barrier= 参数 |
| TME cache hint | 支持 descriptor 形式 TME load/store cache hint | 明确 T.copy 与 T.tma_copy 上 cache policy hint 的适用范围 |
| GEMM / SQMMA / WMMA | 支持 MP31 SQMMA、WMMA、FMA lowering 及 TileLang-MUSA GEMM 示例 | 继续完善 GEMM lowering、SQMMA 指令选择和 wg_wait 等同步控制;补充 MP22 FP16 GEMM M16N16K16、M8N32K16 等形状测试 |
| Pipeline / warp-specialize | 支持基础 pipeline、barrier 和 producer 线程控制 | 完善 producer-consumer warp-specialize 与 pipeline planning,增强 async copy、mbarrier、fallback barrier 等路径稳定性 |
| 语言与算子 API | 支持主流 TileLang 语法和 MUSA 扩展接口 | 新增或完善 T.tma_copy、T.tma_store、T.transpose、warp vote、buffer pointer、min blocks per SM、函数属性等语言能力 |
| MUSA 模板与算子 | 覆盖 atomic、copy、GEMM、reduce 等 MUSA 模板 | 增加 packed vector、FP4、MP22 MMA 扩展、MUSA fused/accelerated pattern 等模板和 intrinsic 支持 |
| JIT / cache / runtime | 支持源码安装、JIT 编译、kernel cache 和 MUSA 后端 codegen | 改进 cache 原子写入、后端 CMake、日志、C host codegen、Cython wrapper 和 TVM FFI 相关路径 |
| 测试与 benchmark | 已有 GEMM、FA、DSA、TileKernels 等测试和 benchmark | 扩展 testing 覆盖面,新增 MP22/MP31 MUSA kernel、language、transform、cache、autotune、profiler 等测试,并补充 FA、DSA、GDN、Sparse MLA 等 benchmark 更新 |
安装
配置 pip 软件源
请根据使用场景,选择以下任一种方式配置 pip 软件源:
-
为当前 shell 会话或 CI 任务配置软件源:
export PIP_INDEX_URL=https://dl.mthreads.com/repo/api/pypi/pypi/simple -
将软件源写入 pip 配置文件,并查看当前配置:
python -m pip config set global.index-url \https://dl.mthreads.com/repo/api/pypi/pypi/simplepython -m pip config list -
不修改 pip 配置,在安装时指定软件源:
python -m pip uninstall -y tilelang-musa tilelang_musapython -m pip install 'tilelang_musa==0.1.8+musa.3' \--index-url https://dl.mthreads.com/repo/api/pypi/pypi/simple
请勿在同一次安装中同时使用摩尔线程 Python 包源和公开 PyPI 镜像源。安装普通第三方包时,请切换软件源后单独安装。
安装 Python 包
使用环境变量或 pip 配置文件完成配置后,可通过 pip 直接安装 TileLang-MUSA:
python -m pip uninstall -y tilelang-musa tilelang_musa
python -m pip install 'tilelang_musa==0.1.8+musa.3'
安装完成后仍通过 import tilelang 使用。
python - <<'PY'
import tilelang
print("tilelang:", tilelang.__version__)
PY
从源码安装(可选)
如需开发、调试或使用未发布特性,可在已经准备好的 torch_musa Python 3.10 环境中从源码安装。
git clone https://github.com/tile-ai/tilelang-musa.git --recursive
cd tilelang-musa
python -m pip install -r ./requirements-dev.txt
export MUSA_HOME=/usr/local/musa
export USE_MUSA=1
python -m pip install -e . -v --no-build-isolation
安装完成后可以执行以下命令验证 Python 包是否可导入:
python -c "import tilelang; print(tilelang.__version__)"
Elementwise Add
以下示例使用当前推荐的 @tilelang.jit 写法。
elementwise_add.py
import tilelang
import tilelang.language as T
import torch
# 禁用缓存
tilelang.disable_cache()
@tilelang.jit
def elementwise_add(A, B, num_per_thread=8, threads=256, dtype="float32"):
N = T.const("N")
A: T.Tensor[(N,), dtype]
B: T.Tensor[(N,), dtype]
C = T.empty((N,), dtype)
# 设置 grid size 和 block thread number
with T.Kernel(T.ceildiv(N, threads * num_per_thread), threads=threads) as b_x:
# thread block 级别执行代码
for i, j in T.Parallel(threads, num_per_thread):
offsets = (b_x * threads + i) * num_per_thread
C[offsets + j] = A[offsets + j] + B[offsets + j]
return C
def ref_program(x, y):
return x + y
N = 4096
# 编译 TileLang kernel
kernel = elementwise_add.compile(N=N)
# 打印 MUSA C 代码
print(kernel.get_kernel_source())
# Run kernel and compare with torch reference.
a = torch.randn(N, dtype=torch.float32, device='musa')
b = torch.randn(N, dtype=torch.float32, device='musa')
c = kernel(a, b)
torch.testing.assert_close(c, ref_program(a, b), rtol=1e-2, atol=1e-2)
使用 python elementwise_add.py 执行上面代码,可以看到生成的 MUSA C 代码,以及结果比对正确
已经测试过的用例在 testing 目录下,可以选取单个 UT 用 Python 执行
编程接口
语法
关于具体语法信息,可参考 TileLang 官网 https://tilelang.com/programming_guides/language_basics.html。TileLang-MUSA 已支持绝大多数 TileLang 语法。
类型系统
目前除了 float6 float4 之外,其余都支持。具体的类型系统,请参见 TileLang 官方文档。
控制流
支持全部 控制流语句,参考:
for i in T.serial(N):
...
for i, j in T.Parallel(M, N):
C[i, j] = A[i, j] + B[i, j]
for k in T.Pipelined(T.ceildiv(K, BK), num_stages=3):
# overlap copy/compute across stages
...