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++PTXSASS 分别处在哪一层。
  • Tensor Core 为什么会成为现代 AI 推理里的关键硬件路径。
  • WMMAMMA 的定位差异是什么。
  • CUTLASSTriton 在工程里分别解决什么问题。
  • 面试里遇到这些词时,应该怎么把它们回答成一条完整的推理内核主线。

如果这篇只记住一句话,那就是:

这几个专题本质上覆盖了高性能推理内核的四个层次:编程抽象、指令路径、专用硬件和工程实现方式。

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
  • 中间 / 指令层:PTXMMA
  • 硬件层: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
  • 一些卷积和变体算子

再加上推理大量使用:

  • FP16
  • BF16
  • TF32
  • INT8
  • FP8

这就让 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 这几个专题在面试里该怎么串起来

比较好的回答方式,不是把名词拆开背,而是按下面这条线讲:

  1. 高层算子最终要映射到 GPU kernel
  2. 高层代码会经过 CUDA C++ -> PTX -> SASS 这条链路
  3. 如果算子能映射成低精度矩阵乘加,就有机会走 Tensor Core 路径
  4. WMMA / MMA 对应的是这条矩阵乘加路径的不同抽象层
  5. CUTLASSTriton 则是两种常见的高性能工程实现路线

这类回答的重点不是证明你“会多少术语”,而是证明你知道:

  • 哪一层决定抽象表达
  • 哪一层决定最终指令路径
  • 哪一层决定硬件峰值
  • 哪一层决定工程落地效率和可维护性

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 都会自动吃满”的通用加速器。
  • WMMAMMA 不是同一层概念,前者更高层,后者更接近底层运算语义。
  • CUTLASS 不是简单“又一个库”,它更像高性能 GEMM / Tensor Core kernel 的结构化框架。
  • Triton 不是自动性能保证,它只是让定制 kernel 更容易表达和迭代。

6. 复习自测

  • CUDA C++PTXSASS 分别处在哪一层?为什么这层次划分重要?
  • 为什么 Tensor Core 会和现代低精度推理强绑定?
  • WMMAMMA 的定位差异是什么?
  • CUTLASSTriton 分别更适合解决哪类工程问题?
  • 如果面试官问你“PTX、Tensor Core、CUTLASS、Triton 有什么关系”,你能不能按一条推理内核主线讲出来?

系列导航