Skip to content

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 面试的核心考察点:

  1. 基础概念:SIMT、Warp、内存层次、合并访问;
  2. 编程能力:能分析 kernel 性能瓶颈、知道怎么优化;
  3. 架构理解:Tensor Core、NVLink、HBM、架构演进;
  4. 生产经验:OOM、NCCL、Xid、MIG/MPS、监控;
  5. 行业动态(2026):Rubin 架构要点、CUDA 13 变化、Triton/torch.compile 对 kernel 开发方式的重塑。

建议面试前结合 Mini Demo 和 Nsight Compute 实际跑几个 kernel,把概念落到数字上。

Released under CC-BY-SA-4.0 License.