基于缓冲的流水线无停顿控制机制的制作方法

文档序号:6572211阅读:275来源:国知局
专利名称:基于缓冲的流水线无停顿控制机制的制作方法
技术领域
本发明主要涉及到流处理器的设计领域,特指一种基于缓冲的流水线无停顿控制机制。
背景技术
随着计算机应用的不断发展,对其性能要求日益提高,因而其各种结构日趋复杂。为了得到较好的流水性能,目前大多高性能处理器都采用多流水线技术;同时,为了得到极高的处理器工作频率,各流水线(尤其是运算流水线)深度流水。若采用传统的流水线停顿控制机制来控制这种并发深度流水线簇,则停顿控制信号stall的负载过重,从而造成流水线性能的下降,同时极有可能给后端布局布线带来长线延迟、长线驱动等长线问题。
在单流水处理器中,当某一站由于相关性等原因而出现异常情况时,生成一流水线停顿信号stall,以停止流水线中之前站的执行,流水线中之后的站则可继续流水直至流出;对于多发射处理器,根据多发射机制的不同,停顿信号所要停顿的流水站数也不一样,对于超标量与松相关性超长指令字多发射,可只需停顿之前的各流水站,对于紧相关性超长指令字处理器,则需要停顿整个流水线。待异常原因解除后,stall信号变为无效,流水线正常流水。若停顿原因持续x个时钟周期(在目前的微处理器设置中,x值的选取有一个公认的范围标准,1-64),则整个流水线产生x个时钟周期的性能损失。而由于stall信号的存在,极有可能由于其大负载、长线延迟而影响整个流水线的工作频率。
在一般的多流水处理器中,控制类流水线与运算类流水线分开且并发流水。运算类流水站所需要的控制信息由控制类流水线中相应站的前一站计算提供。若由于相关性等原因而出现异常情况,流水线控制信号stall除了要停顿运算类流水线中的流水站,还要停顿控制类流水线。stall信号解除后,两类流水线都正常流水。若停顿原因持续x个周期,则整个流水线也产生x个周期的性能损失。但此时流水线停顿信号stall的扇出比单流水处理器中tall的扇出要大一倍,负载过重,长线问题更严重。这不仅大大影响系统频率,而且长线中的中继器加大了硬件代价,增大了功耗。
因此,如何在保证流水线正确工作的前提下,得到最高的流水频率,同时确保较高的流水加速比,是高新处理器设计中一个值得进一步研究解决的问题。

发明内容
本发明要解决的技术问题就在于针对现有技术存在的技术问题,本发明提供一种在深度流水线中,能够有效避免信号负载过重同时保证较高流水线加速比的基于缓冲的流水线无停顿控制机制。
为解决上述技术问题,本发明提出的解决方案为一种基于缓冲的流水线无停顿控制机制,其特征在于在每个异常检测站设置一个指令缓冲堆栈,用来保存异常维持期间前端流水线所发射的指令的备份,该指令缓冲堆栈采用FIFO存取机制,宽度为其所缓冲的数据位宽,并使用单负载的作废信号与一指令缓冲堆栈来实现流水线的停顿,单负载的作废信号包括作废信号Cancel_1和作废信号Cancel_2(1)、当REG站的相关性检测逻辑检测到异常时,不生成stall停顿信号,运算类指令流水线与控制类指令流水线流水线都继续流水;此时处于EXE1至WB站之间的指令能得到正确的运算结果;而相关性发生时处于Fetch_1站至REG站之间以及异常维持期间尚未进入REG站的所以指令不能进入执行站,否则由于相关性原因会导致错误的计算结果;将这些指令的备份缓存在一个先进先出的指令缓冲堆栈中,待相关性解除后,再将这些指令备份从指令缓冲堆栈中取出送至各运算单元,从而继续流水线中的执行站;然而,由于FIFO有一定的深度限制,如果相关性是由load等长延迟指令引起的,则相关性原因解除之前FIFO极有可能满载溢出,因而生成一无效信号Inval,使前端里水线不继续取指,因此在EXEn站设置的作废信号Cancel_1对流水的最终结果进行取舍以决定运算结果是否提交,保证流水功能的正确性;(2)、当EXEn站的检测逻辑检测出浮点溢出等异常时,将指令地址给Fetch_1重新取指,同时将异常有效信号缓冲L(L=n+4)拍得到作废信号Cancel_2,该作废信号作用在EXEn站后的站间寄存器,将此时流水线中的所有指令的计算结果都作废不进行提交;当异常产生时处于Fetch_1中的指令被作废后,Cancel_2变回低无效;于是,该机制消除了大负载的清空信号,由单独一条作废信号线clear_2来确保流水线的正确重启。
当相关性引起的异常发生时,异常有效信号作为FIFO的写使能信号W_en,将Fetch_1站至REG站之间以及异常维持期间尚未进入REG站的所以指令的备份缓存在FIFO中,为了尽可能防止FIFO的溢出,可选择EXE1与WB之间的距离来确定FIFO的深度。
与现有技术相比,本发明的优点就在于1、本发明能够消除大负载问题。本发明用单负载多拍的作废信号替代单拍大负载的停顿信号实现停水流的停顿控制,从而消除了电路中的大负载问题;2、本发明能够有效缓解后端布线时的长线问题,提高流水线的工作频率。一方面,由于消除了流水线停顿信号,而用单独一条作废信号来实现流水线的停顿控制,因此用于实现流水线停顿的控制信号线的数目大大较少;另一方面,由于作废信号Cancel_1、Cancel_2从生成逻辑上讲都是将异常有效信号缓冲一定周期后得到的,缓冲器的存在可将长线长度减小数倍,从而有效地解决了后端布线的长线问题,提高流水线的工作频率;3、本发明能够维持尽可能高的流水加速比。在本发明中,当相关性、浮点溢出等原因引起的异常发生后,流水线性能的损失与传统的用停顿信号实现流水线停顿的控制机制一样,并没造成额外的性能损失,维持了尽可能高的流水线加速比。


图1是当相关性引起的异常发生时3种流水线控制机制比较示意图;图2是当浮点溢出引起的异常发生时3种流水线控制机制比较示意图;图3是本发明的基于缓冲的流水线无停顿控制机制实现框图。
具体实施例方式
本发明是一种基于缓冲的流水线无停顿控制机制,在每个异常检测站设置一个指令缓冲堆栈,用来保存异常维持期间前端流水线所发射的指令的备份,该指令缓冲堆栈采用FIFO存取机制,宽度为其所缓冲的数据位宽,并使用单负载的作废信号与一指令缓冲堆栈来实现流水线的停顿,单负载的作废信号包括作废信号Cancel_1和作废信号Cancel_2(1)、当REG站的相关性检测逻辑检测到异常时,不生成stall停顿信号,运算类指令流水线与控制类指令流水线流水线都继续流水;此时处于EXE1至WB站之间的指令能得到正确的运算结果;而相关性发生时处于Fetch_1站至REG站之间以及异常维持期间尚未进入REG站的所以指令不能进入执行站,否则由于相关性原因会导致错误的计算结果;将这些指令的备份缓存在一个先进先出的指令缓冲堆栈中,待相关性解除后,再将这些指令备份从指令缓冲堆栈中取出送至各运算单元,从而继续流水线中的执行站;然而,由于FIFO有一定的深度限制,如果相关性是由load等长延迟指令引起的,则相关性原因解除之前FIFO极有可能满载溢出,因而生成一无效信号Inval,使前端里水线不继续取指,因此在EXEn站设置的作废信号Cancel_1对流水的最终结果进行取舍以决定运算结果是否提交,保证流水功能的正确性;(2)、当EXEn站的检测逻辑检测出浮点溢出等异常时,将指令地址给Fetch_1重新取指,同时将异常有效信号缓冲L(L=n+4)拍得到作废信号Cancel_2,该作废信号作用在EXEn站后的站间寄存器,将此时流水线中的所有指令的计算结果都作废不进行提交;当异常产生时处于Fetch_1中的指令被作废后,Cancel_2变回低无效;于是,该机制消除了大负载的清空信号,由单独一条作废信号线clear_2来确保流水线的正确重启。当相关性引起的异常发生时,异常有效信号作为FIFO的写使能信号W_en,将Fetch_1站至REG站之间以及异常维持期间尚未进入REG站的所以指令的备份缓存在FIFO中,为了尽可能防止FIFO的溢出,可选择EXE1与WB之间的距离来确定FIFO的深度。
上述技术方案主要是取消负载过重的流水线停顿控制信号stall,用一单负载多拍的作废信号负责确保流水结果的正确性。对于相关性等原因引起的异常,流水线无需重启,因此无需停顿整条流水线,而只需将异常维持期间各指令信息的备份缓存在一先进先出(First In First Out)的缓冲堆栈中,待异常解除后,缓冲堆栈中的指令备份被取出并继续流水,同时生成一作用在写回站前的站间寄存器的作废信号Cancel_1,以决定流水线最终运算结果是否可以提交;对于浮点溢出等引起的异常,需重新启动流水线,为了避免负载过重与长线问题,本发明不采用清空整个流水线的方法,而设置一作废信号Cancel_2作用在写回站前的站间寄存器,将异常产生时处于流水线中的所有指令的计算结果作废,从而实现流水线的重启。这两种改动,不仅确保流水线计算结果的正确性,同时也确保了极高的流水频率和较高的流水加速比。
该种基于缓冲的流水线无停顿控制机制适合于流水线中相关性等异常的检测相对集中、且控制类指令与计算类指令分开、并发、深度流水的处理器。在本发明已成功应用于Yes64处理器,该处理器采用记分牌动态调度流水线技术,所有的相关性检查都在读寄存器站REG执行,且所有的浮点异常检测都集中在执行站的第八站EXE8进行。当然,这种基于缓冲的流水线无停顿控制机制也可应用于异常检测不是很集中的多流水线,只是需要一定的硬件资源代价。
本发明以其所基于的Yes64处理器为例,对该流水线无停顿控制机制进行说明。
本发明中对传统流水线停顿控制机制作了两处改动,即相关性等引起的流水线停顿控制机制与浮点溢出等引起的流水线停顿控制机制。这两种新的流水线控制机制都是基于同一种思想,即用单负载多拍的作废信号替代大负载单拍的停顿信号,从而解决由于大负载与长线问题,以提高流水线工作频率的,从而提高整个处理器的性能。为了便于描述,本发明对这两者分别进行说明。
在本发明中,由相关性原因引起的无停顿流水线控制机制中的指令缓冲堆栈结构为
与传统的相关性原因引起的流水线控制机制相比,本发明最显著的改变就是消除了由相关性所直接生成的大负载流水线停顿信号,而用一单负载的作废信号与一缓冲堆栈来实现流水线的停顿。相关性引起的异常发生后,流水线并不停顿,由于相关性的存在,异常解除之前,相关性检测逻辑所在站的之前站中的指令进入后面的流水线后得到的将是错误的运算结果。为了确保程序的正确执行,本发明在每个异常检测站设置一个指令缓冲堆栈,用来保存异常维持期间前端流水线所发射的指令的备份。该指令缓冲堆栈采用FIFO(First In First Out)存取机制,宽度为其所缓冲的数据位宽,深度则需综合考虑。一方面,从硬件代价与功耗角度看,指令缓冲堆栈深度越小越好。另一方面,如果指令缓冲堆栈深度太小,一旦指令缓冲堆栈满溢,则需要生一停顿信号停顿前面的流水站,或生成一无效信号使所读取的指令无效,不论哪种情况,都会造成信号的翻转,从而造成功耗的损失。这两反面的矛盾是一个NP问题,我们应综合考虑。
在本发明中,相关性原因引起的无停顿流水线控制机制中的作废信号Cancel_1为相关性引起的异常发生时,指令缓冲堆栈之后的流水站继续执行,这必然产生部分错误的结果,因此本发明设置一个作废信号Cancel_1,根据实际情况对流水结果进行取舍。在本发明的研究模型中,读寄存器站REG站与写回站WB之间还有8站,若异常维持时钟周期数为x,则异常产生后的8拍中,流水的最终结果是正确的,Cancel_1信号无效,流水线计算结果可以提交;而接下来的x条指令则由于相关性原因而导致错误的运算结果,Cancel_1信号有效,运算结果不能提交。x拍后指令正确流水,运算结果可以提交,Cancel_1信号也随之变为无效。
在本发明中,浮点溢出等原因引起的无停顿流水线控制机制中的作废信号Cancel_2为浮点溢出等异常产生后,整条流水线应重新启动,传统的方法是取指站从给定的新指令地址处重新取指,同时生成一清空信号将整条流水线清空。这将导致清空信号负载过重且潜在着严重的长线问题。为此,本发明针对该情况设置了一作用于写回站前站间寄存器的作废信号Cancel_2。当浮点溢出等异常产生时,Cancel_2有效,在此期间所有的最终运算结果都不能提交,直至异常时处于流水线中的指令的运算结果都被作废后,该作废信号方变为低电平,从而确保了整个流水线的正确重启。
以下将结合附图和具体实施例对本发明做进一步详细说明。
图1是当相关性引起的异常发生时3种流水线控制机制比较示意图。在传统的单流水线处理器中,当REG站的相关性检测逻辑检测到相关性引发异常时,生成一停顿信号stall将整个流水线停顿,待异常原因解除后再将stall信号使流水线正常流水,此时stall信号生成逻辑要驱动stall_1、stall_2直至stall_x等诸多信号,负载太多。另一方面,在深度流水线中,WB站与REG站相距甚远,信号线stall_x会给后端布线带来长线问题,影响整个流水线工作频率的提高。
在传统多流水超长指令字处理器中,运算类指令与控制类指令分开、并发流水,运算指令流水线中每一站所需的控制信息都由控制类指令流水线相应站的前一站提前准备好以保证运算的正确。控制信息的传送如图中传统多流水是以图中的斜虚箭头所示。当REG站的相关性检测逻辑检测到异常时,生成的停顿信号stall不仅要停顿运算类指令流水线,而且控制类指令流水线也要被停顿。因此,停顿信号的负载更大,stall_x、stall_x’等停顿信号线所导致的长线问题更严重。
而在本发明的基于缓冲的流水线控制机制中,当REG站的相关性检测逻辑检测到异常时,不生成stall停顿信号,运算类指令流水线与控制类指令流水线流水线都继续流水。此时处于EXE1至WB站之间的指令能得到正确的运算结果;而相关性发生时处于Fetch_1站至REG站之间以及异常维持期间尚未进入REG站的所以指令不能进入执行站,否则由于相关性原因会导致错误的计算结果。因此本发明将这些指令的备份缓存在一个先进先出的缓冲堆栈中。待相关性解除后,再将这些指令备份从缓冲堆栈中取出送至各运算单元,从而继续流水线中的执行站。然而,由于FIFO有一定的深度限制,如果相关性是由load等长延迟指令引起的,则相关性原因解除之前FIFO极有可能满载溢出,因而生成一无效信号Inval,使前端里水线不继续取指。相关性未解除期间,流水线依然流水,必然导致一些错误的运算结果,因此本发明在EXEn站设置一作废信号Cancel_1对流水的最终结果进行取舍以决定运算结果是否提交,保证流水功能的正确性。其中n为执行站的总站数,在目前为处理器设置中,其值有一个公认的取值范围标准2-32。
图2是当浮点溢出引起的异常发生时3种流水线控制机制比较示意图。在传统的单流水线处理器中,当EXEn站的检测逻辑检测出浮点溢出等异常时,将指令地址给Fetch_1重新取指,同时生成一清空信号clear清空所有流水站。清空信号生成逻辑驱动clear_1至clear_x一系列信号,负载太多,同时EXEn站与Fetch_1站相距甚远,信号线clear_1会给后端布线带来长线问题,影响整个流水线工作频率的提高。与相关性引起的流水线停顿控制机制相似,在传统多流水处理器中,运算类指令与控制类指令分开、并发流水,清空信号生成逻辑索要驱动的清空信号线更多,负载与长线问题更加严重。
而在本发明的流水线无停顿控制机制中,当EXEn站的检测逻辑检测出浮点溢出等异常时,将指令地址给Fetch_1重新取指,同时将异常有效信号缓冲L(L=n+4)拍得到作废信号Cancel_2,该作废信号作用在EXEn站后的站间寄存器,将此时流水线中的所有指令的计算结果都作废不进行提交。当异常产生时处于Fetch_1中的指令被作废后,Cancel_2变回低无效。于是,该机制消除了大负载的清空信号,由单独一条作废信号线clear_2来确保流水线的正确重启。这不仅确保了流水功能的正确性,而且解决了大负载于长线问题。
图3是本发明的基于缓冲的流水线无停顿控制机制实现框图。其硬件实现大体可分三部分指令缓冲堆栈FIFO、无效信号Inval生成逻辑、作废信号Cancel_1生成逻辑。
当相关性引起的异常发生时,异常有效信号作为FIFO的写使能信号W_en,将Fetch_1站至REG站之间以及异常维持期间尚未进入REG站的所以指令的备份缓存在FIFO中。为了尽可能防止FIFO的溢出,我们选择EXE1与WB之间的距离来确定FIFO的深度。假设流水站的设置如图1所示,则FIFO的深度至少为n+1。同时我们也注意到,当FIFO溢满时不能继续缓存新的指令,为了避免大负载问题的出现,本发明不产生停顿信号停顿前面的流水站,而是生成一作废信号使取指站不再继续读取新的指令,但此时处于Fetch_1至REG站的指令仍将流入FIFO中,因此FIFO尚有4项空位时即需生成无效信号Inval,这就是堆栈“满”检测模块名字中的满加上双引号的原因,也因此FIFO的深度应该设置为n+1+4=n+5=m。
生成无效信号Inval的原因除了上述FIFO“溢满”之外,还有一个原因异常维持期间,Fetch_1站至REG站之间以及异常维持期间尚未进入REG站的所以指令都继续流水,但其备份都缓存在FIFO中。异常解除后,缓存在其中的指令需被取出进入下面的流水站。此时异常有效信号为低,因而此后所取指令不能继续写入FIFO,同时由于FIFO非空,因此REG中的选择开关将选择FIFO的输出结果作为REG站的输入数据。因此,为了避免指令的丢失,在异常有效信号下降沿的激励下,Inval信号变为有效使取指站不能继续取指。至于Inval信号有效时间的长短则由计数器根据异常维持周期的拍数来控制。
异常产生后,EXE1至EXEn中的指令依然正常执行,其结果正确,可由WB站进行提交。当异常产生时EXE1中的指令提交后,其后的x(异常维持周期数)条指令结果为错误结果不能提交。因此将异常有效信号缓冲n拍后得到作废信号Cancel_1作用在EXEn站后的站间寄存器,对计算结果进行取舍。
权利要求
1.一种基于缓冲的流水线无停顿控制机制,其特征在于在每个异常检测站设置一个指令缓冲堆栈,用来保存异常维持期间前端流水线所发射的指令的备份,该指令缓冲堆栈采用FIFO存取机制,宽度为其所缓冲的数据位宽,并使用单负载的作废信号与一指令缓冲堆栈来实现流水线的停顿,单负载的作废信号包括作废信号Cancel_1和作废信号Cancel_2(1)、当REG站的相关性检测逻辑检测到异常时,不生成stall停顿信号,运算类指令流水线与控制类指令流水线流水线都继续流水;此时处于EXE1至WB站之间的指令能得到正确的运算结果;而相关性发生时处于Fetch_1站至REG站之间以及异常维持期间尚未进入REG站的所以指令不能进入执行站,否则由于相关性原因会导致错误的计算结果;将这些指令的备份缓存在一个先进先出的指令缓冲堆栈中,待相关性解除后,再将这些指令备份从指令缓冲堆栈中取出送至各运算单元,从而继续流水线中的执行站;然而,由于FIFO有一定的深度限制,如果相关性是由load等长延迟指令引起的,则相关性原因解除之前FIFO极有可能满载溢出,因而生成一无效信号Inva1,使前端里水线不继续取指,因此在EXEn站设置的作废信号Cancel_1对流水的最终结果进行取舍以决定运算结果是否提交,保证流水功能的正确性;(2)、当EXEn站的检测逻辑检测出浮点溢出等异常时,将指令地址给Fetch_1重新取指,同时将异常有效信号缓冲L(L=n+4)拍得到作废信号Cancel_2,该作废信号作用在EXEn站后的站间寄存器,将此时流水线中的所有指令的计算结果都作废不进行提交;当异常产生时处于Fetch_1中的指令被作废后,Cancel_2变回低无效;于是,该机制消除了大负载的清空信号,由单独一条作废信号线clear_2来确保流水线的正确重启。
2.根据权利要求1所述的基于缓冲的流水线无停顿控制机制,其特征在于当相关性引起的异常发生时,异常有效信号作为FIFO的写使能信号W_en,将Fetch_1站至REG站之间以及异常维持期间尚未进入REG站的所以指令的备份缓存在FIFO中,为了尽可能防止FIFO的溢出,可选择EXE1与WB之间的距离来确定FIFO的深度。
全文摘要
本发明公开了一种基于缓冲的流水线无停顿控制机制,在每个异常检测站设置一个指令缓冲堆栈,用来保存异常维持期间前端流水线所发射的指令的备份,该指令缓冲堆栈采用FIFO存取机制,宽度为其所缓冲的数据位宽,并使用单负载的作废信号与一指令缓冲堆栈来实现流水线的停顿,单负载的作废信号包括作废信号Cancel_1和作废信号Cancel_2。通过取消负载过重的流水线停顿控制信号stall,用一单负载多拍的作废信号负责确保流水结果的正确性。本发明是一种在深度流水线中,能够有效避免信号负载过重同时保证较高流水线加速比的基于缓冲的流水线无停顿控制机制。
文档编号G06F9/38GK101021780SQ200710034569
公开日2007年8月22日 申请日期2007年3月19日 优先权日2007年3月19日
发明者张民选, 邢座程, 蒋江, 杨学军, 阳柳, 曾献君, 马驰远, 李勇, 陈海燕, 高军, 李晋文, 衣晓飞, 张明, 穆长富, 倪晓强, 唐遇星, 张承义, 周海亮 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1