【发布时间】:2013-12-01 04:03:00
【问题描述】:
我分别使用 nvprof 和 nvidia-smi 监控 GPU 功耗,但观察到的结果不同,总结如下表。
----------------------------------------------------------------
gpu | busy | idle
model | nvprof[Watt] smi[Watt] | nvprof[Watt] smi[Watt]
----------------------------------------------------------------
M2090 | ~151 ~151 | ~100 ~75
K20 | ~105 ~102 | ~63 ~43
----------------------------------------------------------------
注意 0:“忙碌”表示我的代码正在受监控的 GPU 上运行
注 1:nvprof 报告所有设备的电源。因此,我为特定 GPU 使用 nvprof 获得“空闲”功能的方法就是让代码在另一个 GPU 上运行。
注 2:nvidia-smi 报告了几个关于功率的不同数量,但我关注的是“功耗”
注 3:cuda 版本:5.5
所以我的问题是:为什么nvidia-smi报告的power一般比nvprof小,为什么监控idle power时这个差异会变大?最终,我应该更信任哪个实用程序?
另外,为了确定一下,两个公用事业测量的功率是指输入电功率(P=I*U)而不是输出热功率,对吗?
非常感谢您的任何建议!
更新 @njuffa 和 @talonmies 的推测很有道理。因此,我对 smi 进行了更多探索以进行功率分析。然而,结果对我来说没有意义。
补充说明:
红色数据的不连续是因为我直接使用了 smi 报告的时间戳,分辨率低(秒)。除了, 为便于说明,p0 被赋值为 20,并且 p1 为 10。因此,在大多数情况下,GPU 都处于满负荷状态 性能状态(这是奇怪),除了“忙碌”的情况,GPU 不知何故 在 15~18 秒内下降到 p1(奇数)。
直到 ~21.3s 才调用 cudaSetDevice() 第一次。所以功率上升和 p 状态变化发生在 ~18s 比较奇怪。
“忙电源”是在我的 GPU 代码设置为后台时测量的, 并且 smi 进入一个无限循环来查询功率和 p-state 重复直到后台进程终止。 “空闲功率”是 只需启动 smi 50 次即可测量。显然在后者 在这种情况下,smi 表现出更大的开销,这又是一个奇数。
【问题讨论】:
-
@Robert Crovella。为了以防万一,我已经删除了那部分。谢谢你提醒我。
-
“忙碌”测量的差异看起来像是测量噪声。在“空闲”测量的情况下,当 nvprof 处于活动状态时,电源状态可能无法下降到较低的状态,换句话说,nvprof 更具侵入性。这只是一个可行的假设,可能是可验证的,也可能是不可验证的。
-
我同意诺伯特的假设。
nvprof可能在使用硬件信息 API 之前将 GPU 拉入比nvidia-smi更高的 p 状态。顺便说一句,Atlas 的失礼很好。 -
我需要分析我的程序的功耗。你能解释一下如何使用
nvprof和nvidia-smi。 -
@muradin,该手册非常清楚地解释了命令行选项。简而言之,(1) nvprof --system-profiling on,(2) nvidia-smi --query --id=${DEVICE_ID} --display=POWER,PERFORMANCE | grep“电力消耗”。要获得总能耗,您可以将命令置于无限循环中,并使用 cuda 程序的终止作为退出条件。如果您希望将能量评估作为代码的自然部分,您可以使用 NVML API。有用的函数是 nvmlDeviceGetPowerUsage(deviceHandle, &powerMilliWatt)。