单个通用应用程序可以做些什么来影响其运行设备的功耗吗?
我不熟悉对单个应用程序进行的优化如何以一般方式影响功耗,有人可以解释一下编写应用程序的不同方法是否会影响所运行设备的功耗?
也就是说,可以以不同的方式编写的功能上完全相同的单一程序是否会在总体上极大地影响设备的功耗,而与不同的无关程序可能如何影响设备的功耗无关。
单个通用应用程序可以做些什么来影响其运行设备的功耗吗?
我不熟悉对单个应用程序进行的优化如何以一般方式影响功耗,有人可以解释一下编写应用程序的不同方法是否会影响所运行设备的功耗?
也就是说,可以以不同的方式编写的功能上完全相同的单一程序是否会在总体上极大地影响设备的功耗,而与不同的无关程序可能如何影响设备的功耗无关。
Answers:
功耗问题通常会损害性能,因此需要平衡两者。应用资本会计成本来考虑更高效的硬件,这将成为非常复杂的权衡。(您只需花费100个小时来节省一毫瓦/小时,或者花10美元来获得运行该软件的计算机中更高效的PSU)。从商业角度出发,担心功耗(由软件引起)是在商业上有意义的唯一时间是一个服务器场,该服务器场的大小由Google运行,电池供电的设备以及如果市场营销希望在Tree Hugging Greenie框上打勾。
说“让您的算法更有效率”来琐碎它太复杂了,这只是第一步。性能/功率曲线,尤其是“感知性能” /功率曲线是非线性的。这取决于您是否拥有控制权以及所使用的操作系统的级别。
除此之外,该问题对每种特定情况都有不同的答案。例如,我曾经在一个电池供电的系统上工作(目标是在9V电池上使用18个月),在短时间内以最大时钟速度运行比在睡眠状态下能效更高,而另一个运行类似软件的微型计算机最好在慢速时钟上运转一分钟左右然后睡觉。
您可以做的最好的事情就是优化算法和应用程序的业务逻辑。
您还可以采用特定的编译过程,许多编码人员只是在编译阶段就忽略了内联函数和优化,大多数情况下,这在性能以及因此在功耗优化方面给您带来很小的优势。
正确的答案是....
"We should forget about small efficiencies,
say about 97% of the time: premature
optimization is the root of all evil"
Donald Knuth
专注于为您的客户提供价值。创建干净,易于理解和易于维护的解决方案。
然后,如果您需要更多的“功能”,则可以配置应用程序。通过配置文件,您将查明瓶颈,这些瓶颈在更改时将提供最大的好处并提高“效率”。
虽然就CPU而言确实没什么可做的,但设备的许多功能通常在使用时会消耗功率。在PC上,几乎没有人在乎,但可以肯定的是,磁盘读取(假设使用非SSD驱动器)会导致硬盘旋转并移动磁头,这会消耗一些电能。在PC上,这是微不足道的,但是在移动设备上,这可能是一个非常现实的问题。
在电话上,最明显的例子就是通信。发送无线信号会消耗能量。在连接到500 WATT电源的PC上,这无关紧要。在电话上却不是。与不使用任何网络的应用程序相比,持续轮询服务器上的大量数据的应用程序将使用更多的电源。
这是一个非常现实的问题,只是谷歌为“ Android应用耗尽了我的电池”。 这是许多页面,告诉开发人员如何最大程度地降低功耗。
通常,您要针对总体性能(即,尽可能多地使用CPU)以及网络使用进行优化。用尽可能少的消息进行尽可能少的通信。
正如其他人所说,这是完成大部分代码之后,发现问题并分析功耗后的任务。