编写“权力”高效代码

时间:2010-10-05 18:48:06

标签: mobile computer-science

  

可能重复:
  Power Efficient Software Coding

Adob​​e在谷歌I / O上宣布,它的下一版本的Flash 10.1对功耗较高的设备更有效。

这让我想到:你如何编写使用更少功率的代码?关于这个主题是否有任何有用的资源?

我的猜测是它是:

的组合
  • 降低应用程序的复杂性
  • 编写快速执行的高效代码(大概是因为处理时间=耗电量)

4 个答案:

答案 0 :(得分:2)

看起来好像这可能是针对嵌入式设备的,我敢说,节省电量的最佳方法是不打开,并尽量减少设备的使用时间。这意味着只有在需要完成工作时才让处理器进入睡眠状态并唤醒。我能想到的最好的方法就是让应用程序完全由中断驱动。

答案 1 :(得分:2)

实际上有一种更大的方法可以降低未被触及的功耗。

我们拿一台电脑将所有功能分成两个基本组。那些用硬件实现的和用软件实现的那些。

如果某个功能是在硬件中实现的(也就是说,有一个电路可以将输入放在一组导线上,而输出输出另一组导线)则功耗等于所消耗的功率。门的总数。时钟滴答一次(耗尽一点电量),总线变热输出(耗电少量)。

如果某个功能是用软件实现的(即没有用于实现该功能的单个电路),那么它需要使用多个电路,多个时钟周期以及经常大量的存​​储器调用。请记住,SRAM(用于处理器寄存器)由D触发器组成,只要它们在使用中,它们就会不断耗电。

作为一个简单的例子,我们来看看H.264编码器。 H.264是QuickTime视频使用的视频编码。它也用于MPEG视频,许多AVI,并由Skype使用。因为有人常常坐下来找到一种方法来制作一个硬件芯片,你可以在一端为编码文件提供信息,红色,绿色和蓝色视频通道就会出现在另一端。

在此芯片存在之前(以及Flash 10.1之前),您必须使用软件对其进行解码。解码它涉及许多正弦和余弦。正弦和余弦是超越函数(也就是说 - 在没有无限级数的情况下,没有办法在四个基本的数学运算中写出它们)。这意味着你可以做到最好的运行循环32-64次逐渐更准确,循环的每次迭代添加,乘法和除法。循环的每次迭代也会将值移入和移出寄存器(您可以回忆起使用功率)。

Flash用于通过在软件中对其进行数学解码来解码视频。现在它只是说“将视频传递给H.264芯片”。当然它还必须检查该芯片的存在并使用软件(如果它不存在)。这意味着Flash整体上现在更大了。但是任何一个带有H.264芯片的系统(如HTC手机),它现在使用的功率更低。

对以下内容应用相同的逻辑:

  • 乘法(在软件中多次添加)
  • 模数(软件中的无限系列)
  • 比较(减去并检查软件中的否定)
  • 绘图(软件中的正弦/余弦/肮脏。容易传递给显卡)

答案 2 :(得分:1)

除了凯文的建议,我认为最小化互联网通信会有所帮助。这将包括批量获取数据,因此可以花更多的时间睡着。

答案 3 :(得分:1)

另请注意,访问驱动器和wifi等设备会增加功耗。尽量减少对此类设备的访问。