依据确定延迟的动态vliw指令调度方法

文档序号:6420312阅读:133来源:国知局
专利名称:依据确定延迟的动态vliw指令调度方法
技术领域
本发明涉及微处理器设计中指令调度方法,尤其是VLIW(超长指令字,Very Long Instruction Word)微处理器设计中的动态指令调度方法。
背景技术
微处理器设计中指令调度既可以在编译时由编译器静态完成,也可以在运行时由硬件机制动态完成,这两种方法各有利弊。一般说来,静态方法的所有调度工作都由编译器完成,仅需要很少甚至不需要额外的硬件,缺点是无法有效处理运行时产生的动态延迟(如分支转移或访问存储器造成的延迟),性能受到一定的限制,其典型代表是VLIW微处理器,例如MultiFlow公司的MultiFlow微处理器;动态方法则能够充分利用运行时的信息调度指令执行,较好地减少由于分支和访存操作引起的延迟,缺点是需要复杂硬件机制的支持,硬件成本高,超标量结构是其代表,例如Intel公司的X86系列微处理器。
研究表明,目前超标量微处理器的性能已经趋于极限,而VLIW微处理器表现出良好的性能优势和发展前景,成为当今体系结构研究和微处理器设计的热点。VLIW结构将多条指令的操作打包,形成一条非常长的指令,同一VLIW指令中的各个操作可以并行执行,VLIW由此得名。VLIW结构采用多个独立的功能单元,以并行执行指令中的各个操作,选择同时可流出的多条指令的任务由编译器完成。但现在的VLIW微处理器仍无法充分利用运行时信息消除动态延迟,同时还存在严重的二进制代码兼容问题。现有技术如分离流出机制(Split-Issue)和DISVLIW(Dynamically Instruction ScheduledVLIW,动态调度VLIW)都不能将硬件指令调度机制和VLIW结构很好地融合,虽然一定程度上解决了二进制代码兼容问题,但硬件机制很大程度上在重复编译器的工作,且设计复杂度很高,性能却得不到有效提高。如何用简单的硬件机制实现VLIW指令动态调度是亟待解决的一个关键问题。

发明内容
本发明的目的是解决VLIW微处理器无法有效利用运行时信息消除动态延迟和二进制代码兼容问题,克服现有技术中硬件机制大量重复编译器工作,设计复杂度高但却无法有效提高性能的缺点,将硬件指令调度机制结合在VLIW结构之中,提高VLIW结构的动态延迟容忍能力,并利用VLIW编译器开发的并行性降低硬件复杂度,提高VLIW微处理器的性能,消除动态延迟并解决二进制代码兼容问题。
本发明的技术方案是根据统计信息为VLIW指令中各种类型的操作指定确定的执行延迟,将各寄存器的最早可用时间进行保存;运行时根据各寄存器的最早可用时间确定各操作的执行时间,根据操作延迟确定其执行结束时间;同时利用VLIW编译器的优化结果保证同一VLIW指令中的多个操作之间不存在任何相关,可以同时检测多个操作的执行时间而不必检测它们之间是否相关,降低硬件复杂度。目前国内外尚无采用这种方法动态调度VLIW指令的报道。
具体方案是整个VLIW微处理器系统包括流水线核、Cache系统、存储控制器和存储器四个部分流水线核负责执行指令,并将执行结果写回存储器,它通过指令/数据总线和地址总线与Cache系统连接;Cache系统是保存指令和数据的高速缓存,由指令Cache和数据Cache两部分组成;存储控制器提供了存储器与Cache系统的接口,当流水线核所需的指令或数据不在Cache中时,存储控制器负责将指令或数据从存储器中读入Cache;存储器保存指令和数据。Cache系统、存储控制器和存储器这三个模块之间通过指令总线、数据总线和地址总线连接。
将流水线核分为前端和后端。前端包括取指令模块、指令译码模块和指令分派模块三个模块,负责从存储器取指令,将取来的指令译码,并根据译码结果确定指令中各操作的执行时间;后端包括执行操作的功能单元(FunctionUnit,FU)和再定序缓冲(Reorder Buffer,ROB)两个模块,负责执行操作并对操作的执行结果进行确认。取指令模块通过指令总线和地址总线与指令Cache连接,负责从指令Cache中取指令;指令译码模块中有VLIW译码器,与取指令模块通过指令总线连接,对指令进行译码,根据译码得到的操作类型确定操作的延迟,根据RAT中记录的信息确定操作的最早可执行时间;指令分派模块包括寄存器可用时间表(Register Available Table,RAT)和功能单元选择器(Function Unit Selector,FUS),RAT表记录每个寄存器的最早可用时间,FUS根据译码结果将各个操作分派到不同的功能单元执行,确定操作的最早执行时间,并根据操作延迟修改RAT中对应寄存器(如果有的话)的最早可用时间。后端的功能单元包括ALU单元、访存单元、浮点单元、分支单元,具体数量因不同微处理器的设计而异,可以同时执行多个操作,为了不妨碍其它指令的顺利译码,每个功能单元拥有一个指令队列,保存等待在该单元执行的所有操作;ROB保存操作的执行结果并按照取指令的顺序对操作的执行结果进行确认,将得到确认的结果写回寄存器或存储器,丢弃其余的结果,同时作废各指令队列中所有等待使用该结果的操作。
本发明的执行过程是1.取指令模块从指令Cache中取VLIW指令,并为每条指令在再定序缓冲ROB中分配一项保存指令执行结果,记录该项的序号I,由I唯一地标识每条指令。
2.指令译码模块对VLIW指令译码,根据指令中每个操作的类型确定其延迟,根据RAT中记录的寄存器可用时间确定每个操作的最早执行时间,并为每个操作分配两个编号I和p,I标识操作所在的指令,p表示该操作在指令I中的位置,这样由<I,p>唯一地表示一个操作;确定操作延迟的方法为(a)对于Load操作,目前微处理器设计均采用多级存储层次构成复杂的存储系统,访问其中任何一级存储器失效都会影响其延迟,因此运行时Load操作的延迟并非固定值;模拟测试统计结果表明,当Load操作的延迟指定为访问数据Cache命中的延迟时效果最好,因此本发明也采用这一假设,将Load操作的延迟指定为访问数据Cache命中的延迟,为一个时钟周期。
(b)对于Store操作,其运行时延迟也不确定,但Store操作没有目的寄存器,因此不会影响其它类型指令的执行。目前微处理器均采用写缓冲机制,能够将Store操作的延迟缩短为一个时钟周期,因此本发明假定其延迟为一个时钟周期。
(c)对于其它所有类型的操作,延迟都是确定值,在微处理器流水线设计确定后即已确定。
3.对于VLIW指令中的每个操作,前端的指令分派模块根据译码模块得到的操作类型确定所有能够执行该操作的功能单元,确定该操作在每个功能单元上的最早执行时间,将该操作分派到能够最早执行该操作的功能单元上执行,同时修改RAT中该操作目的寄存器(如果有的话)的最早可用时间。确定操作在每个功能单元上的最早执行时间的方法为对于每个功能单元,根据译码得到的该操作最早执行时间确定它在该功能单元指令队列中的位置,如果该位置已被其它操作占用,则向后寻找第一个空位放入该操作;为了避免因等待某些长延迟指令执行结束而引起的流水线停顿,指令队列的长度设定为所有操作的最长延迟数。
4.每个时钟周期流水线后端的功能单元检测位于其指令队列头部的操作执行所需的源操作数是否均已准备就绪,是则执行该操作,否则等待;5.再定序缓冲根据取指令顺序依次确认每条指令中各操作的执行结果,并将被确认的结果写回寄存器或存储器;如果某个操作的结果被作废,则清空指令队列中所有等待该操作结果的操作。
由以上执行过程可知,本发明能够在译码结束后根据运行时信息动态调整VLIW指令中各操作的执行时间,并确定其执行结束时间,实现动态指令调度。
采用本发明可以达到以下技术效果(1)硬件实现复杂度低、功耗低。与传统的动态指令调度技术相比,本发明利用RAT记录各寄存器的最早可用时间,对于每个操作,指令分派单元根据RAT中的信息确定该操作的最早执行时间,并将其放入能够最早执行它的功能单元等待队列中,这样可以避免使用复杂的相关检测机制,例如指令窗口。同时VLIW编译器保证同一VLIW指令中的各个操作之间不存在任何相关,可以同时处理多个操作而不必检测这些操作之间是否存在相关,避免了使用复杂的指令相关检测硬件,操作的执行时间完全由其类型确定,大大降低了硬件实现的难度和复杂度。
(2)大幅度提高了VLIW微处理器的性能。采用本发明动态指令调度方法,VLIW微处理器能够根据运行时动态产生的流水线延迟重新确定指令的执行顺序,有效消除了这些延迟对流水线性能的不利影响,提高了VLIW微处理器的性能。
(3)指令分派单元能够在运行时根据微处理器中功能单元的实际数量和延迟重新确定操作的执行时间,并将其分派到各个功能单元执行,解决了VLIW结构面临的二进制代码兼容问题。
(4)每个功能单元都拥有一个指令队列,用于保存等待在该功能单元上执行的指令,这样可以避免妨碍其它指令的正常译码。指令队列的长度设定为所有操作的最长延迟数,避免了因等待某些长延迟指令执行结束而引起的流水线停顿。
本发明能够充分利用VLIW编译器的并行性开发结果,使用简单的指令调度机制动态确定操作的执行时间,提高VLIW微处理器性能,并有效地解决了VLIW结构面临的二进制代码兼容问题。
采用系统性能评测协会(System Performance Evaluation CooperativeConsortium)提供的SPECint95基准程序组以及Unix核心基准程序组进行测试,在每条指令含有4个操作的VLIW模拟器中模拟本发明时,能够获得平均2.217的IPC(平均每周期执行指令数,Instructions per Cycle)。


图1是本发明的动态VLIW微处理器逻辑框图。
图2是本发明的动态VLIW微处理器流水线核逻辑框图。
图3是本发明的动态指令调度机制的逻辑框图。
图4是本发明的动态指令调度机制性能测试结果图。
具体实施例方式图1是本发明的动态VLIW微处理器系统逻辑框图。整个VLIW微处理器系统包括流水线核、Cache系统、存储控制器和存储器四个部分流水线核负责执行指令,并将执行结果写回存储器,它通过指令/数据总线和地址总线与Cache系统连接;Cache系统是保存指令和数据的高速缓存,由指令Cache和数据Cache两部分组成;存储控制器提供了存储器与Cache系统的接口,当流水线核所需的指令或数据不在Cache中时,存储控制器负责将指令或数据从存储器中读入Cache;存储器保存指令和数据。Cache系统、存储控制器和存储器这三个模块之间通过指令总线、数据总线和地址总线连接。
图2是本发明的动态VLIW微处理器流水线核逻辑框图。流水线核分为前端和后端(用虚线圈出),前端包括取指令模块、指令译码模块、指令分派模块,这三个模块之间通过内部总线连接。取指令模块负责取指令并通过内部总线将指令送往指令译码模块,指令译码模块的译码器对指令译码并将译码结果通过内部总线送往指令分派模块,译码结果包括操作类型、操作延迟、操作的源寄存器和目的寄存器,指令分派模块根据译码结果将指令中的操作分派到后端各功能单元FU1~FUn的等待队列IQ中;后端使用多个独立的功能单元,能够同时执行多个操作,执行结果暂存在再定序缓冲ROB中,由再定序缓冲进行确认,得到确认的结果将被写回存储器或寄存器,其余结果将被作废。
图3是本发明VLIW微处理器流水线核内动态指令调度逻辑示意图。动态指令调度逻辑由指令译码模块、指令分派模块、指令执行模块等三个模块组成指令译码模块包括VLIW译码器,与取指令模块通过内部总线连接,负责指令译码,并根据译码得到的操作类型确定VLIW指令中每个操作的延迟,根据RAT中记录的寄存器可用时间确定每个操作的最早执行时间。为了顺序确认操作的执行结果,它还为每个操作分配两个编号I和p,I为指令标识,p为操作在指令中的位置,I和p能够唯一地表示每个操作。
指令分派模块包括寄存器可用时间表RAT和功能单元选择器FUS,负责根据指令译码结果确定VLIW指令中各操作的最早执行时间,以及其目的寄存器的最早可用时间,并将操作放入对应功能单元的等待队列中。RAT采用与寄存器文件相同的结构,记录一个物理寄存器的最早可用时间。FUS通过内部总线与RAT连接,将寄存器的最早可用时间写入RAT。
指令执行模块包括功能单元和再定序缓冲ROB,通过内部数据总线相互连接,负责执行操作并将确认后的执行结果写回寄存器或存储器,其中功能单元负责执行操作,再定序缓冲负责结果确认。ROB采用与寄存器文件相同的结构,记录的信息包括操作标识I和p、操作执行结果。
图4是本发明的动态指令调度机制性能测试结果图,比较了本发明与其它两种动态指令调度机制DL1和DL6的性能,DL1和DL6分别表示假定Load操作延迟分别为1和6时的动态指令调度机制。纵轴为IPC(平均每周期执行指令数,Instructions per Cycle),横轴为其它动态指令调度机制所用的指令窗口大小。采用系统性能评测协会(System Performance Evaluation CooperativeConsortium)提供的SPECint95基准程序组以及Unix核心基准程序组进行测试,选用的基准程序包括SPECint95中的li、compress和m88ksim,以及Unix中的lex.c、wc.c和grep.c。在每条指令含有4个操作的VLIW模拟器中模拟本发明时,能够获得平均2.217的IPC(平均每周期执行指令数,Instructions perCycle)。
权利要求
1一种依据确定延迟的动态VLIW指令调度方法,其VLIW微处理器系统包括流水线核、Cache系统、存储控制器和存储器,流水线核负责执行指令,并将执行结果写回存储器,它通过指令/数据总线和地址总线与Cache系统连接;Cache系统是保存指令和数据的高速缓存,由指令Cache和数据Cache两部分组成;存储控制器提供了存储器与Cache系统的接口,当流水线核所需的指令或数据不在Cache中时,存储控制器负责将指令或数据从存储器中读入Cache;存储器保存指令和数据;Cache系统、存储控制器和存储器这三个模块之间通过指令总线、数据总线和地址总线连接;其特征在于将流水线核分为前后两端,前端包括取指令模块、指令译码模块、指令分派模块FUS,负责从存储器取指令,将取来的指令译码,并根据译码结果确定指令中各操作的执行时间;后端包括执行操作的功能单元FU和再定序缓冲ROB两个模块,负责执行操作并对操作的执行结果进行确认;取指令模块通过指令总线和地址总线与指令Cache连接,负责从指令Cache中取指令;指令译码模块中有VLIW译码器,与取指令模块通过指令总线连接,对指令进行译码,根据译码得到的操作类型确定操作的延迟,根据RAT中记录的信息确定操作的最早可执行时间;指令分派模块包括寄存器可用时间表RAT和功能单元选择器FUS,RAT表记录每个寄存器的最早可用时间,FUS根据译码结果将各个操作分派到不同的功能单元执行,确定操作的最早执行时间,并根据操作延迟修改RAT中对应寄存器的最早可用时间;后端的功能单元包括ALU单元、访存单元、浮点单元、分支单元,每个功能单元拥有一个指令队列,保存等待在该单元执行的所有操作;ROB保存操作的执行结果并按照取指令的顺序对操作的执行结果进行确认,将得到确认的结果写回寄存器或存储器,丢弃其余的结果,同时作废各指令队列中所有等待使用该结果的操作。
2根据权利要求1所述的依据确定延迟的动态VLIW指令调度方法,其特征在于利用所述流水线核进行动态指令调度的具体执行过程是2.1取指令模块从指令Cache中取VLIW指令,并为每条指令在再定序缓冲ROB中分配一项保存指令执行结果,记录该项的序号I,由I唯一地标识每条指令;2.2指令译码模块对VLIW指令译码,根据指令中每个操作的类型确定其延迟,根据RAT中记录的寄存器可用时间确定每个操作的最早执行时间,并为每个操作分配两个编号I和p,I标识操作所在的指令,p表示该操作在指令I中的位置,这样由<I,p>唯一地表示一个操作;2.3对于VLIW指令中的每个操作,指令分派模块根据译码模块得到的操作类型确定所有能够执行该操作的功能单元,确定该操作在每个功能单元上的最早执行时间,将该操作分派到能够最早执行该操作的功能单元上执行,同时修改RAT中该操作目的寄存器的最早可用时间;2.4每个时钟周期流水线后端的功能单元检测位于其指令队列头部的操作执行所需的源操作数是否均已准备就绪,是则执行该操作,否则等待;2.5再定序缓冲ROB根据取指令顺序依次确认每条指令中各操作的执行结果,并将被确认的结果写回寄存器或存储器;如果某个操作的结果被作废,则清空指令队列中所有等待该操作结果的操作。
3根据权利要求1或2所述的依据确定延迟的动态VLIW指令调度方法,其特征在于所述根据指令中每个操作的类型确定操作延迟的方法是3.1将Load操作的延迟指定为访问数据Cache命中的延迟,为一个时钟周期;3.2将Store操作的延迟假定为一个时钟周期;3.3对于其它所有类型的操作,延迟都是确定值,在微处理器流水线设计确定后即已确定。
4根据权利要求1或2所述的依据确定延迟的动态VLIW指令调度方法,其特征在于所述确定操作在每个功能单元上的最早执行时间的方法为对于每个功能单元,根据译码得到的该操作最早执行时间确定它在该功能单元指令队列中的位置,如果该位置已被其它操作占用,则向后寻找第一个空位放入该操作;且指令队列的长度设定为所有操作的最长延迟数以避免因等待某些长延迟指令执行结束而引起的流水线停顿。
全文摘要
本发明公开了一种依据确定延迟的动态VLIW指令调度方法,目的是解决VLIW微处理器无法消除动态延迟和二进制代码兼容问题。技术方案是将流水线核分为前端和后端,前端包括取指令模块、指令译码模块和指令分派模块,后端包括FU和ROB,根据统计信息为VLIW指令中各种操作指定确定的执行延迟,将各寄存器的最早可用时间进行保存;运行时根据各寄存器的最早可用时间确定各操作的执行时间,根据操作延迟确定其执行结束时间;同时利用VLIW编译器的优化结果保证同一VLIW指令中的多个操作之间不存在任何相关。本发明利用VLIW编译器的并行性开发结果,使用简单的指令调度机制动态确定操作的执行时间,提高微了微处理器性能,并解决了二进制代码兼容问题。
文档编号G06F9/38GK1545026SQ20031011056
公开日2004年11月10日 申请日期2003年11月26日 优先权日2003年11月26日
发明者王志英, 沈立, 戴葵, 张春元, 鲁建壮, 李云照, 陆洪毅, 王蕾, 王进 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1