Skip to content

延伸阅读路线

这页不是“再给你一堆链接”,而是刻意回答:看完本站之后,下一步到底该往哪里学、为什么先学那个。

GEMM 分块与层级化思维

当你已经能机械地看懂 tiled SGEMM,但还说不清它为什么成立时,走这条路线。

建议一直追问:

  • 每一级 tile 到底在保护哪一层内存?
  • 哪个设计改变是在降低带宽压力,哪个是在换取更高吞吐?
  • 教学型 kernel 与生产模板库的边界差在哪里?

把 occupancy 当约束,不当口号

当你听到很多人说“occupancy 不够高”,但不知道它究竟是不是根因时,走这条路线。

建议一直追问:

  • occupancy 下降,是 kernel 变差了,还是每个 block 做了更多有价值的工作?
  • 先卡住你的到底是寄存器、shared memory,还是 block 配置?
  • 哪个 profiler 指标可以推翻你当前的解释?

面向 SGEMM 的 Roofline 思维

当你想更严谨地区分“内存受限”和“计算受限”,而不是只凭直觉下结论时,走这条路线。

建议一直追问:

  • 这次优化提升的是算术强度、降低的是延迟,还是只是把成本换了位置?
  • 当前瓶颈更像是内存流量、指令混合,还是 launch 几何?
  • 你凭什么认为下一步该追 Tensor Core,而不是继续优化内存路径?

Tensor Core 约束与 fallback 设计

当 WMMA 在图表里看起来很亮眼,但放到真实 workload 里却显得脆弱时,走这条路线。

  • 先读 Tensor Core 路径Tensor Core WMMA
  • 再打开 WMMA API 与混合精度指南,确认 fragment 大小、对齐要求、数据转换成本。
  • 最后把这些约束和仓库中的 fallback 逻辑对照起来,理解为什么“不支持的 shape 应安全退回 FP32”是一种工程选择,而不是性能妥协。

建议一直追问:

  • 哪些输入 shape 真正“适合 Tensor Core”,哪些不适合?
  • 计时里有多少是真正的矩阵乘法,有多少是转换或 wrapper 成本?
  • 什么时候 FP32 fallback 反而是更诚实的实现?

从症状到证据的 profiling 路线

当你只知道“结果变了”,却还不知道问题在时间线、单个 kernel,还是整体 benchmark 流程里时,走这条路线。

建议一直追问:

  • 症状体现在 timeline、单个 kernel 指标,还是最终 benchmark 汇总里?
  • 哪个指标最能区分带宽瓶颈、occupancy 问题、延迟隐藏不足或错误假设?
  • 如果要对外发布性能结论,你还缺什么证据?

按当前目标选路线

当前目标最适合的路线
想真正理解 shared-memory tilingGEMM 分块与层级化思维
想更准确地讨论 occupancy把 occupancy 当约束,不当口号
想用更强的模型解释性能上限面向 SGEMM 的 Roofline 思维
想搞清楚 Tensor Core 什么时候值得用Tensor Core 约束与 fallback 设计
想把 profiler 输出变成调试计划从症状到证据的 profiling 路线

MIT Licensed