CUDA系统拆解-13-面试强化专题:PTX、Tensor Core、CUTLASS 与 Triton 怎么讲
CUDA系统拆解-13-面试强化专题:PTX、Tensor Core、CUTLASS 与 Triton 怎么讲
本文是「CUDA系统拆解」系列第 13 篇。
系列导读:CUDA系统拆解-00-导读:从编程模型到 AI 推理系统的学习路线
上一篇:CUDA系统拆解-12-面试总复盘:怎么把 CUDA 能力连接到 AI 推理
下一篇:CUDA系统拆解-14-PTX、SASS 与编译链:CUDA代码如何落到机器指令
1. 这篇解决什么问题
这一篇不是分别讲 4 个零散名词,而是把它们放回同一张图里。核心要讲清 5 件事:
CUDA C++、PTX、SASS分别处在哪一层。Tensor Core为什么会成为现代 AI 推理里的关键硬件路径。WMMA和MMA的定位差异是什么。CUTLASS和Triton在工程里分别解决什么问题。- 面试里遇到这些词时,应该怎么把它们回答成一条完整的推理内核主线。
如果这篇只记住一句话,那就是:
这几个专题本质上覆盖了高性能推理内核的四个层次:编程抽象、指令路径、专用硬件和工程实现方式。
2. 先记住的核心结论
CUDA C++是你主要写代码的高层编程接口,PTX是更靠近虚拟 ISA 的中间表示,SASS是最终落到具体 GPU 架构上的机器指令。Tensor Core是专门为矩阵乘加设计的硬件单元,它之所以对推理重要,是因为现代推理大量依赖低精度 GEMM、attention 和相关变体。MMA更接近底层矩阵乘加指令语义,WMMA是 CUDA C++ 暴露出来的较高层 warp 级接口。CUTLASS更像高性能 GEMM / Tensor Core kernel 的结构化积木,强调分层组织和可定制性。Triton更像高生产力的 GPU kernel DSL,特别适合做定制算子、fusion 和快速迭代。- 面试里真正重要的不是会背定义,而是能讲清这些层次之间怎么衔接,以及它们为什么会影响推理吞吐和延迟。
3. 正文讲解
3.1 先把总图搭起来
可以把这一篇涉及的东西分成 4 层:
- 编程层:
CUDA C++、Triton - 中间 / 指令层:
PTX、MMA - 硬件层:
Tensor Core - 工程实现层:
CUTLASS、各种高性能 kernel 模板
如果只把这些词一个个背下来,很容易觉得它们彼此无关。
但从推理内核视角看,它们其实是在回答同一件事:
怎样把一个高层算子,稳定地落成吃到硬件峰值的 GPU 执行路径。
3.2 CUDA C++、PTX、SASS 的关系
最稳的分层方式是:
CUDA C++:程序员主要接触的高层语言和编程模型PTX:面向 NVIDIA GPU 路径的虚拟指令表示SASS:具体架构上的真实机器指令
这套关系很重要,因为它说明了一件事:
你写下的 CUDA 代码,并不会直接等于最终在芯片上执行的那串指令。
中间还会经过编译、优化、目标架构映射,最后才落到真正执行的机器码上。
这也是为什么做高性能分析时,有时你需要知道:
- 高层代码有没有被编译成你预期的指令路径
- 某段代码为什么在不同架构上表现不同
- 某个 kernel 是不是走到了 Tensor Core / MMA 路径
3.3 Tensor Core 为什么对推理重要
Tensor Core 的核心价值不是“GPU 上又多了一种算力”,而是:
把深度学习里最常见、最规则的一类矩阵乘加计算,用专用硬件做成高吞吐路径。
现代 AI 推理里很多重计算都能落到 GEMM 或近似 GEMM:
- 线性层
- MLP
- attention 里的
QK^T - attention 里的
PV - 一些卷积和变体算子
再加上推理大量使用:
FP16BF16TF32INT8FP8
这就让 Tensor Core 和低精度推理天然绑定在一起。
所以你可以把它理解成:没有 Tensor Core,现代高吞吐推理的很多性能上限就很难成立。
但要注意,Tensor Core 只解决“算”的峰值问题,不自动解决:
- feeding 是否跟得上
- layout 是否合适
- shared memory / registers 是否组织得好
- 整个 kernel 是不是其实更偏
memory-bound
3.4 WMMA 和 MMA 的定位差异
这两个词经常一起出现,但层级并不一样。
MMA更接近底层矩阵乘加指令语义,表达的是 warp 级 tile 乘加WMMA是 CUDA C++ 提供的较高层 warp 级编程接口
一句话记:
MMA 更像底层能力,WMMA 更像程序员可直接使用的高层入口。
为什么这个区分重要?
因为它对应着两类工程路径:
- 如果你更关心学习和快速上手,
WMMA很适合建立直觉 - 如果你更关心极致性能和更细控制,通常要进一步理解更底层的
mma指令路径和配套数据组织
这也是为什么高性能库和深度定制 kernel 往往不会停留在“会用 WMMA”这一步。
3.5 CUTLASS 的工程定位
CUTLASS 经常被误解成“另一个调用库”,其实它更像:
把高性能 GEMM / Tensor Core kernel 的组织方式做成了一套结构化积木。
它最值得学的不是某个模板名字,而是这套思路:
- threadblock tile
- warp tile
- instruction tile
- global memory -> shared memory -> registers 的分层数据流
- mainloop 和 epilogue 的拆分
所以 CUTLASS 的定位通常是:
- 标准库不够表达你的定制需求
- 你又不想从零手写全部底层实现
- 你需要在接近库级性能的前提下做结构化改造
对面试来说,回答重点不该是“CUTLASS 很复杂”,而是:
它让你看到高性能 Tensor Core kernel 不是一段代码,而是一整套层次化数据流设计。
3.6 Triton 的工程定位
Triton 的价值不在于“比 CUDA 更低层”,而在于:
它用更高生产力的方式,让你表达 tile 级 kernel 和 fusion 型算子。
它特别适合的场景通常是:
- 标准库不直接覆盖
- 手写 CUDA 成本高
- 需要快速实验不同 tile 和融合策略
- 算子比较定制,或者和上游框架耦合较深
所以 Triton 常被用在:
- fused operator
- 特殊 layout kernel
- 一些 attention 周边算子
- 需要快速迭代和 autotune 的定制实现
但 Triton 不是魔法。它能不能快,仍然取决于:
- 访存模式
- tile 组织
- register pressure
- Tensor Core 映射
- fusion 是否真的减少了 global memory 往返
换句话说,Triton 提高的是表达效率,不会替你绕开性能基本规律。
3.7 这几个专题在面试里该怎么串起来
比较好的回答方式,不是把名词拆开背,而是按下面这条线讲:
- 高层算子最终要映射到 GPU kernel
- 高层代码会经过
CUDA C++ -> PTX -> SASS这条链路 - 如果算子能映射成低精度矩阵乘加,就有机会走 Tensor Core 路径
WMMA / MMA对应的是这条矩阵乘加路径的不同抽象层CUTLASS和Triton则是两种常见的高性能工程实现路线
这类回答的重点不是证明你“会多少术语”,而是证明你知道:
- 哪一层决定抽象表达
- 哪一层决定最终指令路径
- 哪一层决定硬件峰值
- 哪一层决定工程落地效率和可维护性
4. 和 AI 推理的关系
这一篇其实是在补齐“推理内核工程图谱”。
前面你学过:
- thread / warp / SM
- 访存和 shared memory
- occupancy
- profiling
但真正进入推理工程后,你还会不断遇到这些问题:
- 这个 kernel 到底有没有走 Tensor Core?
- 为什么某个 shape 明明是 GEMM,却没打出应有吞吐?
- 是继续调
cuBLASLt,还是基于CUTLASS定制? - 某个 fused kernel 更适合用 CUDA 写,还是 Triton 写?
- 编译器最终把高层代码落成了什么指令路径?
所以这一篇的价值,在于把“性能原理”继续推到“实现路线选择”。
这正是 AI infra / 推理岗位很看重的一层能力。
5. 常见误区
PTX不是最终机器码,SASS才更接近真实执行指令。Tensor Core不是“任何 CUDA kernel 都会自动吃满”的通用加速器。WMMA和MMA不是同一层概念,前者更高层,后者更接近底层运算语义。CUTLASS不是简单“又一个库”,它更像高性能 GEMM / Tensor Core kernel 的结构化框架。Triton不是自动性能保证,它只是让定制 kernel 更容易表达和迭代。
6. 复习自测
CUDA C++、PTX、SASS分别处在哪一层?为什么这层次划分重要?- 为什么 Tensor Core 会和现代低精度推理强绑定?
WMMA和MMA的定位差异是什么?CUTLASS和Triton分别更适合解决哪类工程问题?- 如果面试官问你“PTX、Tensor Core、CUTLASS、Triton 有什么关系”,你能不能按一条推理内核主线讲出来?
