10. 面试题
面试 GPU/CUDA,通常会问三个层次:概念理解、编程能力、生产经验。下面是按难度分层的题目与参考答案要点。
10.1 初级
Q1:CPU 和 GPU 的主要区别是什么?
要点:
- CPU 核心少、单核强、擅长城控制分支和低延迟任务;
- GPU 核心多、单核简单、擅长高并行吞吐任务;
- GPU 有高带宽显存(HBM),适合数据并行计算。
Q2:什么是 CUDA 中的 Thread、Block、Grid、Warp?
要点:
- Thread:最小执行单元;
- Block:由多个 Thread 组成,可共享 shared memory 和同步;
- Grid:一次 kernel 启动的所有 Block;
- Warp:32 个 Thread,硬件调度单位。
Q3:什么是 warp divergence?怎么避免?
要点:
- 同一个 warp 内线程走不同分支,导致串行执行;
- 避免方法:让分支发生在 warp 之间,而非 warp 内部;基于 block/warp ID 做分支。
Q4:什么是内存合并访问(coalesced access)?
要点:
- 一个 warp 的线程访问连续的内存地址,合并成少量 transaction;
- 行优先访问矩阵是合并访问,列优先通常不是。
10.2 中级
Q5:解释 SIMT 和 SIMD 的区别。
要点:
- SIMD:同一指令同时处理多个数据,控制流统一;
- SIMT:多个线程执行同一指令,但每个线程有自己的程序计数器和寄存器,支持更灵活的分支(虽然 warp divergence 会降速)。
Q6:什么是 occupancy?哪些因素会影响 occupancy?
要点:
- Occupancy = 实际驻留 warp 数 / SM 最大 warp 数;
- 影响因素:block size、每个线程寄存器数、shared memory 用量、warp scheduler 限制;
- 高 occupancy 有助于 hiding 延迟,但不是性能唯一指标。
Q7:Shared memory 的 bank conflict 是什么?怎么解决?
要点:
- Shared memory 分成 32 个 bank,warp 内多个线程同时访问同一 bank 会串行化;
- 解决方法:调整数据布局、加 padding,让线程访问不同 bank。
Q8:解释 Roofline Model。
要点:
- 横轴:计算密度(FLOPs/byte);
- 纵轴:实际性能;
- 斜线:内存带宽限制;平顶:峰值算力限制;
- 用于判断 kernel 是计算瓶颈还是内存瓶颈。
Q9:H100 相比 A100 的主要提升有哪些?
要点:
- FP8 Tensor Core 与 Transformer Engine;
- NVLink 4(900 GB/s 双向 vs A100 600 GB/s);
- HBM3 更高带宽(3.35 TB/s vs 2 TB/s);
- 新指令如 TMA(Tensor Memory Accelerator)。
10.3 高级
Q10:Flash Attention 为什么比标准 Attention 快?
要点:
- 标准 Attention 把中间矩阵 S、P 写回 HBM,读写量大;
- Flash Attention 用 tiling 把 Q/K/V 分块,在 SRAM/shared memory 内完成 softmax 和矩阵乘;
- online softmax 避免存储完整 S 矩阵;
- 反向时重计算,用算力换显存。
Q11:CUDA 程序的编译链路是什么?
要点:
- CUDA C/C++ → nvcc 前端分离主机代码和设备代码;
- 设备代码 → PTX(虚拟 ISA)→ SASS(特定架构机器码);
- PTX 支持 JIT,保证向前兼容;
- 运行时 driver 加载 cubin 并执行。
Q12:PyTorch 调用 .cuda() 后,底层发生了什么?
要点:
- Python 层 → ATen 算子实现;
- c10 CUDA stream/allocator 管理异步执行和显存;
- 底层调用 cuBLAS/cuDNN/CUDA driver API;
- Kernel 在 GPU 上异步执行,结果通过 stream 同步返回。
Q13:多卡训练中 NCCL all-reduce 的瓶颈可能在哪里?
要点:
- NVLink/IB 带宽不足;
- 拓扑不优(跨 switch、跨机柜);
- 消息太小,启动开销占比高;
- 慢节点拖累整体(straggler);
- NCCL 算法选择不当(Ring vs Tree vs NVLink-SHARP)。
Q14:你怎么排查一个 CUDA OOM?
要点:
- 区分 allocated、reserved、
nvidia-smi显示值; - 检查 batch size、序列长度、KV Cache;
- 检查 activation checkpointing 和 gradient accumulation;
- 查看是否有其他进程占用显存;
- 用
torch.cuda.memory_summary()分析峰值和碎片。
Q15:MIG、MPS、Time-slicing 怎么选?
要点:
- MIG:硬件隔离,适合生产多租户;
- MPS:进程级共享,适合同一信任域内多服务;
- Time-slicing:时间片轮转,适合开发测试;
- 选择依据:隔离性要求、开销、成本。
Q16:Rubin 相比 Blackwell 的主要变化是什么?(2026 年高频题)
要点:
- HBM4:288 GB / 22 TB/s,约为 Blackwell 的 2.8 倍——直接回应推理的带宽瓶颈;
- NVLink 6:每 GPU 3.6 TB/s,NVL72 整柜聚合 260 TB/s;
- 第三代 Transformer Engine:NVFP4 推理 50 PFLOPS,矩阵 B 支持 3-bit 查表格式,Attention 结构化稀疏;
- 双 die NV-HBI 封装(224 SM / 896 Tensor Core),对外是单 GPU;
- 机柜级细粒度同步:tile-level triggering、counted writes、供电平滑——竞争单位从单卡变成机柜;
- 后续:Rubin Ultra / NVL576(Kyber,2027),再下一代 Feynman。
Q17:为什么 2025-2026 年 Triton / torch.compile 越来越流行?手写 CUDA 还有价值吗?
要点:
torch.compile(Inductor → Triton)成为 PyTorch 默认优化路径,自动融合、自动 tiling,开发效率远超手写;- AOTI 把编译产物固化部署;Triton 可移植到 AMD/Intel,成为跨厂商抽象层;
- NVIDIA 官方以 cuTile(CUDA 13)回应,说明 tile 级 DSL 已是主流方向;
- 手写 CUDA 的保留阵地:极致性能关键路径(FlashAttention-3、MoE grouped GEMM)、通信-计算重叠、新硬件特性的首批利用。
10.4 本节小结
GPU/CUDA 面试的核心考察点:
- 基础概念:SIMT、Warp、内存层次、合并访问;
- 编程能力:能分析 kernel 性能瓶颈、知道怎么优化;
- 架构理解:Tensor Core、NVLink、HBM、架构演进;
- 生产经验:OOM、NCCL、Xid、MIG/MPS、监控;
- 行业动态(2026):Rubin 架构要点、CUDA 13 变化、Triton/torch.compile 对 kernel 开发方式的重塑。
建议面试前结合 Mini Demo 和 Nsight Compute 实际跑几个 kernel,把概念落到数字上。