流水线控制相关延迟消除方法

文档序号:6565224阅读:1024来源:国知局
专利名称:流水线控制相关延迟消除方法
技术领域
本发明涉及微处理器设计中流水线控制相关延迟的消除方法,尤其是要求功耗低、硬件实现简单的嵌入式微处理器设计中流水线控制相关延迟的消除方法。
背景技术
目前,微处理器设计中消除流水线控制相关延迟的方法大致可以分为两类,即分支预测和延迟分支方法。分支预测方法主要利用程序运行时的局部性原理,根据分支指令执行结果的统计信息预测下次分支转移是否成功。分支预测的效果不仅取决于其准确性,而且与分支预测时的开销密切相关。流水线控制相关延迟取决于流水线的结构、预测的方法和预测错误后恢复所采取的策略。这种方法的不足之处在于,预测需要大量的硬件支持,例如预测表和预测错误后的恢复部件等,实现开销大、功耗高。延迟分支方法的主要思想是在控制相关暂停周期内执行与分支指令无关的指令,从而掩盖该暂停周期。这种方法的不足之处在于,无法填充所有的分支延迟槽,同时无法保证被调度的指令总是必须要执行的,如果不是必须的,那么性能得不到真正提高。
嵌入式微处理器主要应用于家电、手机、微控制器等领域,要求功耗低,以上方法要么无法满足其功耗低、复杂度低的要求,要么控制相关延迟消除率低,无法充分提高其性能。即使在通用微处理器设计中,这些方法也无法高效率地消除流水线中的控制相关延迟。

发明内容
本发明所要解决的技术问题是在满足嵌入式微处理器硬件实现简单、功耗低的前提下,高效消除流水线控制相关延迟,提高微处理器性能。
本发明的技术方案是由编译模块中的编译器确定分支指令所有可能的转移目标地址并插入预取指令;在取指令模块中设计两个取指令部件提前读入当前分支指令的所有可能的后继指令;在指令译码和执行模块中设计一个选择器,由选择器根据对当前分支指令的译码结果选择一个取指令部件提供的指令交指令译码部件和指令执行部件进行译码和执行,从而消除流水线控制相关延迟。目前国内外尚无采用这种方法进行流水线控制相关延迟消除的报道。
本发明涉及到八个名词流水线、分支指令、流水线相关、控制相关、控制相关延迟、指令预取、预取指令、基本块,它们的定义是(1)流水线将微处理器的指令执行过程分解成若干个子过程,每个子过程都可以有效地在其专用功能段上与其他子过程同时执行,这就是指令执行的流水技术。流水线是流水技术的具体实现。在不同的微处理器设计中,流水线具体被分为多少个阶段也不相同。一般流水线都包括5个阶段取指、译码、执行、访存、写回。
(2)分支指令改变程序计数器值的所有指令统称为分支指令,它包括四类条件转移指令、直接无条件转移指令、间接无条件转移指令和函数、过程返回指令(例如retum语句)。
(3)流水线相关由于指令间的相互依赖关系造成的流水线停顿称为流水线相关。
(4)控制相关由于分支指令引起的流水线相关叫控制相关。
(5)控制相关延迟因为控制相关引起的流水线暂停时钟周期数就是控制相关延迟。
(6)指令预取在指令被执行之前提前将指令从存储器中取出的操作称为指令预取。
(7)预取指令负责完成预取的指令称为预取指令。
(8)基本块程序的基本组成单元,它只有一个入口(即基本块的第一条语句)和一个出口(即基本块的最后一条语句),一个基本块至少含有两条指令,基本块的出口为分支指令,一个程序总是可以划分成若干个基本块。
本发明的执行过程是1.由编译模块中的编译器确定分支指令所有可能的转移目标地址并插入预取指令;2.当程序开始运行时,取指令模块中,一个取指令部件读入第一个基本块,另一个取指令部件空闲。对于程序中的每一个基本块(a)负责读入该基本块的取指令部件依次读入基本块中的每一条指令,并判断它是否为预取指令。如果当前被读入的指令为预取指令,则将预取指令发送给另一个取指令部件,由它执行该预取指令;否则将指令发送给指令译码和执行模块中的译码部件进行译码。
(b)当基本块的最后一条指令即分支指令译码结束后,指令译码和执行模块中的选择器根据译码结果选择一个取指令部件中的基本块作为当前基本块的后继基本块1)假设两个取指令部件分别为IF0和IF1,当前正在执行IF0中的指令,IF1则执行预取指令,预取当前基本块的后继目标指令。当指令顺序执行,即结束译码的指令不是分支指令或转移条件为False的分支指令时,选择IF0中的指令进行译码;当执行分支指令时,即结束译码的指令是转移条件为True的分支指令时,选择IF1中的指令进行译码。
2)如果当前流水线正在执行IF1中的指令,选择策略正好相反,即如果指令依照程序顺序执行,即结束译码的指令不是分支指令或转移条件为False的分支指令时,选择IF1中的指令进行译码;当执行分支指令时,即结束译码的指令是转移条件为True的分支指令时,选择IF0中的指令进行译码。
因此,在程序运行过程中,一个取指令部件负责为指令执行部件提供指令,另一个取指令部件负责完成指令预取,两个取指令部件并行工作,使得当分支指令译码结束时,所有可能的分支目标指令已经分别保存在两个取指令部件中。
与一般编译器相比,本发明的编译器增加了两项特殊功能确定分支指令所有可能的转移地址并根据不同类型的分支指令向基本块中插入预取指令。编译器插入预取指令的流程是编译程序依次读出程序代码中的每一条指令,当遇到分支指令时,表示到达当前基本块的末尾,根据分支指令的类型在该分支指令所在基本块的第一条指令之后插入相应的预取指令。
分支指令分为四类,本发明根据它们的不同情况设计了三条预取指令对应不同的分支指令。三条预取指令是fetch addr1,addr2、fetchaddr、fetch stack。
(1) 条件分支指令转移可能成功也可能失败,有两个后继基本块,应同时预取当前基本块的两个后继基本块。有两个可能的转移地址,一个保存在指令中,另一个是该指令之后那条指令的地址。此时在该分支指令所在基本块的第一条指令之后插入预取指令fetch addr1,addr2,预取从地址addr1和addr2开始的两个基本块。addr1由该分支指令译码得到,addr2是该指令之后的指令地址,其值为分支指令地址加指令长度(单位为字节)。
(2) 直接无条件分支指令转移总是成功,只有一个后继基本块,在编译时可以获得转移目标地址,预取目标基本块即可。
只有一个可能的转移地址,保存在指令中。此时在该分支指令所在基本块的第一条指令之后插入预取指令fetch addr,预取从地址addr开始的基本块。addr由该分支指令译码得到。
(3) 间接无条件分支指令转移总是成功,但由于转移目标地址保存在寄存器中,通常在编译时无法得到,对于这类分支指令,不进行处理。
(4) 过程返回语句转移总是成功,只有一个后继基本块,这类语句通常出现在过程调用返回时,由于过程调用可能出现嵌套,本发明用一个栈来保存过程调用的返回地址(即预取地址),每次过程调用时将返回地址保存在栈顶单元,预取时从栈顶单元中获得预取地址。此时在该过程返回指令所在基本块的第一条指令之后插入预取指令fetch stack,预取从栈顶单元地址开始的基本块。
与其他指令不同,预取指令由取指令部件执行。不同的RISC(精简指令集计算)指令集对应的预取指令的编码可能有所不同,但只要实现本发明相同的功能,都属于本发明保护范围。预取以基本块为单位进行,除了当条件分支指令转移失败时预取的一部分后继指令外,所预取的指令都将被执行。
如果在分支指令译码结束前所有可能的目标指令已被读入,就可以根据分支指令译码结果选择正确的后继指令进行译码和执行。采用系统性能评测协会(System Performance Evaluation CooperativeConsortium)提供的SPECint95基准程序组进行测试,在FastDLX模拟器(标准的CPU模拟器)中实现本发明时,如果不考虑间接无条件分支指令(这类指令在程序中所占的比率比较低),在分支指令译码结束后分支目标指令已被读入的机率达99.3%;如果考虑间接无条件分支指令,在分支指令译码结束后分支目标指令已被读入的机率达93%。
本发明具有以下优点(1) 硬件实现复杂度低、功耗低。与分支预测技术相比,本发明省去了复杂的分支预测硬件和预测错误时的恢复硬件,仅仅使用了简单的控制逻辑部件,大大降低了硬件实现的难度和复杂度。
(2) 控制相关延迟消除率高。本发明直接根据分支指令的译码结果选择分支目标指令,指令预取保证了当分支指令译码结束后绝大多数指令都已被读入,从而消除了绝大多数控制相关延迟。
(3) 预取以基本块为单位进行,在执行当前基本块的同时预取它的所有后继基本块,使得预取操作发出时间早,保证了有充足时间完成预取;同时,除了条件分支指令转移失败时预取的一部分后继指令外,所预取的指令都是将要被执行的,有效地减少了无效预取数。
本发明在满足嵌入式微处理器硬件实现简单、功耗低的前提下,实现了高效消除流水线控制相关延迟,提高微处理器性能的目的。本发明也可应用在通用微处理器设计中。


图1是本发明编译器插入预取指令的流程图;图2是本发明总体逻辑结构图;图3是一般微处理器非分支指令在5级流水线中的时空图;图4是一般微处理器分支指令在5级流水线中的时空图;图5是采用本发明后分支指令在5级流水线中的时空图;图6是采用本发明针对SPECint95基准程序的测试结果;图7是采用本发明和其它控制相关延迟消除方法的性能比较。
具体实施例方式图1为本发明编译器插入预取指令的流程图。编译程序依次读出程序代码中的每一条指令,当遇到分支指令时,表示到达当前基本块的末尾,根据分支指令的类型在该分支指令所在基本块的第一条指令之后插入相应的预取指令,程序最后总是一条过程返回语句,因此编译时总能遇到分支指令。
图2是本发明的总体逻辑结构图。它由编译模块、取指令模块、指令译码和执行模块组成编译模块主要负责确定分支指令所有可能的转移地址并根据分支指令的类型插入预取指令。编译器依次读取源程序中的每一条指令,如果该指令为分支指令,则根据分支指令的类型向它所在基本块的第一条指令之后插入相应的预取指令。具体方法为对于条件分支指令,有两个后继基本块,相应的预取地址有两个,插入预取指令fetchaddr1,addr2,其中addr1由该分支指令译码得到,addr2是该指令之后的指令地址,其值为分支指令地址加指令长度(单位为字节);对于直接无条件分支指令,只有一个后继基本块,相应的预取地址有一个,插入预取指令fetch addr,其中addr由指令译码得到;过程返回语句,有一个后继基本块,相应的预取地址有一个,保存在栈顶单元中,插入预取指令fetch stack。编译后的程序代码保存在存储器中。
取指令模块主要负责为指令译码和执行模块提供指令,并进行指令预取,其功能通过两个取指令部件完成。取指令部件IF0通过端口0从指令Cache中读指令,取指令部件IF1则通过端口1从指令Cache中读指令。在程序开始运行时,选择IF0提供的指令进行译码和执行,IF1空闲,当IF0读入预取指令后,将其转发给IF1,由IF1完成预取;在程序运行过程中,哪个取指令部件进行取指令,哪个取指令部件进行指令预取应根据分支指令的译码结果确定如果IF0负责取指令,IF1负责指令预取,结束译码的指令不是分支指令或者是转移失败的分支指令,那么二者操作不变,否则IF1负责取指令,IF0负责指令预取;如果IF1负责取指令,IF0负责指令预取,结束译码的指令不是分支指令或者是转移失败的分支指令,那么二者操作不变,否则IF0负责取指令,IF1负责指令预取。
指令译码和执行模块主要负责指令的译码和执行,被译码和执行的指令由取指令模块中的一个取指令部件提供,其中分支指令的译码结果被送往选择器和两个取指令部件,非分支指令的译码结果被送往指令执行部件进行执行。选择器负责根据分支指令的译码结果选择一个取指令部件提供的指令进行译码和执行,当程序开始运行时,它选择IF0中的指令译码和执行,在程序运行过程中,它根据分支指令的译码结果进行选择如果正在使用IF0中的指令,结束译码的指令不是分支指令或者是转移失败的分支指令,那么继续使用中IF0的指令,否则使用IF1中的指令;如果正在使用IF1中的指令,结束译码的指令不是分支指令或者是转移失败的分支指令,那么继续使用IF1中的指令,否则使用IF0中的指令。在指令执行过程中,如果发生过程调用,则将过程返回地址保存在栈顶单元中以便进行预取。
如图3,假设流水线分为5个阶段取指(IF)、译码(ID)、执行(EX)、访存(MEM)和写回(WB),指令p为在指令i之后执行的第一条指令,指令p+1为在指令i之后执行的第二条指令,依次类推。由于i不是分支指令,那么在对它译码的同时,取指令部件将读取指令p,因此指令i的ID阶段与指令p的IF阶段重合,指令i的EX阶段与指令p的ID阶段重合,此时没有控制相关延迟。
如图4,指令i为分支指令,在与图3相同的流水线中,只有在指令i译码结束后,才能确定指令p的地址,指令i的EX阶段与指令p的IF阶段重叠,此时流水线有一个时钟周期的控制相关延迟。
如图5,假设指令I为分支指令,指令i1是分支转移失败时执行的指令,指令i2是分支转移成功时执行的指令,指令q为在分支指令后执行的第二条指令,指令q+1为在分支指令后执行的第三条指令,依此类推。采用本发明后,在指令i译码的同时,两个取指令部件将分别读取指令i1和i2,在指令i译码结束后即可根据译码结果选择指令i1或i2进行译码,指令i的EX阶段与指令i1或i2的ID阶段重合,消除了原有的控制相关延迟。
本发明已成功地在银河TS-1嵌入式微处理器IP核的流水线中实现,能有效消除流水线控制相关延迟,图6为采用SPECint95基准程序组测试得到的结果。图中,纵轴表示SPECint95基准程序组中的每个基准程序,横轴表示控制相关延迟消除率,gcc为88.80%,ijpeg为83.32%,compress为88.55%,perl为88.69%,m88ksim为92.99%,li为85.09%,vertex为87.47%,go为86.16%,流水线控制相关延迟的平均消除率达到87.8%。
图7出了采用不同的控制相关延迟消除方法所得到的性能,其中CPI(cycle per instruction)表示执行一条指令所需的平均时钟周期数,条件分支延迟、无条件分支延迟和平均分支延迟的单位都是时钟周期(cycle)。其中,流水线暂停代表没有采用任何分支延迟消除技术的情况,双取指部件表示采用本发明的情况。采用本发明后,条件分支延迟降低到0.05,无条件分支延迟降低到0.09,平均分支延迟降低到0.06,有效CPI值降低到1.01,均远远低于采用其他方法得到的结果。
权利要求
1.一种流水线控制相关延迟消除方法,其总体逻辑结构包括编译模块、取指令模块、指令译码和执行模块,其特征在于由编译模块中的编译器负责确定分支指令所有可能的转移地址并根据分支指令的类型插入预取指令;取指令模块除了负责为指令译码和执行模块提供指令,还要进行指令预取,其功能通过两个取指令部件IF0和IF1完成;指令译码和执行模块中有一个选择器,负责根据当前分支指令的译码结果选择一个取指令部件提供的指令交指令译码部件和指令执行部件进行译码和执行;其执行过程是1)由编译模块中编译器确定分支指令所有可能的转移目标地址并插入预取指令;2)当程序开始运行时,取指令模块中一个取指令部件读入第一个基本块,另一个取指令部件空闲;对于程序中的每一个基本块(a)负责读入该基本块的取指令部件依次读入基本块中的每一条指令,并判断它是否为预取指令;如果当前被读入的指令为预取指令,则将预取指令发送给另一个取指令部件,由它执行该预取指令;否则将指令发送给译码部件进行译码;(b)当基本块的最后一条指令即分支指令译码结束后,指令译码和执行模块中的选择器根据分支指令译码结果选择一个取指令部件中的基本块作为当前基本块的后继基本块I.如果当前正在执行IF0中的指令,IF1则执行预取指令,预取当前基本块的后继目标指令;当指令顺序执行,即结束译码的指令不是分支指令或转移条件为False的分支指令时,选择IF0中的指令进行译码;当执行分支指令时,即结束译码的指令是转移条件为True的分支指令时,选择IF1中的指令进行译码;II.如果当前流水线正在执行IF1中的指令,选择策略正好相反,即如果指令依照程序顺序执行,即结束译码的指令不是分支指令或转移条件为False的分支指令时,选择IF1中的指令进行译码;当执行分支指令时,即结束译码的指令是转移条件为True的分支指令时,选择IF0中的指令进行译码。
2.根据权利要求1所述的流水线控制相关延迟消除方法,其特征在于所述编译器插入预取指令的流程是编译程序依次读出程序代码中的每一条指令,当遇到分支指令时,表示到达当前基本块的末尾,根据分支指令的类型在该分支指令所在基本块的第一条指令之后插入相应的预取指令。
3.根据权利要求1所述的流水线控制相关延迟消除方法,其特征在于所述预取指令是对应不同的分支指令设计的,它们包括fetchaddr1,addr2、fetch addr、fetch stack三种,不同的分支指令要使用不同的预取指令(1) 条件分支指令转移可能成功也可能失败,有两个后继基本块,应同时预取当前基本块的两个后继基本块;有两个可能的转移地址,一个保存在指令中,另一个是该指令之后那条指令的地址;此时在该分支指令所在基本块的第一条指令之后插入预取指令fetch addr1,addr2,预取从地址addr1和addr2开始的两个基本块;addr1由该分支指令译码得到,addr2是该指令之后的指令地址,其值为分支指令地址加指令长度;(2) 直接无条件分支指令转移总是成功,只有一个后继基本块,在编译时可以获得转移目标地址,预取目标基本块即可;只有一个可能的转移地址,保存在指令中;此时在该分支指令所在基本块的第一条指令之后插入预取指令fetch addr,预取从地址addr开始的基本块。addr由该分支指令译码得到;(3) 间接无条件分支指令转移总是成功,但由于转移目标地址保存在寄存器中,通常在编译时无法得到,对于这类分支指令,不进行处理;(4) 过程返回语句转移总是成功,只有一个后继基本块,这类语句通常出现在过程调用返回时,由于过程调用可能出现嵌套,本发明用一个栈来保存过程调用的返回地址(即预取地址),每次过程调用时将返回地址保存在栈顶单元,预取时从栈顶单元中获得预取地址;此时在该过程返回指令所在基本块的第一条指令之后插入预取指令fetch stack,预取从栈顶单元地址开始的基本块。
4.根据权利要求1所述的流水线控制相关延迟的消除方法,其特征在于所述指令预取以基本块为单位进行,除了条件分支指令转移失败时预取的一部分后继指令外,所预取的指令都将被执行。
全文摘要
本发明公开了一种流水线控制相关延迟消除方法,其目的是在满足硬件实现简单、功耗低的前提下,高效消除流水线控制相关延迟,提高微处理器性能。技术方案是:由编译器确定分支指令所有可能的转移目标地址并插入预取指令;由两个取指令部件提前读入当前分支指令的所有后继指令,并由选择器根据对当前分支指令的译码结果选择一个取指令部件提供的指令进行译码和执行。预取指令有fetch addr1,addr2、fetch addr、fetch stack三条,它们对应不同的分支指令,由取指令部件执行。指令预取以基本块为单位。本发明硬件实现复杂度低、功耗低,控制相关延迟消除率高,无效预取指令数少。采用本发明设计的微处理器有极高性能价格比。
文档编号G06F9/38GK1349160SQ01131569
公开日2002年5月15日 申请日期2001年11月28日 优先权日2001年11月28日
发明者戴葵, 王志英, 沈立, 王蓉晖, 王蕾, 张春元, 王明仕, 刘芳 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1