应用程序能否在很大程度上影响功耗?


16

单个通用应用程序可以做些什么来影响其运行设备的功耗吗?

我不熟悉对单个应用程序进行的优化如何以一般方式影响功耗,有人可以解释一下编写应用程序的不同方法是否会影响所运行设备的功耗?

也就是说,可以以不同的方式编写的功能上完全相同的单一程序是否会在总体上极大地影响设备的功耗,而与不同的无关程序可能如何影响设备的功耗无关。


8
使它更有效地执行。
Christopher Berman

我并不是说您的问题完全是题外话,但我认为书比问答网站上的答案更合适。您应该至少提供一些上下文,例如嵌入式系统,移动开发或完全其他内容。任何答案都应该严重依赖于此。
K.Steff

2
您是否在谈论电池供电的嵌入式系统?通常,最小化功耗的关键是确定系统真正不需要做的事情的时间,并在没有任何实质意义的情况下使系统任何部分处于活动状态的时间最小化去做。在大多数情况下,值得付出多少努力会有一个明确的限制;如果设备在必要的功能上每天使用1mAH,则比每天只浪费1uAH(因为后者仅能节省1%的能量)的复杂程序更喜欢一个简单的例程,每天浪费10uAH。
超级猫

1
我是在一般性的思考中,而不是在特定背景下思考的。这是一个“出于好奇”的问题。但是,例如,在移动设备上有节电的规则吗?或嵌入式系统?还是关于Web应用程序开发?可能会延迟磁盘访问和网络连接或诸如此类的事情。
Juan Manuel

1
我怀疑你错过了重点。如果将应用程序更改为使用无线电的一半,则该应用程序运行时将看到功耗下降。手机上的收音机无法以恒定速率消耗功率。它的功耗直接取决于软件要求执行的操作。
Gort Robot

Answers:


7

功耗问题通常会损害性能,因此需要平衡两者。应用资本会计成本来考虑更高效的硬件,这将成为非常复杂的权衡。(您只需花费100个小时来节省一毫瓦/小时,或者花10美元来获得运行该软件的计算机中更高效的PSU)。从商业角度出发,担心功耗(由软件引起)是在商业上有意义的唯一时间是一个服务器场,该服务器场的大小由Google运行,电池供电的设备以及如果市场营销希望在Tree Hugging Greenie框上打勾。

说“让您的算法更有效率”来琐碎它太复杂了,这只是第一步。性能/功率曲线,尤其是“感知性能” /功率曲线是非线性的。这取决于您是否拥有控制权以及所使用的操作系统的级别。

除此之外,该问题对每种特定情况都有不同的答案。例如,我曾经在一个电池供电的系统上工作(目标是在9V电池上使用18个月),在短时间内以最大时钟速度运行比在睡眠状态下能效更高,而另一个运行类似软件的微型计算机最好在慢速时钟上运转一分钟左右然后睡觉。


这其实是正确的答案,硬件起着更为情感功耗比软件的作用。更高效率的PSU的示例使设备全部使用,并掩盖了单个应用程序的微优化,使其发挥了微不足道的作用。

是的,但是程序不会平均使用设备上的所有硬件。例如,从不使用PC上硬盘驱动器的程序所使用的功率将比不断读取和写入硬盘驱动器的功率少得多。
砸碎了机器人2012年

@StevenBurnap视高清而无关,它总是一直在旋转并拉动果汁。最重要的电源优化总是来自硬件(以及其中的微码)。具有绿色 HD 的相同软件将消耗更少的电量,因此硬件仍然具有更大的不同。

2
那是不对的。在系统上附加一个Kill-a-watt,然后运行两个应用程序,第一个应用程序仅在无限循环中添加数字,另一个运行重复扫描5 GB的文件。您会看到不同。功率消耗在计算机上肯定会有所不同,有时会很大,具体取决于要求执行的操作。
砸了机器人的

这是一个示例,显示了PC的功耗完全基于运行的软件而变化:codinghorror.com/blog/2005/08/…–
Gort the Robot

2

您可以做的最好的事情就是优化算法和应用程序的业务逻辑。

您还可以采用特定的编译过程,许多编码人员只是在编译阶段就忽略了内联函数和优化,大多数情况下,这在性能以及因此在功耗优化方面给您带来很小的优势。


这是正确的答案。优化是唯一的方法。
superM 2012年

1
正确的答案如何?系统中的功耗比CPU还要多。
詹姆斯

1
@James您的软件仅使用CPU?没有其他的?
user827992 '07年

3
@ user827992:不,这就是重点。诸如收音机(GSM / 3G / Wifi)和屏幕之类的设备比CPU消耗更多的电能。优化算法对您无济于事。我要说的是,在功耗非常重要的系统中,优化代码是过早的优化。
詹姆斯

1
@ user827992:是的,但是与其他电池消耗来源相比,这些节省很少。您可以根据需要将其优化为-OInfinity,但是例如,如果您的代码在您已死的某个地方轮询某些标志,则可以。
詹姆斯

2

正确的答案是....

"We should forget about small efficiencies, 
say about 97% of the time: premature 
optimization is the root of all evil"
Donald Knuth

专注于为您的客户提供价值。创建干净,易于理解和易于维护的解决方案。

然后,如果您需要更多的“功能”,则可以配置应用程序。通过配置文件,您将查明瓶颈,这些瓶颈在更改时将提供最大的好处并提高“效率”。


4
我会说这不能解决问题,因为您是在说“功耗不是您的问题;专注于为客户创造价值”。这听起来很像一些管理的口头禅。OP可能有充分的理由要求降低功耗。
K.Steff

好吧,我误解了“功耗”。我仍然认为他应该设置功耗级别,达到该级别时,应该通过分析系统中消耗过多功率的部分来执行优化。这可以通过一系列压力测试来执行。
Michal Franc

1

虽然就CPU而言确实没什么可做的,但设备的许多功能通常在使用时会消耗功率。在PC上,几乎没有人在乎,但可以肯定的是,磁盘读取(假设使用非SSD驱动器)会导致硬盘旋转并移动磁头,这会消耗一些电能。在PC上,这是微不足道的,但是在移动设备上,这可能是一个非常现实的问题。

在电话上,最明显的例子就是通信。发送无线信号会消耗能量。在连接到500 WATT电源的PC上,这无关紧要。在电话上却不是。与不使用任何网络的应用程序相比,持续轮询服务器上的大量数据的应用程序将使用更多的电源。

这是一个非常现实的问题,只是谷歌为“ Android应用耗尽了我的电池”。 是许多页面,告诉开发人员如何最大程度地降低功耗。

通常,您要针对总体性能(即,尽可能多地使用CPU)以及网络使用进行优化。用尽可能少的消息进行尽可能少的通信。

正如其他人所说,这是完成大部分代码之后,发现问题并分析功耗的任务。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.