下面是一套 Lecture 6 Exit Ticket,对应 lec6.md 的当前内容。把它当成一份“动手写 kernel 前的热身题”就好。重点不是记 API 名字,而是看你有没有真正理解:怎么测、怎么找瓶颈、怎么把一个慢算子拆成更顺手的版本。
Exit Ticket(10 题,开卷)
1) 为什么要先 benchmark 再 profile
请用 2 句话回答:
- benchmark 和 profile 的区别是什么
- 为什么没有这一步就很容易误判瓶颈
2) kernel fusion 为什么值得做
请说明:
- fusion 解决的是什么浪费
- 工厂比喻里对应的是什么
3) CUDA、Triton 和 torch.compile 各自大致在做什么
请分别用一句短语说明:
- CUDA kernel 是什么
- Triton 想简化什么
- torch.compile 在编译链路里扮演什么角色
4) 为什么 GeLU 和 softmax 适合拿来讲 kernel
请用 2 到 3 句话回答:
- GeLU 为什么比简单激活更值得优化
- softmax 为什么更难写得又快又稳
5) tiling 和 L2 cache 为什么会成为关键字
请回答:
- tiling 主要在优化什么
- L2 cache 为什么会影响 kernel 设计
6) softmax 为什么经常是“看起来简单,做起来很烦”
请用 2 句话回答:
- naive softmax 的问题在哪里
- 写得好的 softmax 通常在省什么
7) 什么时候你会想自己写 kernel
请说明:
- 什么情况下现成实现已经不够
- 你自己写 kernel 时最先盯什么
8) 为什么这讲老是把“少搬数据”挂在嘴边
请用 2 句话回答:
- 数据搬运为什么是 kernel 性能的大敌
- 连续访问和复用为什么这么重要
9) 如果一个算子慢,你会怎么排查
请用 1 到 2 句话回答:
- 先看算子本身还是先看整个 pipeline
- 为什么这一步比盲目改代码更靠谱
10) 用一句话把这一讲的直觉说清楚
请尽量自然一点:
- 写 kernel 的本质是什么
- 为什么“把计算排顺”比“把公式换掉”更重要