首页 > 范文大全 > 正文

改进的指令总线功耗优化策略

开篇:润墨网以专业的文秘视角,为您筛选了一篇改进的指令总线功耗优化策略范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要:针对编译器系统设计和编译中的低功耗优化,基于可重定向编译器,实现在编译器后端对VLIW指令总线进行功耗优化的策略.通过对编译生成的二进制目标码进行横向再调度来减少指令总线上的高低电位切换次数,达到降低系统功耗的目的. 对编译后端的软件流水和超块调度两种性能优化策略进行对比实验,表明其优化效果在30%以上,并且代码的指令级并行性(Instruction Level Parallelism, ILP)与优化效果存在明显的相关性. 最后,通过ILP对该策略提出改进,以指令级并行信息指导功耗优化,在功耗优化效果损失不大的前提下,可节省多达20%的算法开销.

关键词:低功耗优化; 重定向编译器; 指令调度

中图分类号:TP314

文献标志码:A

Improved low-power optimization strategy targeting instruction bus

XU Burong, LI Xi, WEI Lianghui

(Dept. of Computer Sci. & Tech., Univ. of Sci. & Tech. of China, Hefei 230027, China)

Abstract: With the design of complier system and optimization for its low-power in compiling, the low-power optimization strategy for VLIW instruction bus is implemented in the compiler backend. The strategy reduces the number of voltage switch on instruction bus by rescheduling the generated binary code in horizon, which leads to system power reduction. The comparison experiments for software pipeline and super block scheduling are done, which shows that the optimization effect can be increased by more than 30% and has obvious relation to instruction level parallelism (ILP). At last, an enhancement method for the strategy is proposed based on ILP information. The statistics shows that the cost saved can reach up to 20%.

Key words: low-power optimization; retargetable compiler; instruction scheduling

0 引 言

近年来,随着计算机系统应用的普及,低功耗设计问题成为系统设计中关注的重点.在高性能计算领域,功耗问题也同样突出.因此,除了对代码的规模和执行性能优化之外,通过优化减少设备的功耗消耗,对于VLIW体系结构的一些高性能计算机系统而言,也是非常重要的研究方向.

目前,已经存在许多功耗优化方面的技术,例如:利用可变电压和可变频率降低系统的静态功耗[1];通过有选择地关闭系统中暂时不用的部件来减少系统的功耗[2];还有通过对总线上数据重编码[3]、对控制逻辑信号进行重新编码[4]等方法来降低系统的动态功耗等.其中,在编译阶段对生成代码进行性能优化的同时引入功耗优化,也是一个重要途径.

本文的研究基于可重定向编译研究平台Trimaran[5].Trimaran是个参数化的重定向编译底层平台,主要由前端IMPACT和后端ELCOR组成,当前主要针对EPIC[6]结构,这是Intel提出的一种VLIW体系结构.

由于总线功耗在芯片总功耗中占有较大份额,因此,以指令总线为功耗优化对象,实现在编译后端针对指令总线高低电位切换进行功耗优化的策略,并结合Trimaran后端的软件流水和超块(SUPER BLOCK)调度这两种性能优化策略进行大量的对比实验和细致分析.实验表明,该功耗优化策略可以有效优化指令总线上的翻转,并且代码的指令级并行性对该功耗优化效果有明显导向性作用.最后,基于分析结果,提出进一步的改进方案,以指令级并行信息指导功耗优化,从而在功耗优化效果损失不大的前提下,节省大量算法开销.

1 针对指令总线的功耗优化

1.1 功耗模型

CMOS电路中部件的功耗主要由3个部分组成:短路功耗、静态功耗和动态功耗.

短路功耗由短路电流形成,在系统层设计时基本不对其进行研究;静态功耗由电源和地之间的漏电流引起,占CPU芯片功耗的2%~5%;动态功耗是由门电路开关造成的功耗,它是系统功耗的重要组成部分.

部件的平均动态功耗可以表示为

式中:C为电容,是线长和晶体管尺寸的函数;V为供电电压;f为时钟频率;D为活动因子,指线路切换的平均频度.

活动因子D表明电路的功耗与电路状态的变化密切相关.每个输入向量都对应一种电路状态,若输入保持不变,电路的状态也将保持不变,当输入发生切换就可能引起电路状态的切换.因此,电路功耗对输入向量的变化表现出强烈的数据依赖性.它不仅与当前的输入向量有关,更主要的是由相邻两个输入向量决定.

以上对功耗方程的分析说明,器件功耗可以通过减少其电容和活动因子的乘积达到优化.由于总线的承载电容相对较大,并且总线输入向量切换较为频繁,因此总线上的动态功耗占了处理器功耗中较大的份额.例如,DEC Alpha 21064总线上的功耗占了处理器功耗的15%,Intel 80386总线上的功耗更是占了处理器功耗的30%以上.[7]因此,针对总线的功耗优化是低功耗研究的一个重要方面.1.2 针对指令总线的功耗优化策略

基于Trimaran,在编译后端实现二进制代码再调度模块,以降低指令总线上的高低电位翻转从而降低系统功耗.

由可重定向编译器的机器描述提供每条操作的操作码编码,操作格式以及VLIW指令拼装格式可以得到每条操作的二进制表示,进而得到整个VLIW的二进制表示.

基于每条VLIW指令的二进制表示,采用前后两条指令之间的海明距离估算相邻两条指令在指令总线上的切换次数.

将该完全二分图中边的权值取为原来的负值,便可以采用求完全二分图的最佳匹配算法来找到合适的匹配.

以下是对一个基本块或者超级块中的目标码使用该策略的伪码算法.

输入:基本块或者超级块中的n条VLIW指令X[n],每条VLIW指令中有m个操作槽,最多可填充m个操作(Xi,1,Xi,2,…,Xi,m)

输出:优化后的基本块或者超级块,VLIW指令中的操作进行横向重排

Begin

last_instr=X[0];

for(i=1;i

{

current_instr=X[i];

bipart_match ( lastlayer_instr,currentlayer_instr );

/*对相邻两条VLIW指令的操作进行最优二分图匹配*/

last_instr=current_instr;

}

End

编译后端在指令调度阶段根据操作相关性和调度策略决定每条操作的调度时间.拼装在一条VLIW指令内的操作具有相同的调度时间,而本框架中的功耗优化策略主要是在VLIW指令内部进行操作的横向重排,并没有修改VLIW指令中操作的调度时间,因此,该策略不会影响到输出目标码的正确性及性能.

2 实验结果及相关分析

在对该功耗优化策略进行评估时,采用Trima- ran自带的benchmark进行实验,实验目标体系结构基于IA-64[8],主要简化部分指令集和编码方式,编译生成的目标码由Trimaran的模拟器解释执行,不考虑具体的硬件特征.在功耗优化模块的执行过程中,统计所生成静态目标码在指令总线上造成的切换次数;在模拟器的执行过程中,统计程序动态执行时在指令总线上造成的切换次数.考虑到该功耗优化策略和指令级并行性的相关性,将结合编译后端的两种重要性能优化:软件流水和超块调度来分析该功耗优化策略的效果.2.1 结合软件流水的分析

软件流水是一种非常重要的细粒度循环调度方法,它产生周期模式的并行调度,使得相邻轮次循环的指令尽可能并行执行,以充分开发指令级并行性.表1给出使用软件流水前后指令总线上高低电位翻转的变化以及该功耗优化策略的效果.

由上述实验结果可见,在进行软件流水优化前,这几个benchmark的循环核心基本块指令级并行度ILP都不高,功耗优化的效果也不明显,由于mm_double循环中所包含的操作较多,因此指令级并行度达到1.42,此时的功耗优化效果勉强可以接受.

而在对测试程序进行软件流水优化之后,所有测试程序的循环核心基本块指令级并行度都有明显增长.其中bmm和mm_double均为多重循环的矩阵运算,在循环展开并进行软件流水优化后,指令级并行度达到1.86和1.97,即每个周期所调度的VLIW指令中所包含的操作数接近2,此时上述的功耗优化策略将会获得更高的操作匹配自由度.因此这两个测试程序功耗优化的效果提升得最为明显,分别达到24.64%和30.03%.fir和fact2均为单层循环,软件流水对指令级并行度以及功耗优化效果的提升也比较明显.对于测试程序hyper,由于其循环体中包含较多的条件语句,因此软件流水优化的效果并不十分明显.2.2 结合超块调度的分析

传统编译器往往以基本块作为调度的基本单位,这样做的优点是处理简单,在基本块内进行调度时,操作之间的依赖关系比较明确,不用考虑分支跳转.当然,其缺点也显而易见:基本块往往较小,包含的操作数目不多,可以并行执行的操作数目则更加受限制,因此,对于指令级并行的机器而言,以基本块为调度基本单位往往不能提供令人满意的指令级并行度.为了增加指令级并行度,现今的一些针对VLIW或SUPERSCALAR机器的编译器往往提供超块调度作为一种激进的调度方式.编译器根据静态分析代码所获得的信息来判断最有可能执行的路径,将该路径中的基本块组织成一个多入口和多出口的超块.与基本块相比,超块包含的操作数目要大得多,可并行执行的操作数目也较多,因此,在超块调度时,往往能获得更高的指令级并行度.然而,在形成超块时,会有部分基本块代码作为赔偿代码(Compensation Code)拷贝到执行可能性不大的超块中,从而使得代码量有所增加.表2分别给出使用基本块调度和超块调度时指令总线上高低电位翻转的变化,以及该功耗优化策略的效果.

由表2中的实验数据可见,超块调度可以改进程序的指令级并行度,但由于超块调度优化的是代码中的非循环部分,因此,超块调度对指令级并行性的提升不如软件流水明显,当然,具体效果还取决于代码本身的特点.然而值得肯定的是,由于超块调度改进了程序的指令级并行度,功耗优化策略的效果也或多或少有所提升,这也是由于指令级并行度的提高为功耗优化策略提供更高的操作匹配自由度.从表2还可以看到,使用超块调度后,由于赔偿代码的产生,增加指令总线上翻转的次数.3 功耗优化策略的改进

由以上分析可以看到该功耗优化策略能够有效优化指令总线上的翻转,效果最好时可达30%以上,并且,代码的指令级并行性对该功耗优化策略的效果具有导向性作用:对于指令级并行度较大的代码,操作匹配自由度较高,功耗优化往往能取得较好的效果;反之,对于指令级并行度并不可观的代码,操作匹配自由度较低,功耗优化的效果并不明显.

然而,在代码的编译过程中往往会出现一些指令级并行度并不可观的基本块,对这样的基本块使用上述功耗优化策略非但没有效果反而增加无效的算法开销.另一方面,编译器静态的分析代码,可以获得很多有用的代码信息,如指令级并行信息.对于一个基本块B,其指令级并行度信息可以在编译后端完成指令调度后,通过如下公式计算:

即一个基本块的指令级并行度可以由其中所包含的操作数除以调度这些操作所花费的周期数得到.

因此,可以采用编译中所得到的指令级并行度信息指导这里的功耗优化策略,更有针对性地对一些主要基本块展开功耗优化,而对于那些效果不明显或者不适合进行优化的基本块,可以避免无效的算法开销.以基本块作为优化的基本单位,设定一个ILP阈值D,若当前基本块的指令级并行度大于该阈值,则展开功耗优化,否则,并不作过多处理.

以下是改进后的功耗优化策略伪码.

输入:程序所有完成调度的基本块集合B;

比较表3的数据,可以看到D增加时,所节省算法开销的百分比也有所增加,而所付出的代价是功耗优化效果的降低,因为此时会有更多的基本块被过滤掉而不进行功耗优化.因此,D的取值是关键,需要在算法开销和功耗优化这两方面进行折中考虑.表3中,D=0.8是一个较好的取值,此时,fir和fact2在损失1%~2%优化效果的代价下,节省大约10%的开销;bmm和mm_double以多重循环为主,其他的基本块指令级并行度并非很高,过滤掉这些基本块后,节省15%~17%的算法开销,而功耗优化的效果几乎没有下降,这也充分说明过滤掉的基本块并不适合上述功耗优化策略;hyper的情况比较特殊,由于其包含的分支和跳转指令较多,其基本块规模都较小,并且指令级并行度也不可观,在过滤掉一些基本块后,功耗优化受到较明显的影响.

综上所述,使用编译中的ILP信息指导该功耗优化策略可以使得功耗优化针对性更强、更加有效,并且能够节省算法的开销.只要根据具体应用的特点,选取合适的D值,改进将会非常有效.

4 结论与展望

当前,功耗问题越来越受到人们的重视,对功耗优化策略的研究显得更有意义.本文基于可重定向编译器,实现在编译后端针对VLIW指令总线高低电位切换进行优化的策略,并结合编译后端的两种性能优化策略进行大量实验和分析.实验表明,该策略可有效优化指令总线上的翻转,并且其优化效果和代码的指令级并行度有明显相关性.基于以上分析,对该策略进行改进,以编译中的指令级并行信息指导该策略.实验数据说明,只要选取合适的ILP阈值,这种改进可以大量减少算法的无效开销,且保证功耗优化效果不受太大影响.

由于本文的功耗优化策略还没有考虑到VLIW指令模板对指令中操作匹配自由度的限制,进一步的研究可以引入对VLIW指令模板的分析,综合考虑编译器本身提供的信息对功耗优化策略的影响.

参考文献:

[1] CALHOUN B H, CHANDRAKASAN A P. Standby power reduction using dynamic voltage scaling and canary flip-flop structures [J]. IEEE J Solid-State Circuits, 2004, 39(9): 1 504-1 511.

[2] MEHRA R, RABAEY J. Exploiting regularity for low-power design [C]// Proc IEEE/ACM International Conference on Computer-Aided Design, San Jose, Canda, 1996: 166-172.

[3] PETRO P, ORAILOGLU A. Low-power instruction bus encoding for embedded processors[J]. IEEE Transaction VLSI System, 2004: 12(8).

[4] KIM D, CHOI K. Power-conscious high-level synthesis using loop folding [C]// Proc ACM/IEEE Design Automation Conference, Anaheim, Canada, 1997: 441- 445.

[5] Trimaran Consortium. Trimaran: an infrastructure for research in instruction-level parallelism. [2005-10-18]. .

[6] SCHLANSKER M S, RAU B R. EPIC: an architecture for instruction-level parallel processors[R]. Palo Alto: Hewlett Packard Laboratories, 2000.

[7] IRWIN M J. Tutorial: Power reduction techniques in SOC bus interconnects. [C] // Proc 1999 IEEE International ASIC/SOC Conference, Los Alamitos, Canada, 1999.

[8] HUCK J, MORRIS D, ROSS J, et al. Introducing the IA-64 architecture[J]. IEEE Micro, 2000, 20(5): 12-23.

“本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文”