GPU系统拆解-10-面试表达与系统思维:怎么把 GPU 理解讲成工程判断

本文是「GPU系统拆解」系列第 10 篇。
系列导读:GPU系统拆解-00-导读:从架构认知到推理系统的学习路线
上一篇:GPU系统拆解-09-Profiling 与性能定位:先找到瓶颈,再谈优化
下一篇:GPU系统拆解-11-高频 Kernel 设计:从自然并行到资源权衡

这一篇不再引入太多新知识,而是把前面几部分真正收口成一套可复用的面试表达。目标不是背答案,而是把你已经学过的 GPU 架构、CUDA、访存、Tensor Core、profiling 和推理系统知识,组织成“能说清楚、能被追问、像做过工程”的回答。

1. 先给结论

  • 面试里最容易丢分的,不是完全不会,而是知道很多词,但回答没有主线。
  • 高质量回答的核心不是堆概念,而是固定走一条线:结论 -> 目标 -> 约束 -> 设计 -> 收益/代价 -> 怎么验证
  • AI infra / 推理 岗位最看重三件事:硬件视角、系统视角、工程判断力。
  • 面试官真正想听到的,不是你会不会背 API,而是你是否知道“为什么这样设计、瓶颈在哪里、怎么验证和取舍”。
  • 真正有区分度的回答,通常都能落回 profiling、资源约束、数据流和系统目标。

2. 为什么面试表达要单独收口

很多人学到最后会出现一个典型问题:

  • 概念都见过
  • kernel 也写过
  • profile 也跑过
  • 但一到面试,只会散点输出

根本原因不是不会,而是没有把知识整理成稳定答题框架。

AI infra / 推理 岗位来说,GPU 面试通常不是在考“会不会写一段 CUDA 语法”,而是在判断三件事:

  1. 你有没有硬件视角
  2. 你有没有系统视角
  3. 你有没有工程判断力

所以这一篇的定位很明确:

不是教你背标准答案,而是把前面的知识压缩成稳定可复用的表达模板。

3. 一个高质量回答的通用结构

以后不管问题是什么,都尽量按下面这个结构回答。

3.1 先给一句结论

不要一上来就平铺事实。先把问题定性。

例如:

  • GPU 和 CPU 的根本差别是什么
    先答:GPU 是吞吐导向处理器,CPU 是低延迟控制导向处理器。

  • 为什么这个 kernel 慢
    先答:它更像 memory-bound,不像算力不够。

  • 为什么 decode 更吃带宽
    先答:因为它每步计算粒度小,但需要反复读取权重和 KV cache。

这一步的意义是先建立主判断。

3.2 再讲设计目标

任何 GPU / CUDA / 推理问题,都要回答“它想解决什么”。

例如:

  • warp 是为了更高效地推进大量相似线程
  • shared memory 是为了减少重复 global memory 访问
  • Tensor Core 是为了提高矩阵块乘加吞吐
  • continuous batching 是为了提高在线推理利用率

3.3 再讲约束和为什么这样设计

这里要从硬件或系统约束出发,而不是只说“业界都这么做”。

例如:

  • 因为 global memory 慢,所以要引入片上复用
  • 因为 GPU 喜欢规则并行,所以 warp divergence 会伤效率
  • 因为 decode 每步都要读历史 KV,所以天然更像 memory problem

3.4 再讲收益与代价

这是区分“背概念”和“做工程”的关键。

例如:

  • shared memory 提高复用,但会增加同步和资源占用
  • fusion 减少中间访存,但可能增加寄存器压力
  • 量化降低带宽压力,但可能带来精度损失和实现复杂度

3.5 最后落回验证方式

最后最好补一句“如果我做工程,我会怎么验证”。

例如:

  • 我会先用 Nsight SystemsNsight Compute 定位
  • 我会先判断是 compute-bound 还是 memory-bound
  • 我会看寄存器、访存模式、stall、Tensor Core 路径有没有达到预期

这会让回答从“会讲道理”变成“像做过工程”。

4. AI infra / 推理岗位里最该强调的 5 个观念

这是整篇最重要的压缩版。

4.1 GPU 优化首先是资源匹配

很多优化的本质,不是更聪明的公式,而是让:

  • 计算粒度
  • memory hierarchy
  • block / warp 粒度
  • 寄存器和 shared memory 配比

更匹配硬件。

4.2 很多推理瓶颈不是算力问题,而是数据流问题

特别是:

  • decode
  • KV cache
  • 小 kernel 串联
  • 中间结果来回搬运

这些都更容易把问题变成 memory system 问题。

4.3 GPU 架构不是背景知识,而是优化边界条件

你不能把 Ada、Hopper、数据中心 GPU 的差异只当产品参数。它们会直接影响:

  • 可用路径
  • 最优 tile
  • 互连方式
  • 推理系统的部署边界

4.4 profiling 不是最后一步,而是起点

成熟工程习惯不是“先猜一个优化技巧”,而是先建立瓶颈模型,再做验证型优化。

4.5 推理优化是硬件、编译、runtime 和调度的联合问题

真正的系统优化,从来不是只改一个 kernel 就结束。

5. 高频问题 1:GPU 和 CPU 的根本差别是什么

5.1 推荐回答

GPU 和 CPU 的根本差别,不是“谁更快”,而是设计目标不同。CPU 更强调低延迟、复杂控制和通用任务处理;GPU 更强调吞吐,会用更多并行执行资源和更高带宽去换总吞吐。所以矩阵乘、卷积、attention 这类规则性强、并行度高的工作更适合 GPU,而复杂控制流和系统调度通常仍由 CPU 主导。

5.2 不要只说

不要只说“GPU 更适合并行”,这太空。

5.3 追问通常会落到哪里

常见追问是:

  • 为什么 GPU 擅长吞吐
  • 为什么不能全用 CPU
  • AI 系统里 CPU 和 GPU 怎么分工

更成熟的一句补充是:

CPU 更像 orchestration,GPU 更像 bulk computation。

6. 高频问题 2:为什么 warp 是 32 个线程

6.1 推荐回答

在 NVIDIA GPU 上,warp 是重要的执行和调度粒度。你写 CUDA 时看到的是很多逻辑线程,但硬件不会把每个线程都像 CPU 线程那样独立管理,而是按 warp 推进执行。这样可以降低硬件调度复杂度,也更适合规则数据并行工作负载。关键点不是死记 32 这个数字,而是理解 GPU 通过这种分组方式来提高整体吞吐。

6.2 不要只说

不要把重点放在“历史上定成 32”这种回答上。

6.3 追问通常会落到哪里

常见追问是:

  • warp divergence 是什么
  • 为什么不是完全独立线程
  • warp 和 block 的角色差别是什么

7. 高频问题 3:shared memory 为什么快,为什么重要

7.1 推荐回答

shared memory 是 SM 上的片上共享存储。它真正重要的地方不只是“快”,而是它允许程序员把会被重复访问的数据先搬到片上,再让一组线程反复复用。这样很多原本需要多次访问 global memory 的数据,就能只从慢内存取一次,后续都在更近的层级完成复用。

7.2 记得补代价

高质量回答一定要补:

  • 需要同步
  • 会占用片上资源
  • 用不好会有 bank conflict

7.3 常见落点

这一题通常会连到:

  • GEMM tiling
  • attention tile
  • block 级协作

8. 高频问题 4:occupancy 越高越好吗

8.1 推荐回答

occupancy 表示一个 SM 上活跃 warp 相对理论最大值的比例。它的重要性在于帮助判断 latency hiding 是否足够,但它不是优化目标本身。真正目标是整体吞吐最优,所以 occupancy 高不代表一定更快;如果为了追高 occupancy 牺牲了寄存器、shared memory、tile 设计或数据复用,性能反而可能更差。

8.2 面试里最容易失分的点

不要把 occupancy 说成越高越好。

8.3 追问通常会落到哪里

常见追问是:

  • 为什么高 occupancy 也可能慢
  • spill 和 occupancy 的关系
  • block size 怎么影响 occupancy

9. 高频问题 5:怎么判断一个 kernel 是 compute-bound 还是 memory-bound

9.1 推荐回答

我一般会先从算术强度做初判,再用 profile 验证。如果一个 kernel 算术强度低、访存流量大、warp 主要在等内存,通常更像 memory-bound;如果访存不是主要矛盾,但计算单元或 Tensor Core 压力很高,就更像 compute-bound。前者更常改访问模式和复用,后者更常改 tile、pipeline、指令路径和矩阵利用率。

9.2 不要只说

不要只说“看 GPU 利用率”,这不够精确。

9.3 常见直觉例子

  • GEMM 更容易偏 compute-bound
  • gather / softmax / elementwise 更容易偏 memory-bound
  • prefill 更容易偏 compute-heavy
  • decode 更容易偏 memory-heavy

10. 高频问题 6:为什么 decode 往往比 prefill 更容易受带宽限制

10.1 推荐回答

prefill 通常一次处理整段 prompt,更容易形成较大的 dense matmul,计算密度高,所以更容易把 GPU 算力吃满。decode 每步只生成一个或少量 token,单步计算量不大,但每步都要反复读取模型权重和历史 KV cache,因此更容易受带宽、缓存和数据组织方式约束。它很多时候不是算不动,而是喂不动。

10.2 这题为什么重要

因为它会自然连接到:

  • KV cache
  • paged attention
  • continuous batching
  • quantization

10.3 面试里最好补一句

prefill 和 decode 的瓶颈结构不同,所以优化策略通常也不能共用一套模板。

11. 高频问题 7:为什么大厂更常用 H100/H200/B200,而不是 4090

11.1 推荐回答

4090 很适合个人开发、单机实验和中小规模推理验证,但大厂选择 H100/H200/B200 这类数据中心 GPU,不只是因为单卡更强,更因为它们在系统级能力上更适合生产:更大的显存和带宽、更强的多卡互连、更完整的可靠性和可管理性,以及更适合大规模集群长期稳定运行的部署形态。

11.2 一句更成熟的说法

4090 更像高性能个人计算卡,H100/B200 更像面向 AI 数据中心系统设计的节点核心。

12. 高频问题 8:kernel fusion 为什么有时有效,有时反而变慢

12.1 推荐回答

fusion 的主要收益是减少 kernel launch 和中间结果回写 global memory,提高数据局部性。但 fusion 不是天然更快,因为它也可能增加寄存器压力、降低 occupancy、让指令路径更复杂,或者破坏更理想的数据布局。所以 fusion 本质上是用一个层面的收益去换另一个层面的代价,必须结合 workload 结构和实际 profile 来判断。

12.2 面试里最重要的一点

一定要把它讲成 trade-off,不要讲成绝对技巧。

13. 高频问题 9:量化为什么能加速推理

13.1 推荐回答

量化不只是减少数值位宽,它更重要的工程意义是减少模型权重占用、降低显存带宽压力,并在合适硬件和 kernel 支持下提高有效吞吐。对推理来说,它很多时候不只是让单次计算更快,更是在让同样一块 GPU 放下更大的模型、支撑更高并发,或者让 decode 阶段的数据搬运压力下降。

13.2 一定要补代价

高质量回答应该补上:

  • 精度风险
  • 校准和实现复杂性
  • 不同硬件对不同量化格式支持不一样

14. 高频问题 10:如果一个 CUDA kernel 很慢,你会怎么分析

14.1 推荐回答

我通常会先定性问题,再分类瓶颈,再做验证型优化。具体来说,先判断是整个链路慢还是单个 kernel 慢;再用 Nsight SystemsNsight Compute 去看是 compute-bound 还是 memory-bound,launch overhead 是否明显,occupancy、stall、寄存器和访存模式是否异常;然后针对最可能的点做小实验,例如改 block size、改 tile、改数据布局或比较不同实现路径,最后再回到业务目标判断优化是否真的改善了吞吐、延迟或 P99。

14.2 这题真正想考什么

这不是在考“你记住了哪些优化技巧”,而是在考你是否有稳定的诊断流程。

15. 面试里最容易被追问的“取舍题”

除了上面 10 个高频问题,还有一类更难的问题,专门考你的取舍能力。

常见形式包括:

  • 为什么这个优化理论上应该快,但实测没快
  • 为什么你不选更高 occupancy 的版本
  • 为什么不把所有小 kernel 都融合
  • 为什么不用 4090 的实验直接外推生产部署

这类题最稳的回答方式是:

  1. 先承认这是 trade-off
  2. 再说清收益和代价分别是什么
  3. 最后说你会怎么验证和按业务目标做决策

16. 面试时最该避免的几种回答方式

这是最后的避坑清单。

16.1 只背概念,不落到约束

例如只说“shared memory 很快”“warp 是 32 个线程”,但不解释为什么。

16.2 只讲好处,不讲代价

例如只说 fusion、量化、shared memory、并行化的收益,不讲副作用。

16.3 只讲硬件,不讲系统

AI infra / 推理 岗位来说,只会讲 SM、warp、Tensor Core 还不够,还要能落回:

  • batch
  • KV cache
  • serving
  • 调度
  • 吞吐和延迟指标

16.4 只讲经验,不讲验证

最有区分度的回答,通常都会补一句“我会怎么用 profile 或实验验证这个判断”。

17. 这一篇必须记住的几句话

  • 高质量回答的结构通常是:结论 -> 目标 -> 约束 -> 设计 -> 收益/代价 -> 验证
  • AI infra / 推理岗位最看重硬件视角、系统视角和工程判断力。
  • 面试不是背 API,而是解释为什么这样设计、瓶颈在哪里、怎么验证和取舍。
  • 很多推理问题最终都要落回资源匹配、数据流、profiling 和系统目标。
  • 真正像做过工程的人,都会把回答落回 trade-off 和验证方法。

18. 精简版收口

如果你只想把这一整套 GPU 学习路线压成一句最重要的话,可以记成:

GPU 学习的终点,不是记住更多术语,而是看到一个问题时,能先判断它属于哪一层约束,再用硬件和系统视角解释为什么,然后给出可验证的优化方向。


系列导航