Skip to content

面试手册

本页用于把项目讲成“工程案例”,而不是“跑分截图”。

90 秒讲述模板

我把这个 SGEMM 项目做成了工程化学习笔记,而不是单次 benchmark 脚本。
它从可读的 FP32 基线出发,依次实现 tiled、bank-free、double-buffer 和 Tensor Core WMMA。
每一步都对应一个明确瓶颈,并保持统一 launcher 契约,方便横向对比。
正确性始终通过 cuBLAS 对照验证,同时为 FP32 和 WMMA 设定不同容差。
我还区分了 WMMA 的端到端与仅计算结果,避免把转换/回退开销混为纯算力结论。
核心目标不是超越 cuBLAS,而是展示可验证的优化推理和工程纪律。

推荐讲述结构

  1. 问题定义
    说明为什么 SGEMM 是理解内存层级、并行映射、混合精度权衡的高价值案例。

  2. 优化阶梯
    逐步讲每个 kernel 改了什么、理论上为什么会更快。

  3. 正确性与可信度模型
    讲清 cuBLAS 对照、容差差异、以及 WMMA 非 16 对齐时的回退策略。

  4. 测量纪律
    讲清端到端 vs 仅计算,以及本地 GPU 验证 vs 托管 CI 验证边界。

  5. 工程成熟度
    补充统一接口、RAII/异常处理、双语文档、OpenSpec 治理等信号。

常见深挖问题与回答框架

Q1:既然有 cuBLAS,为什么还做这个?

高质量回答框架:

  • 生产场景应优先 cuBLAS/CUTLASS。
  • 本项目目标是学习和展示性能推理能力。
  • 价值在于“定位瓶颈 + 验证结论”,不是替代官方库。

Q2:为什么 Tensor Core 结果只到 cuBLAS 的一部分?

高质量回答框架:

  • 当前 WMMA 路径是教学型实现,不是生产极致优化实现。
  • cuBLAS 有更深层的分块、调度、融合与架构特化内核。
  • 我分开报告 compute-only 与 end-to-end,明确开销来源。

Q3:你如何保证性能结论可信?

高质量回答框架:

  • 先过正确性,再谈性能。
  • 报告里明确测量范围和 shape 条件。
  • 区分 CI 可验证内容与 GPU 运行时可验证内容。
  • 对 WMMA 非友好维度给出显式 fallback。

Q4:如果做成生产项目,你下一步会做什么?

高质量回答框架:

  • 做架构特化 launch 参数调优。
  • 增强 WMMA 数据分阶段与重叠深度。
  • 加入 Nsight Compute 指标闭环。
  • 评估 CUTLASS 方案以兼顾性能与可维护性。

面试中容易扣分的表达

  • 不加前提地说“Tensor Core 一定更快”。
  • 只给一个 GFLOPS 数字,不解释测量范围。
  • 忽略混合精度带来的容差与数值语义差异。
  • 把 CI 编译通过当作运行时正确性证明。

面试前快速自查

  • [ ] 能用一句话解释每个优化阶段。
  • [ ] 能解释 FP32 与 WMMA 为什么容差不同。
  • [ ] 能解释为什么 benchmark 结果要分标签。
  • [ ] 能解释 CI 与本地 GPU 的验证分工。
  • [ ] 能解释即便没超越 cuBLAS,这个项目仍有价值。

相关页面

MIT Licensed