GPU 是计算更耗电,还是读写更耗电?

做 CUDA GEMM 优化时,顺手在一张 RTX 4090 上测了一组小实验。

测试方法很简单:分别跑几种 synthetic kernel,同时用单独进程每 0.5 秒记录一次 nvidia-smi 的功耗、温度、频率。统计时只保留 GPU util=100% 的样本,并跳过最开始的 ramp-up。

结果


workload吞吐平均功耗最大功耗最高温度
纯 Tensor Core MMA175.8 BF16 TFLOP/s174.2W176.5W51C
global read980.8 GB/s287.8W291.8W53C
global write888.6 GB/s244.3W245.3W55C
global copy912.2 GB/s read+write282.7W283.7W59C
shared memory R/W21.6 TB/s 逻辑 shared 流量349.6W369.4W69C


几个结论

第一,纯 Tensor Core MMA 不一定烧满整卡功耗

这个测试能跑到约 176 BF16 TFLOP/s,但功耗只有 174W 左右。原因是它几乎只在寄存器里反复发 MMA 指令,不怎么动 global memory、L2、shared memory 和大规模 store。

第二,streaming global memory 比纯 MMA 更耗电

global read/copy 大约 283-288W,明显高于纯 MMA。这类 kernel 会持续驱动 L2、memory controller 和显存路径。RTX 4090 用的是 GDDR6X,不是 HBM。

第三,shared memory 高频读写在这个实验里最耗电

shared memory 单次访问当然比显存便宜。但这个 kernel 几乎不等显存,可以让 SM 内部 shared load/store、FP32 运算和同步路径持续高活跃,所以平均功耗到了 350W 左右。

所以这次实验的核心结论是:


单次访问成本:显存通常最贵 整卡实时功耗:取决于单位时间内哪些硬件路径被持续激活

在这组 synthetic workload 上,功耗排序大概是:


shared memory 高频 R/W > streaming global read/copy > 纯 Tensor Core MMA

这也说明:GPU util=100% 信息量很有限。它只能说明 GPU 忙,但不能说明到底是 Tensor Core 忙、显存忙,还是 SM 内部 load/store 路径忙。

编辑于 2026-05-20 · 著作权归作者所有