为什么nvprof和nvidia-smi会报告不同的电源效果?

时间:2013-11-18 05:03:06

标签: cuda profiling

我使用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报告所有设备的电量。因此,使用nvprof为特定GPU获取“空闲”功能的方法就是让代码在另一个GPU上运行。

注2:nvidia-smi报道了几个关于功率的不同数量,但我专注于“功耗”

注3:cuda版本:5.5

所以我的问题是:为什么nvidia-smi报告的功率通常小于nvprof,为什么在监视空闲功率时这种差异会变大?最后,我应该更信任哪个实用程序?

另外,为了确保两个实用程序测量的功率是指输入电功率(P = I * U)而不是输出功率,对吗?

非常感谢任何建议!


更新 @njuffa和@talonmies的推测非常有道理。所以我对功率分析进行了更多的探索。然而,结果对我来说没有意义。

enter image description here

补充说明:

  1. 红色数据的不连续性是因为我直接使用了 smi报告的时间戳,分辨率低(秒)。除了, 为了说明的目的,为p0分配数值20和 因此,在大多数情况下,GPU已经完全投入使用 性能状态(这是奇数),除了“忙”情况,GPU以某种方式 在15~18s内下降到p1(奇数)。

  2. 直到~21.3s才调用cudaSetDevice() 第一次。因此,功率上升和p态变化发生在〜18s 相当奇数

  3. 当我的GPU代码设置为背景时,测量
  4. “忙碌功率”, 并且smi进入无限循环以查询功率和p状态 反复进行,直到后台进程终止。 “闲置的力量”是 简单地通过启动smi 50次来测量。显然在后者 例如,smi表现出更大的开销,这又是奇数

1 个答案:

答案 0 :(得分:1)

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

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

GPU具有多个p状态,并且真正的空闲p状态是P8或更低(即更大)。

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

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

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