一种容忍cache缺失快速清空流水线的异常处理方法及其处理结构的制作方法

文档序号:6633562阅读:940来源:国知局
一种容忍cache缺失快速清空流水线的异常处理方法及其处理结构的制作方法
【专利摘要】一种容忍cache缺失快速清空流水线的异常处理方法及其处理结构,处理方法包括:首先定义“假命中”状态,标识被流水线清空的无效指令对cache的访问结果;在“假命中”状态下cache不保证指令码或数据字正确,直接将访问地址对应的缓存信息输出;“假命中”状态取指操作中将流水线清空信号直接作用于指令cache,使无效指令访问cache时选择“假命中”状态;在异常处理开始时,使用流水线清空信号与存储器访问级无效标识信号的“或”逻辑选择控制数据cache;异常发生时,cache进入“假命中”状态,使流水线继续推进。本发明同时公开了应用该异常处理方法的结构。本发明能够加快异常处理速度,提高系统的实时性。
【专利说明】一种容忍cache缺失快速清空流水线的异常处理方法及其处理结构

【技术领域】
[0001]本发明涉及哈佛结构的RISC处理器在进行异常处理时能够快速清空流水线的结构及方法,具体为一种容忍cache缺失快速清空流水线的异常处理方法及其处理结构。

【背景技术】
[0002]目前高性能微处理器普遍使用层次化的多级cache来作为数据和指令的缓冲,以减小处理器和存储器之间的速率差异。其中,第一级cache具有很小的访问延迟,基本上与处理器的速率保持一致,为了获得指令和数据的并行访问,它通常会分成独立的指令cache和数据cache,即所谓的哈佛结构;第二级cache —般将指令和数据统一存放在一起,它可以在片内也可以在片外;在未来的高端设计中,将大容量的第三级cache集成在片内也很有可能成为一种普遍的技术手段。但无论怎样,一级cache的缺失始终是影响处理器性能的重要因素,这种影响不仅表现在处理器执行正常功能的过程中,而且还表现在它处理异常情况的方式上。对于当前绝大多数主流的RISC微处理器而言,它们一般都采用精确异常的处理方式,即在发生异常时,要保证异常指令之前的所有指令都已经成功执行,而异常指令之后所有进入流水线的指令都不能执行,必须被清空掉;此后处理器才从异常入口地址处取新指令并开始执行异常处理子程序。在流水线清空过程中,由于潜在的cache缺失,就可能导致整个流水线被阻塞,使得异常处理也停滞不前,最终影响计算机系统处理异常事件的实时性。
[0003]为了降低cache缺失所导致的性能损失,目前从体系结构的层面上已经提出了两种技术手段:(I)非阻塞cache技术,即发生cache缺失时,流水线不被阻塞,可以继续执行其后续无关的指令,以此来隐藏cache缺失的开销。它通过一个专门的“缺失队列”来存储缺失指令,直到缺失的数据块从主存中读回,因此cache缺失能够被隐藏的周期数取决于缺失指令后续的无关指令的条数。显然,这种结构在处理器执行正常功能时是有助于性能提升的,但在异常处理中却无济于事,因为缺失指令的后续指令都要被流水线清空掉,它们本身并不占用有效的执行时间,也就无法隐藏缺失的开销;另一方面,非阻塞本质上是一种乱序执行的思想,对于严格保证指令顺序性的精确异常来说,只会增加控制的复杂度。(2)预取cache技术,它通过提前激发将来可能产生的cache缺失行为,使缺失处理与缺失指令之前的其它指令并行执行,从而隐藏cache缺失的开销。为了实现预取功能,它需要“存储器参考预测表”和“预取队列”两个硬件逻辑。每次使用分支预测器产生的取指地址去访问存储器参考预测表,如果有匹配项,则说明其对应指令是将要执行的,于是将该指令放入预取队列中,以提前触发潜在的cache缺失。遗憾的是,该技术也只适用于处理器执行正常功能的情况,在进行异常处理时并不凑效,这是因为异常事件是少有的随机事件,不具有统计特性,那么分支预测器产生的取指地址在访问存储器参考预测表时,很可能没有匹配项,而不能预测到将要执行哪条指令,最终也就无法提前触发潜在的cache缺失行为。
[0004]如何有效的减少cache缺失开销、快速的进行异常处理,是实时计算机系统的必然要求。然而,以上两种技术针对异常事件的处理,仍然无法避免cache缺失导致的流水线停顿,经检索相关文献,目前也没有能很好解决该问题的方法。


【发明内容】

[0005]针对现有技术中存在的问题,本发明提供一种通过在常规的阻塞式cache中设置“假命中”状态来消除因无效指令的cache访问缺失所导致的流水线停顿,不增加额外复杂的硬件逻辑即能够在偶发的异常事件中快速的清空流水线,从而加快异常处理的速度,提高计算机系统实时性的容忍cache缺失快速清空流水线的异常处理方法及其处理结构。
[0006]本发明容忍cache缺失快速清空流水线的异常处理方法通过以下技术方案来实现:
[0007]首先,修改cache的命中判断逻辑:定义“假命中”状态,标识被流水线清空的无效指令对cache的访问结果;
[0008]然后,定义“假命中”状态下cache的行为:cache无需给流水线提供正确的指令码或数据字,直接将访问地址对应的缓存信息进行输出;
[0009]其次,实现指令cache “假命中”状态的流水线控制:取指操作中将处理器生成的流水线清空信号直接作用于指令cache,使当前周期无效指令在访问cache时能够选择“假命中”状态;
[0010]再次,实现数据cache “假命中”状态的流水线控制:在异常处理开始时,使用处理器生成的流水线清空信号与存储器访问级无效标识信号的“或”逻辑作为数据cache “假命中”状态的选择控制;
[0011]最后,在发生异常的情况下,cache进入“假命中”状态,直接将数据返回给流水线,既不保证数据的正确性也不发送访存请求,进而使得流水线继续推进。
[0012]所述的异常处理的指令包括正在访问数据cache的指令以及后续周期访问数据cache的指令。
[0013]处理器生成的流水线清空信号作用于当前所有指令的流水级后,将前一个流水级的无效标识信号向后一个流水级传递。
[0014]所述的异常处理前首先进行保存现场操作,然后通过流水线清空控制信号对异常指令之后的所有指令进行标识;所述的异常指令之后的所有指令包括从取指级到存储器访问级的指令。
[0015]所述的无效指令包括对应译码级、寄存器访问级以及执行级的指令。
[0016]本发明容忍cache缺失快速清空流水线的异常处理结构通过以下技术方案来实现:包括能够标识被流水线清空的无效指令对cache的访问结果的命中判断逻辑单元,流水线取指操作中能够将处理器生成的流水线清空信号直接作用于指令cache的指令控制单元,以及流水线异常处理开始时能够将处理器生成的流水线清空信号与存储器访问级无效标识信号的“或”逻辑作为数据cache选择控制的数据控制单元,所述的命中判断逻辑单元标识的无效指令能够通过cache将缓存信息直接进行输出。
[0017]所述的能够标识被流水线清空的无效指令对cache的访问结果的命中判断逻辑单元包括多路选择器及其选择逻辑单元。
[0018]与现有技术相比,本发明完全消除了由于无效指令潜在的cache访问缺失导致的流水线停顿现象,加快了异常处理的速度,有益的技术效果如下:
[0019](I) “假命中”机制造就了无效指令在流水线中的零等待。对于当今的高频处理器而言,cache缺失至少需要几十上百个时钟周期,但“假命中”使无效指令对cache的访问不产生缺失行为,从而避免了流水线的等待。
[0020](2)降低了系统功耗。“假命中”不发访存请求,避免无效指令对存储器进行不必要的访问操作,从而降低了整个系统的功耗开销。
[0021](3)提高了计算机系统的实时处理能力。当外部中断或者内部异常事件发生时,指令流水线能够被快速清空并立即响应异常处理,有效增强了计算机系统的实时性。
[0022](4)本发明更适用于深度流水的微处理器设计。处理器的流水级数越多,异常发生时需要清空的指令就越多,其中访存指令由于cache缺失导致流水线停顿的开销就会越大,针对深流水线中不断增多的无效访存指令,“假命中”策略零开销特性的效果将更加明显。
[0023](5)本发明的控制结构简单,除了增加“假命中”状态的多路选择器及其选择逻辑之外无需其它的硬件资源。

【专利附图】

【附图说明】
[0024]图1为本发明实现快速异常处理的控制结构框图;
[0025]图2为常规RISC处理器在进行异常处理时流水线清空的时序图;
[0026]图3为本发明在进行异常处理时流水线清空的时序图。

【具体实施方式】
[0027]下面结合具体的实施例对本发明做进一步的详细说明,所述是对本发明的解释而不是限定。
[0028]本发明在异常处理过程中主要包括如下方面:
[0029]首先,修改cache的命中判断逻辑。一般情况下,cache的访问结果只会处于互斥的两种状态,即“命中”状态或者“缺失”状态,我们针对异常处理时流水线的清空过程,再专门定义一种“假命中”状态,用以标识那些被流水线清空的无效指令对cache的访问结果。
[0030]第二,定义“假命中”状态下cache的行为。由于流水线中的无效指令最终不能更新处理器的任何状态信息,因此它们访问cache所得到的指令不会被流水线译码,所得到的数据也不会被处理或写回到寄存器文件中;也就是说,针对这些无效指令,cache无需给流水线提供正确的指令码或数据字。于是,“假命中”状态完全可以与“命中”状态一样来实现,此时cache直接将访问地址对应的缓存信息进行输出,由于不发访存请求,所以就不会停顿流水线;唯一不同的是,在“假命中”状态下,cache并不用保证输出给流水线的指令或数据的正确性。
[0031]第三,实现指令cache “假命中”状态的流水线控制。每次发生意外事件并进行异常处理时,处理器都会生成一个流水线清空信号,用来控制取消异常指令之后已经进入流水线的所有指令的执行;同时生成异常处理的入口地址,并在下个周期给取指级进行取指。由于当前周期在取指级已有一个正在访问指令cache的取指操作,并且该指令是被流水线取消执行的无效指令,然而,下一个周期进行异常处理入口地址的取指操作,该指令却是有效的,因此,生成的流水线清空信号只维持一个周期,该信号将直接作用于指令cache,使当前周期无效指令在访问cache时能选择“假命中”状态。
[0032]第四,实现数据cache“假命中”状态的流水线控制。发生异常事件时,当前周期某条指令很可能正在访问数据cache,通过流水线清空信号可以取消该无效指令的无效访问,并选择“假命中”状态;然而流水线中还可能存在某条指令当前未访问数据cache,后续周期它才开始访问数据cache的情况,那么只维持当前一个周期的流水线清空信号将无法对该指令进行无效标识。为此,在异常处理开始时,生成的流水线清空信号一旦作用于当前所有指令的流水级之后,我们还必须让前一个流水级的无效标识信号向后一个流水级传递,那么当指令推进到存储器访问级并开始访问数据cache时,传递到存储器访问级的无效标识信号则恰好可以控制该指令对数据cache的访问处于“假命中”状态。所以,使用流水线清空信号与存储器访问级的无效标识信号的或逻辑作为数据cache “假命中”状态的选择控制。
[0033]参见图1,针对一级指令cache和数据cache而言,它们的标志阵列和数据阵列被并行的访问,从标志阵列读出的tag值用于命中判断,如果命中,则从数据阵列读出的data值可直接作为命中字返回给流水线进行处理;否则如果发生缺失,则向二级cache或者外部存储器发出访存请求,此时整个流水线被停顿下来。当访存完成时,将访存结果memdata返回给流水线,同时放开流水线使其正常推进。作为示例,图中展示了一个七级流水结构,其中的异常处理级专门对内部意外事件或者外部中断事件进行处理。当出现异常事件时,首先是保存现场操作,然后生成清空流水线的控制信号All_flush,用来对异常指令之后的所有指令(包括从取指级到存储器访问级的指令)进行标识,表明它们从此刻起已变为无效,而且每一级指令的无效标识也将向下一流水级传递;与此同时,生成异常处理入口地址给取指级,以指导它在下个周期进行新指令的取指。由于当前周期取指级和存储器访问级的无效指令正在访问cache,并且其它无效指令(对应译码级、寄存器访问级和执行级的指令)在后续周期也可能需要进行存储器的访问,为了避免潜在的cache缺失而导致流水线的停顿,本发明为cache的命中判断逻辑增加了一个“假命中”的状态mhit。在处理器执行正常功能时,cache要么处于命中状态hit、要么处于缺失状态miss,而只有在发生异常的情况下,cache才会进入“假命中”状态mhit,此时cache直接将数据阵列的data值返回给流水线,而无需保证该值的正确性,它也不会发出访存请求,因此流水线可以顺利推进。对于指令cache而言,控制mhit状态的信号ici_inull直接来自于流水线清空信号All_flush ;对于数据cache而言,控制mhit状态的信号dci_inull则来自于All_flush信号与存储器访问级的无效标识信号M_flush的或逻辑。
[0034]参见图2,图中右上角的数字代表指令序号,inst表示icache返回给流水线的指令,data表示dcache返回给流水线的数据,F、D、A、E、M、X、W分别表示七个流水级。在指令I的X级(即异常处理级)检测到异常并开始处理,产生清空流水线的信号All_flush,标识流水线中所有指令的无效性。此时指令6和指令2分别在访问icache和dcache,并且都发生了缺失,需要进行访存请求,于是整个流水线都停顿下来。等到缺失的指令和数据都返回时,流水线才推进,假设指令2、指令3和指令100都是load指令,此时异常处理入口地址(指令100)开始在F级进行取指;然而由于指令3在M级访问dcache并且又发生了缺失行为,于是整个流水线再次停顿下来。指令上的箭头表示流水线清空时传递到相应流水级中的指令被标记为无效,然而正是这种无效指令的cache缺失行为导致了不必要的流水线停顿,影响了异常处理的速度。
[0035]参见图3,在指令I的X级进行异常处理时,流水线清空信号All_flush促使此时的指令6和指令2的cache访问都进入“假命中”状态,而后续指令3在访问数据cache时则由向后传递的流水级标识信号M_f lush控制并进入“假命中”状态。Cache在“假命中”状态下直接向流水线返回其数据阵列中的缓存值,而不用保证这些值的正确性,因为流水线已经标识了这些无效指令,不会对cache返回的指令或数据进行译码和写回。“假命中”不产生访存请求,无需停顿流水线,明显加快了异常处理过程。
[0036]本发明已经成功应用于一种兼容SPARC V8架构的具有七级流水的RISC微处理器中,并且已经实现了多款SOC产品。本发明的cache “假命中”控制策略,只需增加“假命中”状态的多路选择器以及相应的选择控制逻辑,设计结构简单,易于实施。在处理器进行异常处理时,该结构可以完全避免流水线清空过程中由于无效指令的cache访问缺失而导致的流水线停顿,无需进行访存请求而实现流水线的零等待,明显加快了异常处理的速度,有利于提高整个系统的实时性。
【权利要求】
1.一种容忍cache缺失快速清空流水线的异常处理方法,其特征在于: 首先,修改cache的命中判断逻辑:定义“假命中”状态,标识被流水线清空的无效指令对cache的访问结果; 然后,定义“假命中”状态下cache的行为:cache无需给流水线提供正确的指令码或数据字,直接将访问地址对应的缓存信息进行输出; 其次,实现指令cache“假命中”状态的流水线控制:取指操作中将处理器生成的流水线清空信号直接作用于指令cache,使当前周期无效指令在访问cache时能够选择“假命中”状态; 再次,实现数据cache “假命中”状态的流水线控制:在异常处理开始时,使用处理器生成的流水线清空信号与存储器访问级无效标识信号的“或”逻辑作为数据cache “假命中”状态的选择控制; 最后,在发生异常的情况下,cache进入“假命中”状态,直接将数据返回给流水线,既不保证数据的正确性也不发送访存请求,进而使得流水线继续推进。
2.根据权利要求1所述的容忍cache缺失快速清空流水线的异常处理方法,其特征在于:所述的异常处理的指令包括正在访问数据cache的指令以及后续周期访问数据cache的指令。
3.根据权利要求1或2所述的容忍cache缺失快速清空流水线的异常处理方法,其特征在于:处理器生成的流水线清空信号作用于当前所有指令的流水级后,将前一个流水级的无效标识信号向后一个流水级传递。
4.根据权利要求1所述的容忍cache缺失快速清空流水线的异常处理方法,其特征在于:所述的异常处理前首先进行保存现场操作,然后通过流水线清空控制信号对异常指令之后的所有指令进行标识;所述的异常指令之后的所有指令包括从取指级到存储器访问级的指令。
5.根据权利要求1所述的容忍cache缺失快速清空流水线的异常处理方法,其特征在于:所述的无效指令包括对应译码级、寄存器访问级以及执行级的指令。
6.一种容忍cache缺失快速清空流水线的异常处理结构,其特征在于:包括能够标识被流水线清空的无效指令对cache的访问结果的命中判断逻辑单元,流水线取指操作中能够将处理器生成的流水线清空信号直接作用于指令cache的指令控制单元,以及流水线异常处理开始时能够将处理器生成的流水线清空信号与存储器访问级无效标识信号的“或”逻辑作为数据cache选择控制的数据控制单元,所述的命中判断逻辑单元标识的无效指令能够通过cache将缓存信息直接进行输出。
7.根据权利要求6所述的容忍cache缺失快速清空流水线的异常处理结构,其特征在于:所述的能够标识被流水线清空的无效指令对cache的访问结果的命中判断逻辑单元包括多路选择器及其选择逻辑单元。
【文档编号】G06F11/07GK104461758SQ201410628863
【公开日】2015年3月25日 申请日期:2014年11月10日 优先权日:2014年11月10日
【发明者】肖建青, 裴茹霞, 李红桥, 张洵颖, 娄冕 申请人:中国航天科技集团公司第九研究院第七七一研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1