您可能能够获得进程的功耗数字,但它只会在孤立的情况下是正确的。例如,如果您并行运行两个进程,则不太可能以良好的精度拟合直线。
这在嵌入式平台上很难做到,每个电压轨都完全断开,更不用说在你的一个数据点是来自插座的瓦数的 PC 上。您需要衡量和牢记的事项:
- 基本负载不是那么基本。系统闲置数秒后将处于比没有闲置的更深的睡眠状态。你测量“深度”睡眠还是闲置?你怎么知道你在测量哪个?
- 负载并不总是线性的。可变电压:一些组件根据负载和频率上下移动电压。温度:这些天可以去任何一种方式(不仅仅是热失控)。
- 电源在所有负载下的效率都不相同。如果您正在测量插座功率,则需要牢记这一点。例如,它在 100W 以下可以有 50% 的效率,在 100-300W 范围内可以达到 90%,在 300W+ 下可以达到 80%。
- 额外的过程不一定会线性增加。例如,一旦 DDR 脱离空闲状态,它的基本负载就会增加,但额外的进程不会使情况变得更糟。对于多核和可变频率,这更加不可预测。
测量它的基本方法是显而易见的方法:记录空闲瓦数,记录使用瓦数,减去。您可以尝试以 50%、25%、75% 等占空比运行,以绘制漂亮的图形(线性或其他)。这将显示任何非线性。不幸的是,CPU 稳压器和 PSU 的转换效率与负载将是主要原因。如果没有您正在使用的主板的开发版本(不太可能),或者如果您有幸拥有一个带有效率与负载图表的 PSU,您将无法消除这种情况。
但是,重要的是要认识到这些数据点仅在孤立的情况下是正确的。您可以很好地模拟这些事物在系统中的总结方式,但要非常清楚,这充其量只是一个很好的近似值。将其视为等同于查看音频编解码器的一些 C 代码并估计其运行速度。您可以获得一个很好的总体概念,但在实际测量时会非常不准确。
编辑 - 像上面那样扩展一点并不能真正回答你如何去做。
测量功耗:为自己准备一个准确的功率计。正如我所提到的,除非您有办法断开各个电压轨并测量电流,否则您只能在插座处进行测量。或者,如果您可以访问主板上的健康监控状态,并且具有电流(安培)报告(罕见),则可以为您提供良好的准确性和快速的响应时间。
因此,测量基本功率 - 选择您认为“基本”的任何情况。运行您的测试,并测量“峰值”。减法,完成。是的,这很明显。如果您有一些差异如此之小以至于在噪音中丢失的东西,您可以尝试测量一段时间内的能源使用情况(例如 kWh)。尝试在空闲时测量一个小时与在您的过程完全运行时测量一个小时,然后查看总能量差异。对您要执行的所有类型的测试重复类似的操作。
对于重度 CPU、DDR 和 GPU 用户,您将获得明显的功率差异。您可能会注意到 L1 与 L2 与 DDR 约束算法之间的差异(DDR 使用更多功率),如果您注意 L1/L2 约束算法运行得更快 - 您需要考虑每个“任务”使用的能量不是持续的力量。除了性能受到影响之外,您可能不会注意到硬盘访问(实际上只有一两瓦,并且在 PC 的噪音中丢失)。一个值得记录的额外数据点是,如果您有一个任务每 100 毫秒左右唤醒一次,使用 1% 的 CPU,那么“基本”负载会增加多少。这基本上就是非深度睡眠空闲的样子。(这是一个 hack,100 毫秒是一个猜测)
请注意,如果您的 CPU 启用了频率更改策略,则 1% 可能与其他时间的 1% 不同。
最后一个重要提示:正如您为问题命名的那样,您当然应该测量能量。如果您忘记了它们的相对性能,很容易犯下一个任务与另一个任务的功耗基准测试的错误,并得出一个更昂贵的结论。例如,糟糕的技术记者对硬盘与 SSD 进行基准测试时,总是会发生这种情况。
在具有跨多个轨道的电流监控的嵌入式平台上,我已经完成了每条指令纳焦耳的测量。仍然很难计算线程/进程的能源使用情况,因为许多任务共享大量负载,并且它可以在其时间片之外增加/减少。在 PC 上,我不确定你是否能做到如此精细:)