【问题标题】:Source code power profiling源代码功率分析
【发布时间】:2013-01-23 16:39:03
【问题描述】:

我想知道是否存在用于在源代码级别报告结果的程序的电源分析工具。例如,报告特定源代码行、函数、模块等处的功耗的分析结果。

对我来说语言和平台并不重要。就是想知道有没有这种动物。

【问题讨论】:

    标签: profiling power-management


    【解决方案1】:

    目前大学正在进行这方面的研究,但仍处于试验阶段,我还不知道有商业工具。

    我母校的一位教授正在研究这个,他称之为Green Mining: The Effect of Software Change on Power Consumption。现在它涉及将带有 USB 的Kill-a-Watt 连接到另一台计算机,并在软件上运行受控测试时记录大量数据。对于移动设备,它变得更加复杂,因为您必须连接电路板才能实时测量电池的耗电量:

    最终会有统计模型,基于通过对各种其他代码运行功率测试收集的数据,将能够在没有所有这些硬件的情况下为您提供源代码的功率概况。您的 IDE 会警告您:“您确定要这样做吗?与其他方式相比,这将使笔记本电脑的平均电池寿命减少 3 分钟。”不过,这还有很长的路要走。

    我依稀记得听说过最初的结果之一是类继承层次结构的深度与功耗呈正相关……如果您有兴趣,请浏览these papers

    【讨论】:

    • +“类继承的深度......与权力相关”。这当然是我的经验。软件性能。模式是数据结构类被过度设计并且充满了news 和事件处理,因此它们比真正需要的要慢几个数量级。 1 example here. 如果计算需要电力,那会很耗电。
    • @andrew 感谢您提供的信息。我偶然发现了不同的正在进行的研究。此外,我快速浏览了 GreenMining,但实际上并不是我要问的。 GreenMining 在显示两个程序版本之间的功耗差异之后更是如此——这仍然是非常强大的解决方案。在研究领域有EProf,这似乎是我最感兴趣的。
    • @Mike Dunlavey 我浏览了您所做的一系列优化。我发现结果显着。当然,任何级别的间接都会增加运行时间的成本,并且运行时间与功耗直接相关——程序运行的时间越长,它消耗的功率就越多。然而,所有这些间接性都为我们带来了好处,而运行时间/功率是我们为它们付出的代价。每个人都必须很好地理解这种权衡。找出独特的功率优化策略会很有趣。
    • @feradz:这些优化都没有放弃功能。这才是重点。除了最简单的程序外,所有程序都倾向于在不损失功能的情况下获得巨大的加速机会。它们不经常被发现的原因是大多数程序员不知道如何寻找它们,而且根本不怀疑它们在那里。 This link 展示了统计数据如何在不放弃任何东西的情况下实现大幅加速。这看起来很神奇,但许多程序员对此非常熟练。