Compiler Optimization on VLIW Instruction Scheduling for Low Power

Compiler Optimization on VLIW Instruction Scheduling for Low Power

ChingRen Lee, Jenq Kuen Lee, TingTing Hwang

National Tsing-Hua University, Taiwan

ACM Transactions on Design Automation of Electronic Systems, 2003

 

CSDN图片审核,我把博文上传到资源里,需要的朋友可以在这里下载。

DSP核心(VLIW架构)的嵌入式系统,往往要求高性能与低功耗。本文侧重后者,基于VLIW架构做指令总线上指令调度的优化,编译器的改造工作。

 

 

以上公式表明,编译器优化,要么减小T,要么减小D,本文关注后者。

先来一张架构图,看看总线模型:

 

 

1. 一个VLIW机器架构和总线模型

ü  建模

采用Hamming码作为代价函数:   

其中XY是连续的两条k-way发射的VLIW指令,XiYi分别为XY的指令分量,H(X, Y)表示两指令间的汉明码距离,即两指令有几位不一样的。

 

2. 汉明码示意

ü  指令调度策略

分两个阶段,一阶段采用list scheduling做性能优化,而后我们reschedule这份指令以降低功耗。可做水平调度和垂直调度,水平调度指一条指令里的各“微指令”间水平方向上的交换,垂直调度指上下连续若干条指令里的各“微指令”间垂直方向上的交换。

a)         水平调度

给出一种贪心机制(greedy bipartite-matching scheme),并证明在给定的VLIW指令调度策略基础上该机制总是最优的,给出最优的指令总线切换活动。

 

3. 水平调度的bipartite-matching示意图

建立bipartite matching图,赋边权"-Hamming"。这里求最优方案最大值,故取各汉明码的相反数。很简单的贪心算法,每次贪最大的(也即Hamming最小的,指令间区别最小的)则最后全局最大,形成最优方案。理论证明很简单,反证,如果能找到更优的,那么我们的当前阶段一定某个阶段非最优的,与每阶段最优矛盾。

伪码如下:

 

4. 水平调度伪码

b)         指令调度策略之垂直调度

证明这是一个NP难问题,继而给出一个启发式算法。

 

输入还有DDGcritical path,关键路径上的节点往往很高贵需要特殊待遇(这里指关键路径上的节点只允许做水平调度,垂直方向不可以)。

 

5. 垂直调度伪码与图解

ü  如何做实验

实验环境:Alpha-based VLIW arch,  a compiler based on SUIF + machSUIF + our scheme,  an ATOM simulator on the DEC Alpha UNIX v4.0(插入代价模型即汉明距离)

 

6. 将代码注入编译器(in phase 3

ü  实验结果

与常规的list scheduling相比,水平调度:4-way issue arch平均提高了13.30%,对于8-way issue arch,平均提高了20.15%。水平调度+垂直调度:window size = 4时平均提高了7.66%window size = 8时,平均提高了10.55%.

 

 

你可能感兴趣的:(Compiler Optimization on VLIW Instruction Scheduling for Low Power)