- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
通过软件优化降低设备功耗的方法
通过优化软件可以有效地降低嵌入式设备的功耗。在一个程序中,每一条指令都将激活微处理器中的某些硬件部件,因此,正确选择指令可降低处理器的功耗。通过建立特定处理器架构下指令集的功耗信息,利用“减少跳转的指令重排序”等方法可以进行有效软件的低功率优化。
低功耗是便携式电子设备必须具备的一个关键特性。过去几年的研究主要针对硬件部分,而现在人们则更注重通过优化软件部分来降低系统功耗。要想对软件进行优化,必须了解每条指令所产生的功耗,并选择正确的编译方法,以降低程序执行的功耗。由于各个微处理器架构不相同,指令集和功耗也不一样。因此,适用于某一处理器的优化方式并不一定适用于其它处理器。这样,选择与可降低功耗的软件相匹配的微处理器便十分重要。
本文是一个与此相关的技术调查。下面第一部分列举了测定微处理器指令集功耗的一些方法;第二部分是在程序执行时可降低功耗的编译器方法,目前该方法已广泛使用;第三、四部分分别是对软件优化工具的要求以及Power PC 603E微处理器今后应采取的措施。
建立指令功耗信息
为了获得可测量给定程序功耗的工具,必须首先要建立每条指令所相关的功耗信息。因此,我们需要一个系统,它可测量微处理器每条指令的功耗,以及程序执行时可能出现的特殊情况的功耗。
目前主要有两种方法可实现这一目的。由Tiwari等人提出的一种方法是反复地执行某一指令,并测量此时处理器消耗的电流,从而得到一些相关信息,并以此评估用于该处理器的某一程序的功耗。总的功率还包括一些其它因素产生的功耗,根据测量结果可以估计出程序功耗。
将一个分流电阻与微处理器的电源脚串联,便可用示波器测出处理器所消耗的电流。另一种方法则是采用安培表直接测量,安培表必须能测量高频信号,这样才能在测量微处理器消耗电流时保持稳定,这点十分重要。
在实验中,采用两个微处理器来测量其耗用的电流,试验结果证明了Tiwari等人提出的方法的正确性。平均功耗通过P=I×V cc来计算,其中V cc是电源电压,I是微处理器的耗电流。这一功耗还可通过E = P× N×T来计算,N是程序执行所用的时钟周期数,T是时钟周期时间。这一方法适用于管线结构处理器,不过在这一计算方式中忽略了其它因素所产生的功耗。例如,如果微处理器的上一个状态不同,实际指令的功耗与计算结果也并不一定相同。我们可通过计算两条指令的功耗来解决这一问题,这样能更为准确地估计给定程序的功耗。另外一个影响是缓存丢失率(cache miss ratio),它需要额外的执行时间或执行周期,从而使功耗增加。
第二种方法是通过对微处理器以及微处理器中指令集的仿真而进行测量。Mehta等人指出,通过较为底层的仿真可得到耗电流的估计值,从而计算每条指令的功耗。Chakrabarti等人针对HC11处理器的每个基础模块采用硬件描述语言(HDL)构建了一个模型,不过,我们也可以采用黑箱模型或其它可进行电流和功耗测量的模型。在确定了每条指令所对应的激活处理模块后,通过累加某一给定指令中所有被激活模块的功耗便可计算出相应的指令功耗。
这种方法的缺点是必须知道CPU的详细情况。通过这种方法估计出的功耗与实际值的误差为1%-10%。
编译方法
下面介绍几种降低程序的运行功耗的方法。但是,由于并非每种方法都可用于所有的处理器,因此必须对系统架构有一定的了解。此外,通过我们所研究的技术以及待测的微处理器的特殊性能,还可引申出一些新的方法。
第一种方法是基于“减少跳转的指令重排序”。指令执行时的功耗与其前一条指令有关,因此,对程序中的指令进行适当的重新排序可降低功耗。但在英特尔486处理器中应用该方法的结果却表明,尽管它可降低指令跳转时的功耗,但整体功耗却没有明显下降,降幅仅为2%。不过,在某些DSP处理器中,该方法却可将整体功耗降低30%-65%。
Tiwari等人提出了另一种方法,即通过模式匹配(pattern matching)产生编码。该方法修改了编译器的功耗计算函数(通常是执行周期数),由此得到一个以降低功耗为目标的代码生成器。结果表明,这样产生的代码与以减少时钟周期为目标所产生的代码类似,这是因为一种指令模式所产生的功耗实际上就是平均功耗与时钟周期数的乘积。
Vishal等人成功地在DSP处理器中采用了一种循环展开(loop unrolling)方法,该方法中的主要功耗产生在算术/逻辑电路和存储电路中,目的则是为了降低一个给定程序中总的比较次数。采用这种方法的结果是,ALU的使用量下降20%,而代码量却增多了>10%。
Tiwari等人提出了一种减少存储器操作数的方法。这种方法基于一种假设,即带存储器操作数的指令比带寄存器操作数的指令所产生的功耗要高很多。因此,减少存储器操作数可大幅降低功耗,而有效的寄存器管理可最大限度地降低功耗。这就必须优化对临时变量的寄存器分配,将全局寄存器分配给最常用的变量。
对于这些技术,目前已经有一些程序可以证实其降低功耗的有效性。通过对代码进行人工调整来缩短运行时间,可降低13.5%的功耗。此时仅将临时变量分配给寄存器,并用寄存器操作数取代了部分存储器操作数,这样可减小5%的电流以及7%的运行时间,不过仍然存在一些冗余指令。最后将更多的变量分配给寄存器并去除所有的冗余指令,与原来的程序相比,此时的功耗降低了40.6%。
软件优化工具
在实现了上一步后,需要创建一个工具以实现在实际程序中直接运用上面的编译方法。这一步的难点在于开发一种独特的软件工具来实现对所有程序和微处理器的优化。但是这并不能产生出适用于所有微处理器的通用规则,不过现有的研究成果为最终达到这一目标已迈出了第一步。使用软件优化工具时,要对得到的结果不断地进行信息反馈,以检测功耗计算以及编译方法中所有可能出现的错误。
本文小结:
在当今的系统中,低功耗特点十分重要。因此,我们应研究、评估每一种可能实现这一目标的方法,并将之运用在目前开发的设备上。本文所提供的信息仅是一个开始,今后还将开发出可用于实际系统中的最终产品。下一步则要选择和研究某种特定的微处理器,然后要创建工具,产生这种微处理器的指令集功耗信息。本文描述的这些方法将作为一种选择,不过在深入研究了处理器的架构后,也许还会发现其它的方法。
未来再下一步则是编译方法的应用。同样的,前面所谈到的方法可作为选择,但具体用哪种方法则有赖于对处理器架构以及它可能嵌入编译器架构的研究。通过这一步,我们就可得到软件优化工具。
参考文献:
[Mehta97] Mehta, R.; Owens, R.M.; Irwin, M.J.; Chen, R.; Ghosh, D. "Techniques for low energy software". Low Power Electronics and Design, 1997. Proceedings., 1997 International Symposium on , 1997 Page(s): 72 -75
[Tiwari95] Tiwari, V.; Tien-Chien Lee, M. "Power analysis of a 32-bit embedded
microcontroller". Design Automation Conference, 1995. Proceedings of the ASPDAC '95/CHDL '95/VLSI'95., IFIP. IFP International Conference on Very Large Scale Integration., Asian and South Pacific ,1995 Page(s): 141 -148
作者:Manuel Jimenez
博士
波多黎各大学电子及计算机工程系
Email: oscara@ece.uprm.edu
射频工程师养成培训教程套装,助您快速成为一名优秀射频工程师...