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

时间:2010-05-25 15:13:25

标签: c optimization arm

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

9 个答案:

答案 0 :(得分:6)

来自ARM技术参考站点:

  

ARM11 MPCore的功能   处理器,提高能源   效率包括:

     
      
  • 准确的分支和子程序返回预测,减少数量   不正确的指令获取和   解码操作
  •   
  • 使用物理寻址的缓存,这减少了缓存的数量   冲洗和补充,节省能源   系统
  •   
  • MicroTLB的使用减少了翻译和消耗的功率   保护查找每个周期
  •   
  • 缓存使用顺序访问信息来减少数量   访问标签RAM和   不需要的数据RAM。
  •   
     

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:5)

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

答案 3 :(得分:3)

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

答案 4 :(得分:3)

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

尽管你需要从较低功率系统开始,但所有这一切都很重要,因为上述情况可能并不明显。例如,不要使用英特尔的任何东西。

答案 5 :(得分:1)

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

这就是像CPUIdle这样的程序减少功耗/热量的方法。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

将IO保持在最低限度。

答案 8 :(得分:0)

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