跳转至

GEMM 从提交到性能证据:完整的 GPU 排查案例

场景与数值契约

本案例是可手算的教学模型,不含实卡成绩。选择 C=A×BM=N=K=4096,A/B/C 存储为 FP16,FP32 累加,beta=0,不读取旧 C。目标是建立输入、执行、正确性、时间与硬件证据之间的对应关系,不承诺固定利用率。

记录 layout、leading dimension、转置标志、计算精度、GPU 型号及库/编译器版本。FP32 累加不等于 FP32 输出;不同 math mode 可能改变有效输入精度,跨实现比较不能只写“都是 GEMM”。

1. 从业务请求拆到设备任务

执行路径为 buffer 分配/复用、H2D、GEMM、D2H(若业务需要)、结果消费。权重常驻和每次上传权重是不同基线,要分别报告。

三条依赖必须成立:输入生产结束后启动 GEMM;最后一次使用后重写输入;输出对消费者可见后读取结果。双 stream 应明确哪个 event 连接哪条边,不能靠全局同步掩盖生命周期错误。

2. 工作量和访存下界

F = 2*M*N*K = 137438953472 FLOP ≈ 137.44 GFLOP
B_min = 2*(M*K + K*N + M*N) = 100663296 B = 96 MiB
I_ideal = F/B_min ≈ 1365.33 FLOP/B

B_min 假设 A/B 各从目标存储层读取一次、C 写一次。实际分块重复读取、spill 和格式转换会增加流量。L2 与 HBM 的字节数不同,不能把算法最小字节数冒充 profiler 的 DRAM 计数。

设一台虚构设备的匹配精度算力上界为 100 TFLOP/s、HBM 上界为 1 TB/s,则计算下界约 1.374 ms、最小访存下界约 0.101 ms。取两者最大值,理想模型倾向算力受限;这不证明实际 kernel 已经算力受限,也不能把可能重叠的耗时直接相加。

3. 为什么 Tile 不是越大越好

输出 Tile 增大可提高复用,但累加器随 Tm*Tn 增长。寄存器需求增加可能降低驻留 block 数,spill 又引入访存。Shared Memory 的多 stage 也会占用更多驻留资源。

驻留 block 上界需同时检查寄存器、共享内存、线程和 block 限制,并考虑实际分配粒度;不要用理想除法替代目标架构工具。高 occupancy 只表示驻留 warp 多,不保证 eligible warp 多或吞吐高。

调 Tile 时同时记录寄存器、共享内存、spill、驻留限制、kernel 时间和误差。降低 occupancy 但提高复用的版本可能更快;限制寄存器可能因 spill 反而变慢。

4. 先验证正确性

与可信参考实现比较绝对、相对误差及整体误差统计,容差按输入范围、K、累加与输出精度制定。零值、单位阵用于定位地址错误,但不能替代随机与高动态范围输入。

增加 M=130,N=70,K=129 等非整齐形状,检查边界 mask、padding、stride,以及接口声称支持的非连续输入。尾块越界即使没崩溃也不算通过。

5. 时间线决定下一步采样

先记录未插桩端到端基线,warm-up 后重复测量并保留中位数和尾部时延。CUDA event 所在 stream 与依赖必须覆盖被测工作;Host 墙钟则覆盖业务范围,两者分开报告。

证据 可检验假设 下一步
GPU 空闲,CPU 时间线有长间隙 Host 供给不足或大量小任务 评估批处理、图重放
H2D/D2H 占主导 数据驻留策略不合适 比较常驻输入与搬运方案
kernel DRAM 吞吐高 复用差、spill 或转换 核对实际字节与编译报告
计算管线繁忙 接近对应精度的计算限制 检查指令组合与算法工作量
吞吐均低而耗时长 依赖、并行度或尾波 eligible warp、stall、grid 和形状

指标采集可能需要 replay 并影响 cache,因此 profiler 时间与未插桩时间分开。指标集合依 GPU/工具版本而异;采集语义查阅 Nsight Compute Profiling Guide

6. 实验记录与追问

每次改变一个主要变量:Tile、stage、layout、融合或并发。保存种子、配置、误差、原始报告和采集命令。运行时错误、未完成同步、正确性失败的样本记为失败,不参与吞吐平均。

面试追问:算法强度高为何仍 memory-bound?Tensor Core 利用率和端到端收益为何不同?减少 launch 次数为何可能比加速单 kernel 更有效?融合减少写回,为何可能因寄存器压力反而变慢?

回答时分别指向业务关键路径、选定存储层的实际流量和资源约束。测量实践参见 CUDA Best Practices Guide现有 GEMM 实验 是实卡练习入口,本页数值不代表该实验已取得的成绩。