一种超长指令字结构下延迟槽调度方法及其系统的制作方法

文档序号:6377148阅读:359来源:国知局
专利名称:一种超长指令字结构下延迟槽调度方法及其系统的制作方法
技术领域
本发明涉及一种指令调度技术,尤其涉及一种超长指令字结构下延迟槽调度方法及其系统。
背景技术
超长指令字(Very Long Instruction Word,简称VLIW)是一种非常长的指令组合,它把许多条指令连在一起,增加了运算的速度。VLIW技术是提高处理器指令级并行性的主要性能之一,它采用软硬件协同开发处理器的并行性。长指令的组装由编译器完成,而不是采用超标量处理器基于硬件动态调度策略,从而大幅度降低了硬件复杂度和芯片功耗。在数字信号处理器(Digital Signal Processing,简称DSP)体系结构设计中,通 常是在精简指令集计算机(Reduced Instruction Set Computer,简称RISC)体系结构下结合VILW技术进行研究。采用这种体系结构的流水处理器中,分支指令是提高性能的一个重要障碍,这是因为分支指令之后的指令预取地址需要在分支指令执行到比较后的流水级时才能产生,中间的延迟会造成指令流水线停顿等分支结果,从而直接影响后续指令序列的执行,降低了指令并行度。延迟槽结构正是为了降低此类指令流水线控制流相关带来的性能开销,其原理是,如果在分支指令之后填入与分支指令不相关的指令,那么处理器的指令流水线将仍然处于工作状态,分支指令带来的延迟将会被这些指令合理应用,延迟槽就是用于存放这些指令的结构。延迟槽结构在实际程序执行中要想获得良好效果,需要软件调度算法的支持。如果在延迟槽中填充有用的指令,那么处理器的处理性能就可能提高,而如果找不到合适的指令使得延迟槽不得不填充空操作指令的话,那么控制相关操作所带来的性能损耗依然存在。因此,软件上如何让指令延迟槽获得尽量充分的使用,是值的探究的。延迟槽调度算法主要包括局部调度算法和全局调度算法两种方案。传统编译器只采用较为简单的局部函数片段的调度,即局部调度,延迟槽中所填充的指令从基本块(Basic Block)中选取,基本块是程序中一个顺序执行的语句序列,在执行时只能从入口语句入,从出口语句退出(基本块只有一个出口语句和一个入口语句),基本块以分支指令做为结束指令。如果基本块中没有合适指令可选择,那么就填充空操作指令,而全局调度则是在发现基本块中没有合适指令可填充延迟槽后,还会基于一定约束规则从其他基本块中选择合适的指令进行填充,也就是说全局调度允许跨越基本块边界的代码移动,如果这个过程也失败,那么再选择空操作指令进行填充,但在编译器上实现全局调度的代价较大,而且直接影响编译器的编译速度。在传统的DSP处理器体系结构设计中,通常只使用局部调度算法或限于对编译速度的考虑选择全局调度和编译器效率的折中,而局部调度算法通常局限于局部函数片段可选的目标指令数很少,当编译器充分优化时,局部函数片段中指令之间的逻辑性增强导致延迟槽使用率偏低。当传统的DSP处理器体系结构设计方案没用到基于VLIW技术实现的体系结构中,则无法评估对指令并行度的影响,而对延迟槽的使用可能带来对指令并行度的破坏,反而影响程序的实际效率。

发明内容
本发明的目的是提供一种超长指令字结构下的延迟槽调度的方法,以达到延迟槽调度和程序并行性度之间的权衡,局部调度和全局调度之间的权衡,从而使程序获得更高的执行效率。为实现上述目的,一方面,本发明提供一种超长指令字结构下的延迟槽调度方法,该方法包括以下步骤对当前基本块内指令进行局部调度,所述局部调度完成后判断是否有剩余指令延迟槽,若没有,则调度结束;否则将可填充入指令延迟槽但开销较大的指令放入局部备选指令缓存;对分支目标基本块内指令进行全局调度,选取可填充入指令延迟槽的指令放入全局备选指令缓存; 从所述局部备选指令缓存和/或所述全局备选指令缓存中选取指令填充入所述剩余指令延迟槽。另一方面,本发明还提供一种超长指令字结构下的延迟槽调度系统,该系统包括局部调度单元,用于对当前基本块内指令进行局部调度,所述局部调度完成后判断是否有剩余指令延迟槽,若没有,则调度结束;否则将可填充入指令延迟槽但开销较大的指令放入局部备选指令缓存;全局调度单元,用于对分支目标基本块内指令进行全局调度,选取可填充入指令延迟槽的指令放入全局备选指令缓存;平衡调度单元,用于从所述局部备选指令缓存和/或所述全局备选指令缓存中选取指令填充入所述剩余指令延迟槽。本发明实施例提供的一种超长指令字结构下的延迟槽调度的方法可从汇编级着手完成延迟槽的指令填充工作,该方法结合了延迟槽调度方法中局部调度策略和全局调度策略,以达到延迟槽调度和程序并行性度之间的权衡,局部调度和全局调度之间的权衡,从而使程序获得更高的执行效率。


通过以下结合附图以举例方式对本发明的实施方式进行详细描述后,本发明的其他特征、特点和优点将会更加明显。图I为本发明实施例一种超长指令字结构下延迟槽调度系统结构图;图2为本发明实施例一种超长指令字结构下延迟槽调度方法流程图;图3为局部调度前构造的有向指令依赖图;图4为全局调度前构造的有向指令依赖图。
具体实施例方式下面通过附图和实施例,对本申请的技术方案做进一步的详细描述。本发明实施例提出的一种VLIW结构下的延迟槽调度方法,用于从汇编级着手完成延迟槽的指令填充工作。该方法结合了己提出的延迟槽调度算法中局部调度策略、全局调度策略,并针对VLIW结构对指令并行的要求,设计了平衡调度策略以达到指令延迟槽调度和程序并行度之间的权衡、局部调度和全局调度之间的权衡,籍此获得尽可能高的指令流水线性能。下面结合图I和图2详细介绍本发明实施例VLIW结构下的延迟槽调度方法及其系统。如图I所示,该系统包括处理单元U、局部调度单元21、全局调度单元22、平衡调度单元31、统计单元32,以及代码生成单元41。处理单元11用于依次解析输入的汇编文件,并从汇编文件中获得每条汇编指令所包含的具体信息。上述具体信息包括寄存器信息、目标地址信息、指令名称、指令所涉及到的硬件功能单元的划分,以及指令执行的周期(cycle)数目。处理单元11将接收到的汇编文件以函数片段为单位,将函数标号存储并建立哈希索引表,以方便索引。处理单元11采用双向链表结构将汇编指令以包为单位进行组织。例如,汇编文件如下所示 test:prOadd dO,dl,d2 | IprOsub d3,d4,d5 | 2prOadd d6,d7,d8 | 3prOsub d9,dl0,dll.4prO j testl. 5testl:prO addia alO,I. 6prO addia a8,11 7prO j test I. 8prO addia a5, 11 9prO sub d9,dlO,dll. 10prO j test . 11以上汇编文件被划分为两个函数片段,即函数片段test和函数片段testl,函数片段tes t中的指令I 4构成指令包pakl,指令I 指令3中的末尾符“ I ”代表该条汇编指令为可并包指令,指令4中的末尾符”代表该条指令为最后一条可并包指令,pakl中的子链表则由指令I 4的逻辑顺序组织,指令5构成指令包pak2。因此,函数片段test由pakl和pak2构成。针对函数片段test进行局部调度的对象集合为{pakl、pak2},而根据分支指令,即指令5的推断寄存器prO分析全局调度的对象集合为{从testl的指令6起至下一个分支指令或函数片段}或子函数片段内两条分支指令之间的全部指令包,如以上汇编文件中的指令9 指令11。统计单元32用于统计目标函数片段的静态指令周期数,以及经过局部调度和全局调度后所带来的指令周期数的变化。通过统计单元32统计获得的函数片段周期数成为评估指令流水线性能优劣的依据。具体地,在超长指令结构下延迟槽调度系统中,每个指令延迟槽可代表节省一个指令周期。在进行局部调度和全局调度之前,统计单元32需要遍历具体函数片段的指令包集合{pakl、pak2, . . . , pakn}中各元素的子指令链表,并计算出最大指令周期数,构成最大指令周期数集合{cl,c2,...cn},累加该集合中的全部元素的值,从而获得该函数片段的指令周期数。本发明实施例延迟槽调度系统在开始局部调度时,一方面,需要考虑延迟槽节省的指令周期数;另一个方面,需要考虑超长指令结构下指令包的拆分和重组所带来的指令周期数的影响。局部调度单元21用于对当前基本块内指令进行局部调度,当局部调度完成后判断是否有剩余指令延迟槽,若没有,则调度结束;否则将可填充入指令延迟槽但开销较大的指令放入局部备选指令缓存。具体地,局部调度单元21实现函数片段内指令的局部调度,从目标函数子片段中选取与分支指令、下文指令无关的指令填充入延迟槽,体现的是一种自下而上的过程,在进行局部调度前期需要分析当前基本块内指令间的依赖关系,构造局部有向指令依赖图,局部指令依赖图的入口节点选择目标分支指令。根据局部指令依赖图可从基本块中找出与分 支指令存在相关冲突的全部指令,构成局部相关指令集合,并从基本块中找出可填入指令延迟槽中的全部指令,构成局部备选指令集合。如图3左侧图所示的函数片段,假定分支指令9中的call在该体系结构下默认使用到的寄存器为地址寄存器all,则图2右侧图中实曲线部分代表和call指令存在数据依赖关系的指令,即表明存在读后写的依赖关系,则相关指令集合{1,2,6,7,8}无法被填入指令延迟槽中;而图2右侧图中虚曲线部分代表指令5和相关指令集合中的指令7存在写后读的反依赖关系,即指令5同样无法添加入指令延迟槽中,因此最终的相关指令集合为{1,2,5,6,7,8,9}。因此,在图3左侧图所示的函数片段中可能被填充入指令延迟槽的局部备选指令集合为{3,4}。在传统的局部调度算法中会根据目标体系结构中延迟槽的数目将备选指令集合{3,4}尽可能的添加入指令延迟槽中,然而,在采用超长指令结构技术的目标体系结构上,按照传统的局部调度方式进行填充的效果并不明显甚至毫无效果。通过图3左侧图中各汇编指令的末尾符可以看出指令集合{3,4,5}可构成一个指令并行包,指令{I}、指令{2}、指令集合{6,7}和指令集合{8,9}同样构成独立的指令并行包,即{5}形成相关指令子集合。以下针对局部调度单元21在进行局部调度时平衡调度单元31进行的平衡调度进行说明。根据目标体系结构下指令延迟槽数和局部备选指令集合中指令数目的比较,以及局部相关指令集合中与预备填充入指令延迟槽中的局部备选指令集合中的指令存在于同一个指令并行包的局部相关指令子集合,是否能与相关指令集合中的其他元素重新构成指令并行包等情况对局部调度中的平衡调度算法进行讨论第一种情况指令延迟槽数目大于或者等于局部备选指令集合{3,4}元素数目,且函数片段中的局部相关指令子集合,即指令5,和相关指令集合中除相关指令子集合中的指令5之外的指令,即指令{I}、指令{2}、指令集合{6,7}或指令集合{8,9}不可以构成新的指令并行包。在第一种情况下,针对局部备选指令集合{3,4}的指令调度将导致两个指令延迟槽被占用,而与局部备选指令集合{3,4}可构成指令并行包的指令{5}却构成了独立的指令包。这样一方面,由于函数片段中的指令{3}、指令{4}和指令{5}本身可以合并为一个指令包,那么针对局部备选指令集合{3,4}的调度将不会改变指令集合{3,4,5}对指令流水线的占用;另一方面,备选指令集合{3,4}的调度将导致指令延迟槽的浪费。因此,对于第一种情况,将不会进行局部备选指令集合{ 3,4}的调度,而进入下一步的全局调度。第二种情况指令延迟槽数目大于或者等于备选指令集合元素数目,且局部相关指令集合和与所述局部相关指令子集合可以构成新的指令并行包。例如,指令延迟槽数目大于等于局部备选指令集合{ 3,4 }元素数目,且指令{ 5 }可以和指令{I}、指令{2}、指令集合{6,7}或指令集合{8,9}构成新的指令并行包。在第二种情况下,针对局部备选指令集合{3,4}的指令调度同样将导致两个指令延迟槽被占用,而指令{5}合并到其他指令包时还需要讨论两种情况情况A,指令{5}的引入导致两个指令包间添加额外的nop(空)指令时,则局部备选指令集合{3,4}不能被调度;情况B,指令{5}的引入不会导致额外的nop指令的引入,针对情况B,还需要根据全局调度时的结果进行权衡。第三种情况指令延迟槽数目小于局部备选指令集合元素数目,且与所述局部相 关指令子集合和所述局部备选指令集合中的任一或多条指令可以和所述局部相关指令集合构成新的指令并行包。例如,指令延迟槽数目小于局部备选指令集合{ 3,4}元素数目,且指令{ 5 }可以和局部备选指令集合{ 3,4 }中的指令{ 3 }或指令{ 4 }与指令{ I }、指令{ 2 }、指令集合{ 6,7 }或指令集合{ 8,9 }构成新的指令并行包。在第三种情况下,通过局部调度从局部备选指令集合{3,4}中选取一条指令填入指令延迟槽,节省I个指令周期。但其结果还需要根据全局调度时的结果进行权衡。第四种情况指令延迟槽数目小于局部备选指令集合元素数目,且与所述局部相关指令子集合和所述局部备选指令集合中的任一或多条指令不全部可以和所述局部相关指令集合构成新的指令并行包。例如,指令延迟槽数目小于局部备选指令集合{ 3,4 }元素数目,且指令{ 5 }不全部可以和局部备选指令集合{ 3,4 }中的指令{ 3 }或指令{ 4 }与指令{ I }、指令{ 2 }、指令集合{6,7}或指令集合{8,9}构成新的指令并行包。在第四种情况下,通过局部调度将局部备选指令{ 3,4 }中的一条指令填入指令延迟槽将不会提升指令流水性的性能,因此只能进行全局调度。第五种情况,指令延迟槽数目小于局部备选指令集合元素数目,且与所述局部相关指令子集合和所述局部备选指令集合中的任一或多条指令全部不可以和所述局部相关指令集合构成新的指令并行包。例如,指令延迟槽数目小于局部备选指令集合{ 3,4 }元素数目,且指令{ 5 }和指令{ 3 }或指令{ 4 }全部不可以和指令{ I }、指令{ 2 }、指令集合{ 6,7 }或指令集合{ 8,9 }构成新的指令并行包。在第五种情况下,如果指令{3}和指令{4}存在于同一个指令并行包,那么通过局部调度将局部备选指令集合{3,4}中的一条指令填入指令延迟槽同样不会提升指令流水线的性能,因此只能进行全局调度。如果指令{3}和指令{4}存在于同一个并行包,那么通过局部调度利用局部备选指令{3,4}填满延迟槽,就可节省延迟槽数目,因此只需进行局部调度。需要说明的是,局部调度是根据当前指令延迟槽的数目以及局部备选指令集合的开销而判断是否填充延迟槽,在局部调度中需提供一个局部备选缓存器,用于存储局部备选指令集合中可以被调度但开销较大的局部备选指令集合,当在下一步的全局调度完成后,再从局部调度缓存器与全局调度缓存器中存储的备选指令选择指令填充入剩余指令延迟槽中。优选地,在将局部备选指令集合中可填充入指令延迟槽但开销较大的指令放入局部备选缓存器时,先删除局部指令集合中不能使性能提高的指令。 全局调度需要将分支目标函数片段中的部分代码搬移到延迟槽中,但程序函数之间的调用通常是多对一而非一对一的关系,因此,全局调度算法自然而然的结合分支预测来实现,这样通常导致代码量的增加。然而,在超长指令字结构下,广泛使用的推断寄存器却让全局调度算法获得了更好的实现,以一个处理器的体系结构为例,保留推断寄存器prO所指引的指令将总是被执行的。因此,可根据Pr寄存器的索引号来确认分支指令是否一定执行。全局调度体现的是一种自上而下的探索过程,相比于局部调度而言,它需要对目标代码片段的指令并行性做出一定的调整,是一种“先到先得”(即先获得调度权的处理,后获得不处理)的过程。在全局调度使用的前期,同样需要构造出全局有向指令依赖图,而该依赖图的入口节点同样选择目标分支指令。根据指令依赖图可从基本块中找出与分支指令存在相关冲突的全部指令,构成全局相关指令集合,并从基本块中找出可填入指令延迟槽中的全部指令,构成全局调度时的全局备选指令集合。并根据全局相关指令集合查找与全局备选指令集合中指令元素存在于相同指令并行包的指令元素,构成全局相关指令子集
口 ο如图4所示的函数片段,假定分支指令{9}中的call指令在该体系结构下默认使用到的寄存器为地址寄存器all,则图4中右侧图示出的实曲线部分则代表和call指令存在数据依赖关系的指令,即指令集合{ 14,15},指令集合{ 14,15}将无法放入指令延迟槽中,而虚曲线代表的是目标函数片段自身指令之间的数据依赖关系,即指令11不能在指令10之前执行,指令15不能在指令11之前执行。因此,最后可能被填充入指令延迟槽的全局备选指令集合为{ 10,11,12,13}。传统的模式下,按照延迟槽剩余的数量尽可能的填充入指令,而通常容易忽略程序片段自身所拥有的并行性。从图4左侧图的函数片段中可以看出全局备选指令集合{ 10,11,12,13}中的子集合{ 11,12,13}处于同一个并行指令包中,如何最大效率的使用指令延迟槽,同样可分如下几种情况进行讨论以下针对全局调度单元22在进行全局调度时平衡调度单元31进行的平衡调度进行说明。以下结合图3,并根据目标体系结构下剩余指令延迟槽数目和备选指令集合元素数目的比较情况对全局调度中的平衡调度算法进行讨论第一种情况,剩余指令延迟槽数目大于等于全局备选指令集合{ 10,11,12,13}元
素数目。在第一种情况下,全局备选指令集合{ 10,11,12,13}可全部填入指令延迟槽中。由于全局备选指令集合{ 10,11,12,13}中的子集合{ 11,12,13}和指令14是处于同一个并行指令包中,当指令{14}不能添加入指令{15}所在的并行指令包时,全局备选指令集合{10,11,12,13}全部填入指令延迟槽中所带来的效果仅减少了由指令{ 10}所构成的并行指令包的周期数;当指令{ 14}可以添加入指令{ 15}所在的并行指令包时,则全局备选指令集合{ 10,11,12,13}全部填入指令延迟槽中所带来的效果仅减少了由指令{ 10}和指令集合{ 11,12,13}分别构成并行指令包的周期数。因此,当局部调度时的第一种情况成立时,或当局部调度时的第二种情况的情况A成立时,全局调度的结果即是延迟槽最终的调度结果。当局部调度时的第二种情况的情况B成立时,而此时的剩余延迟槽数目又等于全局备选指令集合{ 10,11,12,13 }元素数目时,最终的调度结果则是I :当剩余延迟槽的数量大于或等于局部备选指令集合{3,4}与全局备选指令集合{ 10,11,12,13}指令元素数目之和时,那么调度结果则是将他们全部添加入指令延迟槽中。2 :如果剩余延迟槽的数量小于局部备选指令集合{3,4}与全局备选指令集合{ 10,11,12,13}指令元素数目之和,那么调度结果则是将局部备选指令集合或全局备选指令集合的元素全部添加入指令延迟槽中。第二种情况,剩余指令延迟槽数目小于全局备选指令集合{ 10,11,12,13}元素数目,且大于等于局部调度所获得局部调度备选指令集合元素数目。 在第二种情况下,全局备选指令集合{10,11,12,13}不能全部填入指令延迟槽中,按照传统的全局调度算法将全局备选指令集合{10,11,12,13}的子集合{10,11}放入指令延迟槽中,当指令集合{ 12,13,14,15}不能独立成包时,将占用两个指令延迟槽,所带来的效果是减少了由指令{10}所构成的并行指令包的周期数;当指令集合{12,13,14,15}可独立成包时,占用两个指令延迟槽,所带来的效果是减少了两个并行指令包的周期数。或按照传统的全局调度方案将备选指令集合{ 10,11,12,13}的子集合{ 10,11,12}放入指令延迟槽中,当指令集合{ 13,14,15}可以独立成包时,占用三个指令延迟槽,所带来的效果是减少了两个并行指令包的周期数;当指令集合{13,14,15}不可以独立成包时,占用三个指令延迟槽,所带来的效果是减少了由指令10所构成的并行指令包的周期数。全局调度时的第二种情况所带来的效果均优于局部调度时的第一种情况和第二种情况,因此,全局调度结果即是指令延迟槽最终的调度结果。第三种情况,剩余指令延迟槽数目小于2。在第三种情况下,只能从全局备选指令集合{ 10,11,12,13}中选取一条指令填入指令延迟槽中,由于全局备选指令集合{10,11,12,13}中的指令{10}构成了单指令包。因此,将指令10填入指令延迟槽中将减少一个指令周期,而延迟槽的使用效率却很高。局部调度时的第一种情况至第五种情况中的任一种情况成立时,全局调度的第三种情况的结果即是指令延迟槽最终的调度结果。同样需要说明的是,在全局调度方案中仍然需要提供一个全局备选指令缓存器,用于存储全局调度时开销较大的全局备选指令集合。在平衡调度方案中,需判断局部备选指令缓存器是否为空,如果是,则从全局备选指令缓存器中选取指令填充入指令延迟槽,否则从局部备选指令缓存器和全局备选指令缓存器中选取性能最优的指令填充入剩余指令延迟槽。优选地,在将全局备选指令集合中可填充入指令延迟槽但开销较大的指令放入局部备选缓存器时,先删除局部指令集合中不能使性能提高的指令。另外,当全局调度缓存与局部调度缓存中的指令数目之和大于指令延迟槽数目时,需要考虑指令延迟槽中的指令相关分析,在向指令延迟槽中添加指令时同样需要考虑指令之间的相关性。在一个例子中,指令延迟槽中填入有三条指令(如下所示),DelayslotPrO mu I dO, dl, d2. IPrO nop. 2PrO nop sub d3, d4, dO. 3其中,指令{ I }和指令{3}出现了关于数据寄存器dO的依赖关系,而指令{ I }中的mul指令的执行周期为2个周期,传统的做法是在指令延迟槽2中填入nop指令,而nop指令的填入将会浪费指令延迟槽。因此,需要选用其他无关指令来填充入指令延迟槽2的 位置,从而解决nop指令对指令延迟槽的浪费。本发明实施例提供的超长指令结构下的延迟槽算法结合了传统的局部调度算法和全局调度算法,并针对超长指令字结构提出了平衡调度算法。通过延迟槽调度和程序并行性度之间的权衡,局部调度和全局调度之间的权衡,从而使程序获得更高的执行效率。另夕卜,在计算复杂度要低于编译器中使用的全局调度算法,且更加灵活,可更加充分的挖掘目标程序的执行效率。显而易见,在不偏离本发明的真实精神和范围的前提下,在此描述的本发明可以有许多变化。因此,所有对于本领域技术人员来说显而易见的改变,都应包括在本权利要求书所涵盖的范围之内。本发明所要求保护的范围仅由所述的权利要求书进行限定。
权利要求
1.一种超长指令字结构下延迟槽调度方法,其特征在于包括以下步骤 对当前基本块内指令进行局部调度,所述局部调度完成后判断是否有剩余指令延迟槽,若没有,则调度结束;否则将可填充入指令延迟槽但开销较大的指令放入局部备选指令缓存; 对分支目标基本块内指令进行全局调度,选取可填充入指令延迟槽的指令放入全局备选指令缓存; 从所述局部备选指令缓存和/或所述全局备选指令缓存中选取指令填充入所述剩余指令延迟槽。
2.根据权利要求I所述的调度方法,其特征在于,所述局部调度包括 根据当前基本块内指令间的依赖关系,获取局部备选指令集合和局部相关指令集合; 根据所述局部相关指令集合查找与所述局部备选指令集合中各指令元素存在于同一指令并行包的指令元素,构成局部相关指令子集合; 根据目标体系结构结构下指令延迟槽的数目、所述局部备选指令集合和所述集合中的指令数目、以及所述局部相关指令子集合,从所述局部备选指令集合中选取指令填充入指令延迟槽。
3.根据权利要求I所述的调度方法,其特征在于,在将可填充入指令延迟槽但开销较大的指令放入局部备选指令缓存之前,还包括 删除所述局部备选指令集合中不能使性能提高的指令。
4.根据权利要求权I所述的调度方法,其特征在于,所述对分支目标基本块内指令进行全局调度,选取可填充入指令延迟槽的指令放入全局备选指令缓存进一步包括 根据分支目标基本块内指令间的依赖关系,获取全局备选指令集合和全局相关指令集合; 根据所述全局相关指令集合查找与所述全局备选指令集合中指令元素存在于相同指令并行包的指令元素,构成全局相关指令子集合; 根据当前剩余延迟槽的数目、所述全局备选指令集合和所述集合中的指令数目、以及所述全局相关指令子集合,从所述全局备选指令集合中选取可填充入指令延迟槽的指令放入全局备选指令缓存。
5.根据权利要求4所述的调度方法,其特征在于,从所述备选指令集合中选取可以填充入指令延迟槽的指令放入全局备选指令缓存之前,还包括 删除所述全局备选指令集合中不能使性能提高的指令。
6.根据权利要求I所述的调度方法,其特征在于,从所述局部备选指令缓存和/或所述全局备选指令缓存中选取指令填充入所述剩余指令延迟槽进一步包括 判断所述局部备选指令缓存是否为空,如果是,则从所述全局备选指令缓存中选取指令填充入指令延迟槽,否则从所述局部备选指令缓存和所述全局备选指令缓存中选取性能最优的指令填充入剩余指令延迟槽。
7.根据权利要求I至6中任一权利要求所述的调度方法,其特征在于,所述指令是汇编指令。
8.一种超长指令字结构下延迟槽调度系统,其特征在于包括 局部调度单元,用于对当前基本块内指令进行局部调度,所述局部调度完成后判断是否有剩余指令延迟槽,若没有,则调度结束;否则将可填充入指令延迟槽但开销较大的指令放入局部备选指令缓存; 全局调度单元,用于对分支目标基本块内指令进行全局调度,选取可填充入指令延迟槽的指令放入全局备选指令缓存 ; 平衡调度单元,用于从所述局部备选指令缓存和/或所述全局备选指令缓存中选取指令填充入所述剩余指令延迟槽。
全文摘要
本发明公开了一种超长指令字结构下延迟槽调度方法及其系统。该调度方法包括对当前基本块内指令进行局部调度,所述局部调度完成后判断是否有剩余指令延迟槽,若没有,则调度结束;否则将可填充入指令延迟槽但开销较大的指令放入局部备选指令缓存;对分支目标基本块内指令进行全局调度,选取可填充入指令延迟槽的指令放入全局备选指令缓存;从所述局部备选指令缓存和/或所述全局备选指令缓存中选取指令填充入所述剩余指令延迟槽。该调度系统包括局部调度单元、全局调度单元和平衡调度单元。本发明通过延迟槽调度和程序并行性度之间的权衡,局部调度和全局调度之间的权衡,从而使程序获得更高的执行效率。
文档编号G06F9/38GK102880449SQ20121034770
公开日2013年1月16日 申请日期2012年9月18日 优先权日2012年9月18日
发明者朱浩, 彭楚, 王东辉, 洪缨, 侯朝焕 申请人:中国科学院声学研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1