GPU系统拆解-10-面试表达与系统思维:怎么把 GPU 理解讲成工程判断
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 语法”,而是在判断三件事:
- 你有没有硬件视角
- 你有没有系统视角
- 你有没有工程判断力
所以这一篇的定位很明确:
不是教你背标准答案,而是把前面的知识压缩成稳定可复用的表达模板。
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 Systems和Nsight 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 Systems 和 Nsight Compute 去看是 compute-bound 还是 memory-bound,launch overhead 是否明显,occupancy、stall、寄存器和访存模式是否异常;然后针对最可能的点做小实验,例如改 block size、改 tile、改数据布局或比较不同实现路径,最后再回到业务目标判断优化是否真的改善了吞吐、延迟或 P99。
14.2 这题真正想考什么
这不是在考“你记住了哪些优化技巧”,而是在考你是否有稳定的诊断流程。
15. 面试里最容易被追问的“取舍题”
除了上面 10 个高频问题,还有一类更难的问题,专门考你的取舍能力。
常见形式包括:
- 为什么这个优化理论上应该快,但实测没快
- 为什么你不选更高 occupancy 的版本
- 为什么不把所有小 kernel 都融合
- 为什么不用 4090 的实验直接外推生产部署
这类题最稳的回答方式是:
- 先承认这是 trade-off
- 再说清收益和代价分别是什么
- 最后说你会怎么验证和按业务目标做决策
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 学习的终点,不是记住更多术语,而是看到一个问题时,能先判断它属于哪一层约束,再用硬件和系统视角解释为什么,然后给出可验证的优化方向。


