面试手册
本页用于把项目讲成“工程案例”,而不是“跑分截图”。
90 秒讲述模板
我把这个 SGEMM 项目做成了工程化学习笔记,而不是单次 benchmark 脚本。
它从可读的 FP32 基线出发,依次实现 tiled、bank-free、double-buffer 和 Tensor Core WMMA。
每一步都对应一个明确瓶颈,并保持统一 launcher 契约,方便横向对比。
正确性始终通过 cuBLAS 对照验证,同时为 FP32 和 WMMA 设定不同容差。
我还区分了 WMMA 的端到端与仅计算结果,避免把转换/回退开销混为纯算力结论。
核心目标不是超越 cuBLAS,而是展示可验证的优化推理和工程纪律。
推荐讲述结构
问题定义
说明为什么 SGEMM 是理解内存层级、并行映射、混合精度权衡的高价值案例。优化阶梯
逐步讲每个 kernel 改了什么、理论上为什么会更快。正确性与可信度模型
讲清 cuBLAS 对照、容差差异、以及 WMMA 非 16 对齐时的回退策略。测量纪律
讲清端到端 vs 仅计算,以及本地 GPU 验证 vs 托管 CI 验证边界。工程成熟度
补充统一接口、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,这个项目仍有价值。