【问题标题】:why do nvprof and nvidia-smi report different results on power?为什么 nvprof 和 nvidia-smi 报告不同的电源结果?
【发布时间】: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 进行了更多探索以进行功率分析。然而,结果对我来说没有意义。

补充说明:

  1. 红色数据的不连续是因为我直接使用了 smi 报告的时间戳,分辨率低(秒)。除了, 为便于说明,p0 被赋值为 20,并且 p1 为 10。因此,在大多数情况下,GPU 都处于满负荷状态 性能状态(这是奇怪),除了“忙碌”的情况,GPU 不知何故 在 15~18 秒内下降到 p1(奇数)。

  2. 直到 ~21.3s 才调用 cudaSetDevice() 第一次。所以功率上升和 p 状态变化发生在 ~18s 比较奇怪

  3. “忙电源”是在我的 GPU 代码设置为后台时测量的, 并且 smi 进入一个无限循环来查询功率和 p-state 重复直到后台进程终止。 “空闲功率”是 只需启动 smi 50 次即可测量。显然在后者 在这种情况下,smi 表现出更大的开销,这又是一个奇数

【问题讨论】:

  • @Robert Crovella。为了以防万一,我已经删除了那部分。谢谢你提醒我。
  • “忙碌”测量的差异看起来像是测量噪声。在“空闲”测量的情况下,当 nvprof 处于活动状态时,电源状态可能无法下降到较低的状态,换句话说,nvprof 更具侵入性。这只是一个可行的假设,可能是可验证的,也可能是不可验证的。
  • 我同意诺伯特的假设。 nvprof 可能在使用硬件信息 API 之前将 GPU 拉入比 nvidia-smi 更高的 p 状态。顺便说一句,Atlas 的失礼很好。
  • 我需要分析我的程序的功耗。你能解释一下如何使用nvprofnvidia-smi
  • @muradin,该手册非常清楚地解释了命令行选项。简而言之,(1) nvprof --system-profiling on,(2) nvidia-smi --query --id=${DEVICE_ID} --display=POWER,PERFORMANCE | grep“电力消耗”。要获得总能耗,您可以将命令置于无限循环中,并使用 cuda 程序的终止作为退出条件。如果您希望将能量评估作为代码的自然部分,您可以使用 NVML API。有用的函数是 nvmlDeviceGetPowerUsage(deviceHandle, &powerMilliWatt)。

标签: cuda profiling


【解决方案1】:

忽略 p 状态。他们让你感到困惑。

nvprof(单独)使用的 GPU 比 nvidia-smi(单独)要多得多。因此,运行 nvprof 时消耗的“空闲”功率比仅运行 nvidia-smi 时要高。 nvprof 在 GPU 上启动了许多引擎,而 nvidia-smi 只是启动了一些寄存器,可能还有一些 I2C 电路。

GPU 有许多 p-state,真正的空闲 p-state 是 P8 或更低(即更大)。

只需运行 nvidia-smi 就可以(通常会)将 GPU 的 p 状态简单地从“真正的空闲”P 状态提升到更高的状态,例如 P0。这不会告诉你: - p-state提升发生了多长时间(nvidia-smi的采样周期太粗了) - 实际消耗了多少电量。是的,p-state 是一个指标,但不会以校准的方式告诉您任何事情。 GPU 在 P0 时可能或多或少“空闲”(例如,将 GPU 置于持久模式)。

已经解释了两次测量之间的差异。图表和其他更新没有任何用处,只会让您感到困惑。

如果您想测量功率,请使用任一方法。很明显,它们与 GPU“忙碌”的情况非常相关,而且它们在“空闲”情况下看起来不同的事实仅仅意味着您在两种情况下都在对“空闲”做出假设,而这根本不是真的.

【讨论】:

    猜你喜欢
    • 2018-05-20
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 2019-04-24
    相关资源
    最近更新 更多