袁太生
(太原大学 计算机工程系,山西 太原 030009)
软件功耗与软件优化技术
袁太生
(太原大学 计算机工程系,山西 太原 030009)
无论设计制造还是使用计算机,功耗问题一直倍受关注。随着嵌入式系统的深入研究和广泛应用,计算机系统的功耗问题越来越突出。过去我们对降低计算机硬件功耗给予较多的关注,现在我们必须对降低由软件引起的功率损耗给予足够的重视。特别是当计算机芯片技术发展至几纳米级的时候,研究降低软件功耗的途径和方法尤为重要。对于软件质量的评价,也应将软件功耗作为综合评价软件代码优化性能的一个指标。
计算机软件;功率损耗;软件评价;软件功耗;优化技术
在研究计算机的性能和应用方面,计算机功耗一直是人们十分关心的问题。特别是近二十年来,嵌入式系统的应用研究使计算机的应用面迅速膨胀,而最近几年中十分时尚的移动通讯、移动计算、移动视屏、移动网络等一系列移动系统则使计算机的普及达到新的高潮。不久的未来,电话演变的像耳饰,电脑控制的手术刀在人体的血管内游来移去,类似的令人兴奋的嵌入式设备会举不胜举,它们所需的动力往往由体积和能量非常有限的电池来供给,在这种情况下,降低设备的功耗不仅意味着产品质量的提高,更重要的是它将促使计算机系统向更高、更广、更新的领域迈进。所以如何降低计算机系统的功耗成为目前高品质嵌入式系统研发中越来越重要的问题。在这个问题上,人们普遍对硬件比较关注,应用各种技术想方设法改进硬件的功耗,比如在芯片制造工艺上采用更精细的纳米技术,不断降低芯片驱动电压,不断改变片内系统结构等等。而对软件功耗问题的研究一直是断断续续,直到最近,芯片制造技术明显改善了系统功耗时,软件功耗的问题才再次受到重视。事实上,整个系统的运行管理是由软件体现的,在硬件基础一定的情况下,只有将软件系统对能量的损耗降低至最小,才能使全系统工作在最佳状态。那么软件系统对能量的损耗有何影响?源自何处?如何设计软件系统以使全系统工作在最佳状态?本文通过对机器指令执行时硬件各部件能量消耗状况的定性分析,部分的对这些问题给予了回答,并从软件优化的角度提出了将功耗作为综合评价软件代码优化性能的一个指标的看法。
只要打开电源,计算机系统就开始消耗能量了,这时的能耗包括硬件功耗和软件功耗两个方面。所谓软件功耗,是指由于软件的运行而引起的能量消耗,其值为系统功耗与硬件功耗之差。在完成一个任务时,比如对系统资源的管理任务、对高级语言的编译任务或对某项具体工程应用的任务,不同的设计思想会产生不同效果的软件,除了软件各方面的特点以外,这些软件的功耗也不尽相同。功耗较大的软件,一定使用了较多功耗大的操作指令或是使用了不必要的指令,不妨把由这部分指令引起的无用功耗称为损耗,于是软件功耗被划分为两部分:有用功耗与损耗。无论什么软件(系统软件和应用软件),只要运行,功耗是不可避免的,研究软件功耗的目的是如何减少软件损耗,以使全系统工作在最佳状态。对于一个常规配置的基本系统,不外乎如下几个部件组成:系统总线(控制总线、数据总线、地址总线)、内部存储器 RAM、寄存器、控制器、算逻部件ALU、指令CACHE和数据CACHE、I/O接口以及外部 I/O设备等等。不同的软件指令对这些部件的操作所消耗的功率有大有小,对指令相对部件操作而消耗能量的情况做定量分析虽然理想,但由于软件设计的复杂性,定量分析未必能有效地指导软件设计,或许定性分析对其更具实际意义。
我们对计算机部件与指令操作的功耗情况一般有如下一些共识:
部件内部操作指令的功耗小于部件间操作指令的功耗;访问执行时间短的操作指令功耗小于访问执行时间长的操作指令的功耗。
在CPU内部,寄存器用D触发器做功耗较大,用DRAM做功耗会较小。对每个寄存器来说,分别用各自的时钟比统一用一个时钟功耗要小得多,但电路会复杂些。
CACHE占用芯片面积三分之一左右,CACHE越大,功耗也越大。通常CACHE的能耗约为芯片总能耗的70%。
在指令设计上,指令执行过程中使0、1翻转越少,指令功耗也就最小,如何使0、1翻转最少与指令格式设计相关。
在系统内,访问MEMORY的指令执行时间较长,耗能较多。
对于 RISK指令集,只有LOAD、STORE指令与MEMORY打交道。
对于与总线(BUS)打交道的指令能耗最多。
在现代计算机体系结构中,多级流水线作业和并行运算成为主流,充分利用计算机体系结构的特点也能达到节能的目的。例如超标量计算机工作时,经常是很多部件处于休闲状态而消耗能量,若能实时地开关它们就能减少能量损耗。在多级流水线作业体系结构中,采用“试探技术”使尽可能多的程序单元并行执行,提高单位时间CPU的效率,也可达到节能的目的。
基于上面对系统指令、部件、结构在能耗方面的定性分析,在软件设计中,尽可能避开或少用功耗大的指令和部件,就能够设计出较低能耗的软件。对于超标量计算机,可增加一些开关部件的指令,以便在软件中实时地打开和关闭各个部件。对于有些嵌入式系统来说,为了提高运行速度,通用寄存器往往做得很大,有时许多寄存器都空着没用,这样就可以考虑将程序中常用的常量直接置于寄存器中,而不是置于内存的静态存储区中,这样做不仅提高了软件运行速度而且也节省能量消耗。Intel在这方面采用了另一种思路,即多线程技术。它是利用在一个处理器中同时执行多个独立的指令集的方法,这就像将一个处理器作为两台独立的处理器使用,结果增加了每一具体时间处理器资源的使用比率,更有效地利用CPU相当于获取更高的性能,同样意味着能量的节省。
下面我们用两个例子说明低功耗软件的设计技术。
例1、软件设计中,代码优化是一件非常有意义的事情。优化的本质是对代码进行等价变换,使变换前后的代码运行结果相同,但变换后的代码较变换前的代码具许多优越性能。传统的观点要求变换后的代码要有较快的运行速度或占较少的运行资源或二者兼备,随着嵌入式系统的快速发展,软件功耗问题越来越显重要,我们应该将“省电”也作为软件优化的一项技术指标,这样对软件优化的评价体系才算完整。
对于软件优化技术,除我们常用的“代码外提”、“强度削弱”、“条件变换”、“复写传播”等方法外,现在必须重视“功耗降低”的技术。如下面的两段程序完成同样的功能,程序A充分利用寄存器完成字符识别,程序B主要利用存储器完成相应功能,据本文2节关于指令运行时部件的功耗分析,显然A优于B。[1]
例2、本例指令格式与程序来自参考文献。[2]超标量计算机系统中,依靠编译器来预测需要实时开关的部件,同时硬件设计时也要支持这类开关操作,再增加开关部件的新指令,三方面配合完成节能的任务。新增加的指令如:
add.on 打开整数加法器
add.off 关闭整数加法器
mul.on 打开整数乘法器
mul.off 关闭整数乘法器
add.s.on 打开浮点加法器
add.s.off 关闭浮点加法器
mul.s.on 打开浮点乘法器
mul.s.off 关闭浮点乘法器
mov.s.on 在浮点寄存器与打开的浮点运算器之间传送数据
mov.s.off 在浮点寄存器与关闭的浮点运算器之间传送数据
利用新增指令的源程序段落如:
我们已经看到,用这样的方法并没有增加多少软件的复杂度,但却能将大部分时间处于休闲状态的部件所耗能量减低至最小,从而达到节能目的。据实验,采用此方法设计的软件节能效率超过90%。
当一辆车耗油很大时,司机总会说车有毛病,但这解释不了同一辆车不同司机操作时耗油不同的事实。计算机功耗的情况与此完全类似,强调软件功耗的重要性无异于强调软件设计的正确性,因为计算机的全部操作就靠它了。对于软件功耗问题,只要算法得当,总可得到解决。特别是当前嵌入式系统在计算机研究与应用领域迅猛扩展的形势下,低功耗软件设计技术会越来越受到广泛的重视,而在未来软件优化度的评价指标中,难道可以对软件功耗如此重要的事给予忽略吗?
[1]袁太生.单片机应用技术[M].北京:中国电力出版社,2007.
[2]S Real,S Pande,S Onder,et al.Optimizing Static Power Dissipation by Functional Units in Superscalar Processors[C].International Conference on Compiler Construction,Grenoble,France,2002.
[责任编辑:赵自谦]
Software Energy Consumption and Software Optmization Technology
YUAN Tai-sheng
(Computer Engineering Department,Taiyuan University,Taiyuan,030009,China)
Not only in designing and making computer but also in using it,the problem of energy consumption has been paid close attention to extremely all the time.With further investigation and extensive application of the embedded system,the consumption question of the computer system is more and more outstanding.We paid more concerns in reducing the computer hardware consumption in the past,we must pay enough attention in reducing the power consumption caused by software now.Especially when the chip technology of the computer develops to several nanometers,it is particularly important to study the way and method of reducing the software consumption.And when we comprehensively appraise on the qualityof the software,we also should regard the software consumption as a guid line of optimizing performance of software code.
Computer Software;Power Consumption;software evaluation;software energy consumption;optimization technology
TP391
A
1671-5977(2010)03-0117-03
2010-09-01
袁太生(1955-),男,山西寿阳人,太原大学计算机工程系教授。