2010-05-25 87 views
13

是否有任何技术来优化代码以确保较低的功耗。体系结构是ARM.language是C我们可以优化代码以降低功耗吗?

+21

使用'//'优化运算符。 :) – SLaks 2010-05-25 15:15:54

+0

程序未使用的周期仍将用作空闲进程。我想如果你的CPU被调整为在需要更少的周期时降低功耗,那么你只需要让你的代码更快。否则,你唯一的选择是'#include“gogreen.h”'。 – corsiKa 2010-05-25 15:18:23

+4

@Slaks优化只适用于C++(并且比ANSI C变体更新),因此最好使用/ **/operator :- – fortran 2010-05-25 15:22:56

回答

6

从臂技术参考站点:

改善能量 效率的ARM11 MPCore的 处理器的功能包括:

  • 准确分支和子例程返回预测,减少了数 不正确的取指令和 解码操作
  • 使用物理地址缓存,这减少了缓存 冲洗和笔芯的数量,在 节能系统
  • 使用MicroTLBs的降低了翻译和 保护查找每个周期所消耗的功率
  • 缓存使用顺序访问信息的人数减少的 访问标签RAM和不需要的数据RAM。

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

基于这些信息,我想说处理器为您节省了大量功耗。任何能量浪费都会来自编写得不好的代码,它会执行比必要的更多的处理,而这是您不想要的。如果您想节省电力,应用程序的整体设计将会产生更多效果。网络访问,屏幕渲染和其他耗电量较高的操作将更加关注功耗。

5

优化代码以使用更少的功耗实际上只是优化代码。无论您的动机是金钱,社交,政治或其他类似的东西,CPU周期越少=使用的能源越少。我想说的是,我认为你可以用“执行时间”代替“耗电量”,因为它们本质上会直接成正比 - 因此,如果不用“吓跑”与电力有关的问题。但是,我可能会纠正:)

+0

小心证明-1? – Jeriko 2010-05-25 15:33:21

+0

我没有-1你,但是如果CPU运行速度较慢,我的笔记本电脑使用更少的电量,所以执行时间与功耗成反比。 – 2010-05-25 15:42:44

+0

您不能声称执行时间与功耗成反比。这意味着我可以写一个长达10年的文字,并期望它消耗一个焦耳的能量。 我会承认以前的含糊不清 - “如何使用功耗与CPU操作数量成正比,请记住,每次操作所需的功率与所执行操作的连续速度相反(还有百万其他因素仍未提及,因为我试图写出一般的经验法则而不是在法庭上站立起来的同义反复论)“? :P – Jeriko 2010-05-25 17:01:04

0

如果处理器调整为在需要更少的周期时使用更少的功耗,那么简单地让代码更有效地运行就是解决方案。否则,除非操作系统公开某种电源管理功能,否则没有多少可做的事情。

0

将IO保持在最小值。

0

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

5

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

+0

,我可能会补充:除非您真的使用它们,否则不要将外围设备保持在“打开”状态(例如,保持蓝牙/ Wi-Fi打开可减少移动设备的电池寿命* – INS 2010-05-25 15:38:25

1

如果你没有运行Windows XP +或更新版本的Linux,你可以运行一个后台线程,它除了HLT之外什么也不做。

这就是像CPUIdle这样的程序如何减少功耗/发热。

+0

This shouldn对于较新的操作系统来说,这是不必要的。 – 2010-05-25 15:31:35

+2

@Axel:是的,我提到过...... – 2010-05-25 15:53:14

3

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

+0

总的来说,我对这篇文章感到非常失望,不幸的是, – 2010-05-27 17:08:41

+0

现在我可能永远不会读它。 – 2010-05-27 18:06:32

3

尝试留在芯片内存(缓存)空闲循环,保持I/O到最低限度,在总线上保持位翻转到最小。像proms和flash这样的NV存储器消耗更多的能量来存储0比存储零(这就是为什么它们被擦除的原因,它实际上是零,但是转换器在你看到它之前将该位反转,将零存储为1,将零存储为零,这也是为什么当它们失败时它们会降级),我不知道易失性存储器,德拉姆使用的晶体管数量是sram的一半,但必须刷新。

尽管您需要从较低功率的系统开始,但以上所述可能并不明显,所有这些都很重要。例如,不要使用任何来自intel的东西。