Cuda 为什么nvprof和nvidia smi在电源方面报告了不同的结果?

Cuda 为什么nvprof和nvidia smi在电源方面报告了不同的结果?,cuda,profiling,Cuda,Profiling,我使用nvprof和nvidia smi分别监控GPU功耗,但观察到不同的结果,总结如下表所示 ---------------------------------------------------------------- gpu | busy | idle model | nvprof[Watt] smi[Watt] | nvprof[Watt] smi[Watt] -------

我使用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和@Talonmes的猜测很有道理。因此,为了进行功耗分析,我对smi进行了更多的探索。然而,结果对我来说毫无意义

补充说明:

  • 红色数据的不连续性是因为我直接使用了 smi报告的时间戳,具有低分辨率(秒)。此外 为了便于说明,p0被分配了一个数值20和 第1页,共10页。因此,在大多数情况下,GPU是投入其全部功能的 性能状态(这是奇数),除了“忙”情况,GPU 在15~18秒内下降到p1(奇数

  • 直到~21.3s,才为最新版本调用cudaSetDevice() 第一次。所以功率上升和p态变化发生在~18s 非常奇怪

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


  • 忽略p-状态。他们把你弄糊涂了

    nvprof(单独)使用的GPU数量远远超过nvidia smi(单独)。因此,运行nvprof时消耗的“空闲”功率高于仅运行nvidia smi时消耗的“空闲”功率。nvprof启动GPU上的许多引擎,而nvidia smi只启动一些寄存器和一些I2C电路

    GPU有许多p状态,真正的空闲p状态为P8或更低(即更大)

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

    这两个测量值之间的差异已经得到了解释。图表和附加更新没有任何用处,只是让你感到困惑


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

    忽略p状态。他们把你弄糊涂了

    nvprof(单独)使用的GPU数量远远超过nvidia smi(单独)。因此,运行nvprof时消耗的“空闲”功率高于仅运行nvidia smi时消耗的“空闲”功率。nvprof启动GPU上的许多引擎,而nvidia smi只启动一些寄存器和一些I2C电路

    GPU有许多p状态,真正的空闲p状态为P8或更低(即更大)

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

    这两个测量值之间的差异已经得到了解释。图表和附加更新没有任何用处,只是让你感到困惑


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

    @Robert Crovella。为了以防万一,我把那个部分去掉了。谢谢你提醒我。繁忙测量的区别看起来像测量噪音。在“空闲”测量的情况下,当nvprof处于活动状态时,电源状态可能无法降至较低的状态,换句话说,nvprof更具侵入性。这只是一个有效的假设,可能是也可能不是可验证的。我同意诺伯特的假设
    nvprof
    可能在使用硬件信息API之前将GPU拉到比nvidia smi更高的p状态。顺便说一句,我需要分析我的程序的功耗。请您解释一下如何使用
    nvprof
    nvidia smi
    @muradin执行此操作,本手册非常清楚地解释了命令行选项。简言之,(1)nvprof—系统评测(2)nvidia smi—查询—id=${DEVICE_id}