Back to blog

Understanding GEMM Performance and Energy on NVIDIA Ada Lovelace: A Machine Learning-Based Analytical Approach

基于机器学习的 NVIDIA Ada Lovelace GEMM 性能和能耗分析

Understanding GEMM Performance and Energy on NVIDIA Ada Lovelace: A Machine Learning-Based Analytical Approach

一、论文概述

项目内容
标题Understanding GEMM Performance and Energy on NVIDIA Ada Lovelace: A Machine Learning-Based Analytical Approach
作者未在摘要中明确列出
机构未明确
论文arXiv:2411.16954
代码GPPerf (开源)
发布2024年11月
许可未明确
硬件平台NVIDIA GeForce RTX 4070 (Ada Lovelace)

二、核心思想

问题定义

GPU 内核性能优化是现代高性能计算的关键挑战,特别是随着应用对计算资源利用效率要求的提高。NVIDIA Ada Lovelace 架构(如 RTX 4070)具有 504.2 GB/s 峰值内存带宽和 29.15 TFLOPS 理论峰值性能,性能优化复杂性显著增加。

解决方案概述

本文提出基于机器学习的 GEMM 性能预测框架,结合两种方法:

  1. 自定义 tiled 矩阵乘法内核: 用于基础分析,研究 tile 大小对性能的影响
  2. NVIDIA CUTLASS 库: 用于全面性能数据收集,覆盖 16,128 种 GEMM 配置

预测模型: 使用 Random Forest 多输出回归,预测运行时间、功耗和能效。

核心性能

  • 运行时预测: R² = 0.98,平均误差 15.57%
  • 功耗预测: R² = 0.78,中位误差 5.42%
  • 优化收益: 最优 tile 大小可提升性能 3.2×,降低功耗 22%

三、技术架构

Roofline 性能模型

Roofline 模型

Figure 1: Ada 架构的 Roofline 性能模型

关键参数:

  • 峰值内存带宽: 504.2 GB/s
  • 理论峰值性能: 29.15 TFLOPS
  • Ridge point: 59 FLOPs/Byte(内存受限 vs 计算受限的转折点)

性能区域:

  • 内存受限区域: 算术强度 < 59 FLOPs/Byte
  • 计算受限区域: 算术强度 > 59 FLOPs/Byte

核心公式

算术强度: Arithmetic Intensity=2MNK4(MK+KN+MN)\text{Arithmetic Intensity} = \frac{2MNK}{4(MK + KN + MN)}

内存效率: Memory Efficiency=Achieved Bandwidth504.2 GB/s×100%\text{Memory Efficiency} = \frac{\text{Achieved Bandwidth}}{504.2 \text{ GB/s}} \times 100\%

Roofline 上界: Performance=min⁡(Peak Compute,Peak Bandwidth×Arithmetic Intensity)\text{Performance} = \min(\text{Peak Compute}, \text{Peak Bandwidth} \times \text{Arithmetic Intensity})

Tiled 矩阵乘法内核

CUDA 内核结构:

__global__ void op_mm_kernel(float *a, float *b, float *c,
                              int M, int N, int K, int tile_size) {
    extern __shared__ float shared_mem[];
    float* As = shared_mem;
    float* Bs = shared_mem + tile_size * tile_size;

    float r = 0.0f;
    int row = threadIdx.y;
    int col = threadIdx.x;

    for (int k = 0; k < (K + tile_size - 1) / tile_size; k++) {
        // 加载到共享内存
        // 执行计算
    }
}

Tile 大小影响:

  • Block 大小 = tile_size × tile_size
  • 共享内存 = 2 × block_size × sizeof(float)
  • Grid 大小随矩阵维度和 tile 大小变化

SM 占用率分析

Tile 大小每 SM 最大活跃 Block 数说明
1高但利用率极低(每 warp 仅 1 线程)
4中改善但仍受限
8中平衡点
1624最佳平衡
321共享内存限制

四、实验结果

Tiled 矩阵乘法运行时

Tile=1 运行时

Figure 2: Tile=1 的运行时(最慢配置)

Tile=4 运行时

Figure 3: Tile=4 的运行时

Tile=8,16,32 运行时

Figure 4: Tile=8,16,32 的运行时

关键观察:

  • 运行时随矩阵大小增加而增加
  • 运行时随 tile 大小增加而减少(直到 tile=16 达到平台)
  • Tile=1 极慢:每 warp 仅 1 线程工作,SP 利用率极低
  • Tile=16 后不再改善:内存访问瓶颈已解决,共享内存限制成为新瓶颈

功耗分析

功耗

Figure 5: 不同 tile 大小下的功耗

关键发现:

  • 更大 tile 大小 → 更低功耗
  • 小 tile (1,4): 频繁调度 block,功耗高
  • 大 tile (16,32): 减少 grid 大小,最小化空闲 SP 时间

优化收益: 最优 tile 大小可降低功耗 22%

相关性分析

相关性系数说明
M×N×K vs 运行时r=0.98强相关
M×N vs 功耗r=0.80中等相关
K vs 功耗较弱输出维度影响更大

洞察: 优化矩阵分区策略应优先考虑输出维度以提高功耗效率

机器学习预测

运行时预测

Figure 7: 运行时预测精度

预测模型性能:

指标运行时功耗能耗
R² 分数0.980.78-
平均误差15.57%--
中位误差-5.42%-

CUTLASS 综合分析

数据规模: 16,128 种 GEMM 配置

  • 多种矩阵尺寸
  • 多种线程块配置
  • 多种内存访问模式

Random Forest 多输出回归:

  • 同时预测运行时间、功耗、能耗
  • 跨矩阵尺寸的稳健扩展行为

五、核心创新

创新点说明理论/实验依据
双层分析方法自定义内核 + CUTLASS 库基础分析 + 全面覆盖
ML 性能预测Random Forest 多输出回归R²=0.98 运行时预测
Tile 大小优化系统性研究 tile 大小影响3.2× 性能提升
能耗分析同时考虑性能和功耗22% 功耗降低
开源框架GPPerf 工具包可复现研究

六、关键发现

1. Tile 大小优化提升功耗效率

  • 更大 tile → 更高效资源利用 → 更低功耗
  • 小 tile (1,4): 频繁调度,功耗高
  • 最优 tile=16: 性能和功耗的最佳平衡

2. 矩阵大小对性能指标的影响

  • 运行时: 由总计算量 (M×N×K) 主导 (r=0.98)
  • 功耗: 由输出维度 (M×N) 主导 (r=0.80)
  • 优化启示: 功耗优化应关注输出维度

3. 共享内存约束

  • Tile=16: 占用率从 24 降至 6 blocks/SM
  • Tile=32: 降至 1 block/SM
  • 实际约束: 共享内存限制了 tile 大小的上界

4. 最优配置

配置性能提升功耗降低
Tile=16 (最优)3.2×22%
Tile=32较少改善更低功耗

七、总结

核心贡献

  1. 分析框架: 结合自定义内核和 CUTLASS 的双层分析方法
  2. ML 预测模型: Random Forest 实现高精度性能预测
  3. Tile 优化: 发现 tile=16 是最佳平衡点
  4. 能耗洞察: 矩阵分区应优先考虑输出维度
  5. 开源工具: GPPerf 框架可复现

技术影响

  • 内核优化: 指导 tile 大小选择
  • 性能预测: 无需运行即可预测性能
  • 能效优化: 同时优化性能和功耗
  • 架构理解: 深入理解 Ada Lovelace 特性

局限性

  • 仅测试 RTX 4070(Ada Lovelace)
  • 预测模型特定于该架构
  • 未考虑跨 GPU 泛化

八、参考资源