如何在ARM平台上开发低功耗的软件系统
,我们在某个点上正在损失回报。这种情况下,S PM超过1k时,性能提升幅度变缓,系统总能耗也会稍微升高。在这里,我们实际上在承担这种特定应用无法使用的S P M能耗,因为这种应用程序本身并不够大。
您还可以注意到,在结合了所使用的分配算法时,这种特定的应用无法使用小于64字节的S P M区域,因为没有足够小的可用片段与之相配。本次研究中还展示了一个更加成熟的算法,可以在最佳状况下节省能耗可以超过80%。
永远做缓存友好的事
分析缓存优点有时可能比分析S PM优点更加复杂。一方面,缓存基本上是自我管理的。另一方面,缓存不是对单个存储位置进行操作,而是对固定大小的“线路”进行操作。因此,访问单个可缓存的存储位置可能加载整条线路,从而造成突发的内存存取。如果该附加的数据从未被访问过,则所消耗的能量就浪费了。
另一个不利之处是缓存所需的其他逻辑成本(就硅片面积和功耗而言)。
图4:缓存的能量优势
图4摘自普林斯顿(Brooks,2000)一份论文,显示了针对某简单应用基准的三套数据。针对不同的缓存大小,这些条块分别代表性能IP C(单位周期指令数)、功耗和功耗时间积(ED P)。总的来说,性能会随着缓存大小的增加而提升。但是,系统的功耗也会增加,因为增大缓存单元会相应增加功耗。功耗时间积允许我们在性能和缓存大小之间取得平衡。在这个例子里,存在一个最佳点,即缓存大小为64k时,此时的功耗时间积最小。
最大限度减少数据内存存取
A RM架构的一个特性是其常量是不确定的,特别是,不可能用单条指令把一个任意32位常量放到一个寄存器中。实际上,所有内存存取必须按寄存器中的地址操作,这就意味着程序需要把这些地址和其他常量频繁地放到寄存器中,而这一点很难做到。解决此问题的标准方法是把常量作为文字数据嵌入到代码段中,在运行时使用PC相关的加载进行加载。
因此,这种最大限度减少常量影响的方法很实用。确保在编译时这些常量是已知的,如果可能,最好能把这些常量嵌入到单条ARM指令中。为了存取全局变量,尽可能减少加载基址指针的需求。这就需要确保全局变量在运行时都在内存中,这样才能使用单个指针存取多个变量。实现这个目标最简单的方式是将全局变量放到一个结构中。
尽管A R M的堆栈访问相对高效(堆栈访问可较好地加载和存储多条指令),但是程序员还可以通过很多方式来减少堆栈访问:减少活动变量、避免占用本地变量地址、可能时充分利用尾部调用优化、将传递到函数的参数数量减少到四个以下、允许编译器主动内联函数等。
递归情形和避免递归情形的做法更加复杂。通常编译器可以对归函数很好地进行尾部优化。实际上将所有数据存储到堆栈中可以比其他做法获得更好的局部性。或许建议可能最好表达为“除非其他做法让数据局部性更糟或您确信编译器可以对递归调用进行尾部优化,否则不要使用递归算法”。应编写异常处理程序,增加尾部连锁的机会,进而避免堆栈环境内不必要的保存和恢复。
现在我们把注意力转到这个问题的第二头大象,即指令执行。
最大限度减少指令数目
事实上,减少指令执行次数本质上与性能优化是相同的,执行的指令数越少,能耗就越低。另外,还要增加一些明显的指针。
首先,正确地配置工具。在编译器和链接器完全了解目标平台,甚至无法实施一些基本的优化。
编写代码时要保持敏锐,才能避免不必要的操作。对于A R M架构,32位数据类型是高效的:一般8位和16位数据类型,尽管占用的存储空间较少,但是处理效率也较低。在v6和v7架构中,打包和接包指令以及S IM D操作一定程序上对此有些帮助,但是要注意,在主程序中无法从C访问这些指令。
编写循环时要当心
可以按照以下一些简单的规则来编写循环:使用无符号的整数计数器,向下倒数,并把是否等于零作为终止条件。这可以让循环更短,速度更快,使用的寄存器更少。还要记住,要采用矢量化来编写循环。即使在尝试展开和矢量化最简单的循环时,有关控制结构和数据声明的一些简单规则都可以让编译器的作业变得更简单。
图5:循环展开
图5显示了与一个特定循环优化有关的一些数据,这个循环优化就是循环展开(Brooks,2000)。按照预期,随着展开因子的增加,执行时间和指令数目会减少。我们看到了减少循环开销和减少地址计算的效果。功率结果更加有趣,但不太明显。因为预测器可用来训练其行为的分支更少且针对循环结束失败的最终错误预测比例大增,所以随着循环进一步展开,分支预测器的准确性出现下降。但是,因为顺序取指的连续数据流不经常被中断,所以取指阶段
- 基于μC/OS-II嵌入式系统的低功耗开发(07-08)
- 数字信号处理(DSP)应用系统中的低功耗设计(05-02)
- 量身订制的DSP元件设计策略 (04-12)
- AVR单片机介绍(07-09)
- 基于WinCE5.0的嵌入式设备休眠唤醒技术研究(09-27)
- DSP电源系统的低功耗设计(11-13)