我们可以优化代码以降低功耗吗?

是否有任何优化代码的技术,以确保较低的功耗。架构是ARM.language是C.

来自ARM技术参考站点:

ARM11 MPCore处理器的function可提高能效,包括:

  • 精确的分支和子程序返回预测,减少了错误的指令获取和解码操作的次数
  • 使用物理上寻址的缓存,可减少缓存刷新和重新填充的次数,从而节省系统中的能量
  • MicroTLB的使用减少了每个周期的转换和保护查找所消耗的功率
  • 高速缓存使用顺序访问信息来减少对标记RAM和不需要的数据RAM的访问次数。

在ARM11 MPCore处理器中,还广泛使用门控时钟和门来禁用未使用function块的输入。 只有主动使用的逻辑才能执行计算会消耗任何动态功率。

根据这些信息,我会说处理器为您节省电力做了很多工作。 任何功率损耗都来自编写得不好的代码,这些代码执行的处理超出了必要的处理,无论如何你都不会想要。 如果您希望节省电力,应用程序的整体设计将产生更大的效果。 网络访问,屏幕渲染和其他耗电操作将更加关注功耗。

优化代码以降低功耗实际上只是优化代码。 无论您的动机是货币,社交还是政治等,CPU周期越少=使用的能源越少。 我想说的是,我认为你可以用“执行时间”取代“耗电量”,因为它们基本上会成正比例 – 因此,当你没有“吓跑”人们时,你可能会取得更大的成功。与权力有关的问题。 但是,我可能会纠正:)

是。 使用分析器 ,查看哪些例程正在使用大部分CPU。 在ARM上,您可以使用一些JTAG连接器(如果可用的话)(我使用Lauterbach进行调试和分析)。 主要问题通常是让您的处理器在空闲时处于低功耗状态(深度睡眠)。 如果你不能减少使用的CPU百分比(例如从80%到50%),它将不会产生很大的不同。 根据您运行的操作系统,选项可能会有所不同。

2010年7月版的ACM通讯有一篇关于节能算法的文章,您可能会对此感兴趣。 我还没看过,所以不能传授它的任何智慧。

尽量留在片上存储器(缓存)中进行空闲循环,将I / O保持在最低限度,使总线上的位翻转保持最小。 像prom和闪存这样的NV存储器消耗更多的功率来存储零而不是(这就是为什么它们擦除为1,它实际上是零,但是转换器在你看到它之前反转了这个位,零存储为1,存储为1零,这也是为什么它们在失败时会降级的原因),我不知道易失性存储器,dram使用的晶体管数量是sram的一半,但必须刷新。

尽管你需要从低功率系统开始,因为上述情况可能并不明显。 例如,不要使用英特尔的任何东西。

如果您没有运行Windows XP +或更新版本的Linux,则可以运行后台线程,它只执行HLT。

这就是像CPUIdle这样的程序如何降低功耗/散热。

如果处理器在需要较少的周期时被调整为使用较少的功率,那么简单地使代码运行更有效是解决方案。 否则,除非操作系统暴露某种电源管理function,否则你无能为力。

将IO保持在最低限度。

在某些ARM处理器上,可以通过将稳压器置于待机模式来降低功耗。