是否有可能/容易确定程序正在使用多少功率?

Posted

技术标签:

【中文标题】是否有可能/容易确定程序正在使用多少功率?【英文标题】:Is it possible/easy to determine how much power a program is using? 【发布时间】:2014-01-03 15:51:10 【问题描述】:

是否有可能确定甚至合理地估计一个程序正在使用多少功率?这个想法是根据功耗而不是典型性能来分析我的代码。

测量 CPU 使用、GPU 使用和内存访问是否足够?

【问题讨论】:

独立运行程序并使用活动监视器(mac)或任务管理器/进程(windows) 您还需要考虑程序在显示器使用中的份额、声音输出、网络(WiFi 和有线)、机器所在房间的交流电和照明使用增加,等等如果程序没有运行,计算机会睡着还是关闭,即计算机是仅仅为了运行程序而开启还是你在处理多任务?如果是多任务处理,在进程之间切换会损失多少效率? 这是一个非常有趣的问题,需要考虑很多。几年前我读过一份报告,试图计算一次谷歌搜索使用了多少能量。当然,我没有参考资料,也不记得结果是什么,但一键点击的结果却出奇的高。 @SamD,据我所知,活动监视器没有“电源”列。有没有其他方法可以使用活动监视器找到这个? @iamnotmaynard,很高兴知道这些不同的贡献者中的哪一个是给定程序的“电源瓶颈”。有没有办法确定呢? 【参考方案1】:

有很多方面会影响应用程序的功耗,并且这些方面会因使用的硬件而有很大差异。

获得想法的最简单方法是measure it。如果您的程序正在进行大量计算,则测量差异非常简单。只需在应用运行时读出使用量,并在不运行时减去使用量。

如果您的应用不是计算量大的应用程序,那么挑战会更大,因为简单的 1 点时间比较无法解决问题。您可以获得一个可以记录一段时间内使用情况的测量设备,您需要将该日志与您的机器记录的进程活动进行比较,并尝试过滤掉所有其他计划任务(检查更新等)。

如果您想这样做,请提示,APC 的 UPS 内置了此功能,PowerChute 软件将功耗日志存储在 Access 数据库 (C:\Program Files\APC\PowerChute Personal版\EnergyLog.mdb)。我不确定这是否适用于所有型号,但这是我 (Pro 550) 附带的一个不错的额外功能。我会将数据放在Xperf trace(Windows 中的免费内置分析器,look here for an overview)旁边,以便将功率变化与您的应用程序活动相关联,并过滤掉预定的作业等...

也就是说,请记住,您会在不同的硬件上得到不同的结果。 ssd 与传统硬盘不同,使用的 grafix 适配器也会有所不同,因此您只能通过在“典型”系统上进行测量来获得总体粗略估计。桌面系统将比笔记本电脑等消耗更多的资源...(另请参阅this blogpost)。

功耗分析工具在移动设备上更为常见。我不是该领域的专家,但我知道那里有很多 tools。

【讨论】:

【参考方案2】:

有一个项目可以让你在Linux上获取给定PID程序的功耗,不需要硬件:scaphandre

使用它,您可以创建 grafana 仪表板来跟踪给定项目从一个版本到另一个版本的功耗。例子可以看here。

【讨论】:

以上是关于是否有可能/容易确定程序正在使用多少功率?的主要内容,如果未能解决你的问题,请参考以下文章

有多少用户(最大限制)可以在Heroku中访问我的应用程序

如何在 c / c++ 程序中检测可能/潜在的堆栈溢出问题?

确定 QProcess 是不是正在等待用户输入

如何确定移动应用程序中可以合理呈现多少列? (屏幕尺寸/分辨率/方向)

确定是不是正在使用 GAC 和 NGen 的程序集

从正在运行的 node.js 应用程序确定项目根目录