减少指令高速缓存和流水线处理器之间等待时间的装置和方法

文档序号:6538314阅读:198来源:国知局
专利名称:减少指令高速缓存和流水线处理器之间等待时间的装置和方法
技术领域
本发明涉及的是数据处理系统。具体而言,本申请描述了一种改进流水线处理以避免由于改变执行顺序而引起的执行延迟的方法。
背景技术
流水线处理已经被成功地运用于微处理器的设计中。流水线体系结构将指令的执行划分成若干个用来执行不同类型指令的流水线。一个流水线的每个阶段相应于一条指令执行中的一步,从而使得提高执行速度成为可能。利用流水线的处理,多个指令可以被分解到在同一个时钟周期中并行执行的各个阶段中。不同于串行处理中的所有阶段在开始下一个指令的处理前完成一个指令的处理,流水线处理器体系结构通过在同一时间处理不同的指令而使阶段重叠。每个指令的有效处理速度保持不变,但由于几个指令被不同的各个流水线阶段在同一时间里处理,指令处理的吞吐量提高了。
流水线处理的开始阶段包括了从一个指令高速缓存中取指令和在一个执行分支预测的阶段中将指令译码。如果在一条指令的执行中一个分支被预测到要采取,则该分支之后的所有指令都将被无效,并从预测的分支的指令开始一个新的执行序列。
流水线中阶段的数量加大了在首先存取一条指令和执行该指令之间的等待时间。在指令的顺序执行期间,这个增加的等待时间不是问题,因为最终大多数的阶段都将被占用。然而,执行序列中存在中断,这或许由于一条指令将执行分支到另一组指令,或是由于上下文切换要求完全切换程序而引起的中断。在指令处理期间,会试图预测在执行中将被采取的分支。然而,预测错误会发生,并且当一错误预测被确定时,流水线可能必须清空它的内容,以及由分支确定的在那里执行的指令。
分支预测错误的结果是产生在第一次访问正确的指令和执行该指令之间的一个等待时间。这个等待时间可以通过改进分支预测来减少。然而在预测中总是存在不确定性,并且它们永远是不完美的。当一预测错误发生时,流水线就遇到一个泡(bubble),且它的内容必须清空才能开始一个新的执行序列。
一种对付分支预测错误的技术是,系统可以执行两种可能的执行路径,并且一旦已经发生了最终分支确定,正确的路径就被选定。这种技术是硬件密集的,且流水线的深度接近最高技术很难实现。一个相关的解决方法是将已取的在一预测分支后的指令存储的一缓冲区中,以便在检测到一分支预测错误时快速访问。在使用三条流水线的机器中,这具有有限的价值,因为任何被缓冲的指令都将位于分支之后并在与分支本身同样的高速缓存线上。
另一种与分支相关的技术是将分支确定移动到尽可能地靠近流水线的顶部,以减少分支预测和分支确定之间的时间。这种方法减少了可能最终被抛弃的指令的猜测性执行发生的时间。不幸的是,这种方法在现有技术的处理下的时钟频率增加从而每一个阶段的周期时间减少和流水线阶段数目增加的情况下实现起来困难。
本发明用来减少在遇到错误预测的分支时(此时执行顺序改变到一套新指令,流水线必须被重填)在流水线处理器的阶段之间的等待时间。同样的概念可以适用于上下文切换的情况下,此时可减少当再填入一组新指令时的等待时间。

发明内容
提供了一种用来在流水线处理器中执行指令的方法和装置,其具有在指令高速缓存和指令执行阶段之间的减少的等待时间。这种减少的等待时间是通过在某些有利条件下同时向译码阶段和指令队列载入相同的指令而获得的。
依照本发明,当发生分支校正时,例如在执行序列中已有一指令流重定向并且流水线的阶段已经被清空时,通过同时向两个阶段载入相同指令(而先前它们是顺序载入这两个阶段的),新指令被加速放到队列阶段以便发送到执行管道中,因为在默认情况下由于指令流重定向流水线阶段是空的。多个多路转换器接收每条指令以便载入译码阶段和指令队列阶段,并且当判定指令队列中不包含数据时,发生对两个阶段的同时载入。
本发明减少了当遇到中断而发生上下文切换时的指令发出等待时间。在由中断导致的指令流中断之后,一个新的指令流被取出并被同时地加速放入译码和队列阶段这两者中,以便发送到执行流水线中。


图1A所示为在一个流水线处理器中一条流水线中的通常执行过程。
图1B所示为在本发明优选实施例中获得的等待时间的减少。
图2所示为依照本发明优选实施例在一个指令队列中载入指令。
图3为流程图,示出了本发明是如何操作来减少指令等待时间的。
图4所示为用于载入指令队列的过程和装置。
图5所示为分支预测如何执行,以及预测错误时,指令是如何被无效的。
具体实施例方式
图1A所示为一个有代表性的9个阶段的微处理器流水线。当指令F1和F2被寻址和取指时执行开始。指令F1和F2从指令高速缓存中取出并顺序提供给如图所示的译码阶段D。译码阶段D是一个分支预测阶段,用来检测分支和预测分支是否将被采取(从而执行被重定向到一个新的指令流)或不会被采取(继续顺序执行)。在由于一个预测的被取出的分支而导致指令流已经被重定向时,做出后续指令不再有效的判断。随后基于由在D中的分支指令确定的分支预测,从指令高速缓存中取出新的一组指令。
然而假设该指令是有效指令,而不是预测的被采取的分支,则该指令被载入指令队列Q中。从那里,载入指令队列Q中的指令以流水线方式通过阶段E1,E2,E3,E4和E5。
如果执行阶段E2判断出一个较早的分支预测是错误的,或者一中断被调用,则流水线的未提交的F1、F2、D、Q、E1、E2、(E3)、(E4)和(E5)中的内容被清空。在依照本发明的情形下,译码阶段D和指令队列Q会随后被同时载入从F2中取出的相同的分支目标或是中断指令。其结果是总的流水线长度减少了一个周期。这样,在已出现中断并且执行依照与该中断相关的指令发生,或已发生分支预测错误并且正取出正确的一组指令的情况下,这些阶段初始地将是空的。只有当D和Q两个阶段都是空的时候,可以同时向它们载入一指令,从而实现比图1A所示串行执行节省一个周期的执行。
尽管前述实施例展示了两个阶段D和Q能被并行载入,如果其他相继的流水线阶段在功能上是独立的话,也可能被同时载入。
采用这种技术导致减少在中断或分支预测错误后的第一条指令的访问和执行之间的等待时间。对于所示的例子,在理想情况下,可以减少25%的等待时间。在分支预测错误等待时间的情况下,在分支指令之后发生的执行周期当在E2发生分支判定时要减少近15%。很明显,如果分支发生在执行序列中的更早阶段例如E1,则取得的效果更大,而如果分支判定发生在E3,则实现减少了的益处。
用于实现在中断或分支预测错误后第一条指令的访问和执行之间等待时间的前述减少的装置和方法在图2中有更详细的解释。图2描述了一种执行根据本发明优选实施例的方法的装置,该方法当中断或分支预测错误发生时将减少流水线等待时间。指令高速缓存11最多产生4个用来并行执行的指令。在流水线处理器的控制下,指令地址被提供给指令高速缓存,从而必要的指令被提供给流水线进行处理。
如图2所示,有三个不同的流水线处理器,即算术流水线处理器14,载入/存储或算术处理器15,和分支指令流水线处理器流水线16。这些特殊的流水线执行与算术运算、载入/存储或算术运算、或分支操作相关的指令。
来自指令高速缓存11的指令的一般路径是经过译码阶段12,在此最多可接收4个指令,并做出这些指令是否将随后执行的预测。当译码阶段12预测一个指令由于预测的被采取分支而不能被执行时,该指令被无效并且不到达包括指令队列13的后续阶段。在正常流水线操作情况下,当译码器判定了指令有效,译码器将该指令从译码阶段经多路转换器24、25、26、27传送进入指令队列13的相应阶段Q0-Q3,这样所有流水线的阶段都装有有效数据。
依照本发明的优选实施例,提供了并行路径18、19、20和21,这样来自指令高速缓存11的指令可以在使指令队列13中的内容无效的预测错误校正或中断之后,被直接装入指令队列13中。在由于这样的分支预测错误或中断使得指令队列13为空的情况下,来自指令高速缓存11的一个或多个指令可以通过相应的多路转换器24、25、26和27装入队列13的阶段Q0-Q3,因而获得图1B所示的周期节省。
图3显示了在依照图2的装置中的指令高速缓存中取指和载入指令的过程。现在参照图3,这个操可针对下述情况来解释,即由于中断而接收到上下文切换,或在流水线14、15和16其中一个中错误预测的分支被校正。参照图2,错误预测的分支可能发生在流水线的G2阶段,而中断可能发生在流水线的任何阶段。在这种情况下,将在步骤31从处理器提供一条新指令地址用来取与被采取的分支或中断路径相应的指令。相反,如果没有中断产生上下文切换,没有预测采取的分支,则在步骤32中从指令高速缓存中顺序地取出指令。
根据高速缓存的管理原则,如果在步骤33中发生高速缓存命中从而意味着在指令高速缓存中可获得所请求的指令,则从指令高速缓存中取出并处理该指令。相反,如果在指令高速缓存中没有包含与步骤31中的取指地址相匹配的请求指令,则在步骤34向外部存储器发出一个从该存储单元中取相应的指令的请求。
在步骤35,在判断块35中判断译码阶段例如D和指令队列阶段Q是否为空(包含无效数据)。当两者都为空时,表示指令队列加速可以应用,在步骤38可以将指令载入译码阶段D0-D3和指令队列阶段Q0-Q3两者,从而减少一个流水线周期。
当在步骤34中下一条指令必须从存储器中请求时,或队列13的内容已经被判定有效即包含了一个有效指令时,处理作为常规的流水线处理而发生,其中指令从译码器12移到指令队列13中。在这个阶段中,指令顺序地在步骤36通过译码器12,并在步骤39进入队列13,假定译码器12还没有由于预测被采取的分支而将指令无效的话。
更具体地参照图4说明了判定指令队列能否与译码器并行地载入的过程。图4示出了指令队列13以及其载入指令的不同方式。最多4条指令在同一时间里被成批地处理。指令高速缓存产生4条指令由译码器12的4个相应译码阶段D0、D1、D2和D3进行译码。当在指令队列13中有空间时,每条指令或者与译码器12的装载并行地载入指令队列13,或者从译码器12中来,跟在当前有效指令之后,而合并到指令队列中。
当指令被发送给执行流水线时指令队列中的内容连续向左移动。依照指令的类型和流水线的可用性,来自队列中的位置Q0、Q1和/或Q3的最多3条指令被送入到执行流水线中。随后通过首先向左移动内容来装载这些位置。接下来,队列13中空出的位置或者从译码器阶段12装载,或者从指令高速缓存11中直接装载。图中还显示了阶段Q4-Q7,它们如在现有技术中那样载入来自译码器12的指令。根据优选实施例每个阶段Q0-Q7都包含有32位指令数据和一位有效位。通常,当指令队列13的任何一个阶段Q0-Q7包含有效数据时,队列不能与译码阶段并行地装载,而必须用传统的、顺序的方式从译码阶段12中装载。
图中显示多路转换器24和25影响对高速缓存11中的指令的选择,以便同时地装载指令队列位置Q0-Q3中的一个,以及相应的译码器12阶段D0-D3。当在图4中所示的阶段Q0、Q1、Q2或Q3中存在的数据的有效位无效时,多路转换器24和25将从指令高速缓存11中直接装载数据到这些位置。在图中虽没显示,也能明白有其他两个多路转换器用来控制向Q2和Q3中载入指令。因此,在一个指令周期中,在分支预测被执行之前最高达4条指令能被载入指令队列13中。一旦分支预测已经执行,如果这些指令在被判定属于没有被预测为要执行的分支之后还保留在指令队列13中,则这些指令会随后被在指令队列13中无效。
当阶段Q0和Q1任何一个包含了有效数据时,数据必须从译码器12或IQ shift(指令队列移动)进入。每当在队列13中有无效位置可以用来载入指令时,多路转换器28和29的译码器12路径就用来将数据从译码器12移到队列13中。当在队列中例如Q2-Q3中的指令有效时,则多路转换器28和29的IQ shift路径用来装载Q0和Q1。另外,队列指令能被发送到执行阶段并同时从译码阶段或从经由IQ shift的队列移动重新载入。
到达单独的流水线的指令是依照它们是算术、载入/存储还是分支指令来进行处理的。在流水线阶段的控制下,将要执行的指令从阶段Q0-Q2中载入。在从阶段Q0-Q2的每次发出指令之后,指令队列的内容向左移动。无论指令是从指令高速缓存中并行地载入指令队列,或是先经过分支预测译码器12,它们最终都被确定有效。前面提到的指令并行处理在指令队列被发现是空的情况下减少了总的流水线有效长度和执行时间。用这种方法,传统流水线处理不需要使指令先经过译码器处理再经过指令队列从而造成延迟。
现在参考图5,可以解释分支预测对于载入指令队列13中的指令的影响。如前所述,指令队列13中的每一个位置Q0-Q3可以直接从高速缓冲存储器或通过译码器阶段12载入指令。当从高速缓冲存储器中直接载入指令到Q0-Q3其中之一时,如果译码器12随后做了分支预测,表明由于已经预测了不包括载入的指令的分支,该直接载入的指令是无效的,则分支指令之后的指令必须被无效。指令队列13有位置Q0-Q2受一个从流水线接收的发送命令的控制,用于一次向各执行流水线发送最高达3条指令。指令队列13中的一个空位置通过将内容向左移动的IQ shift命令被该空位置右边的指令填充。
多路转换器39、40和41传送一条已经经过译码器12中的相应阶段并且被确定有效即未被判定为已被预测的分支的一部分的指令。当一个指令队列13阶段从译码器12阶段中载入指令时,多路转换器39、40和41确保这是一个有效指令。
第二系列多路转换器42-49进一步控制向指令队列13中并行和串行载入指令。当Q0为空或包含无效数据时,施加到多路转换器42的IQ shift将寄存器的内容向左移动,从而使Q1-Q3中的有效数据向左移动到Q0。同样,当Q1、Q2、Q3、Q4、Q5、Q6或Q7包含无效数据时,其右边的含有有效数据的位置的内容可以由IQ shift命令通过多路转换器43-49向左移动到这些位置之一。如图所示,一旦这些位置已被无效,它们也可以从译码器中串行装载。
在发生一个由IQ direct(指令队列直接)所表示的来自高速缓存的直接载入的情况下,当Q1或Q2中的直接载入的指令代表一个因为有分支被预测而不会被采取的路径时,多路转换器51和52使指令不会被发送到执行流水线中。当紧邻在前的指令导致了一个分支预测时,多路转换器51将禁止阶段Q1中直接装入的指令通过。因此,在阶段Q1中直接载入的指令仅当在译码器12中的阶段D0未预测分支时才将通过多路转换器51。
同样,当直接载入Q2的指令跟随一条由D1判断一分支为被采取的分支的指令时,多路转换器52阻止已装入Q2中的指令被发送到执行流水线。多路转换器51和52允许先前经过阶段D1和D2,并且不是在指令队列13中直接载入的结果的指令从位置Q1和Q2中被传送。这个图显示了不同的IQ shift,它们在那里不断地将队列13的每一个阶段的内容向左移动。根据有多少个位置已被发送到执行流水线(在本例中,一次最多发送3个指令),以及在队列中有效指令的数目和在译码中有效指令的数目,1、2或3个位置可以被重新载入。
在图5所示的情况下,Q0-Q3的内容已经与D0-D3的内容并行地载入。在载入Q0-Q3和D0-D3后,如果产生一个分支预测,即,指示出从指令高速缓存中取出的、在译码器的阶段D0中的分支指令之后的指令因而是无效的,则多路转换器39强制使指令队列13的位置Q1无效。同样,当译码器D1和D2中的指令译码器预测一个被采取的分支指令时,多路转换器40和41强制使Q2和Q3无效。
因此,已经描述了这样的一个系统,当指令队列13和译码器阶段12都是空的时候允许直接向指令队列13中载入指令。使用这种直接载入的特征减少了到执行单元的等待时间,这是通过减少指令在被载入指令队列13之前先被载入译码器12的需要而实现的。
前面对该发明的描述说明和描述了本发明。另外,该公开所示和描述的仅是在一种用于减少指令高速缓存和流水线处理器之间的等待时间的装置和方法的情境中的本发明的优选实施例,但是,像前面提到的,可以认为本发明能够用于各种其它不同的组合、修改和环境中,并且能够在此所表述的本发明的发明概念范围内、与以上教导和/或相关领域的技能或知识相应地进行变化和修改。上面说描述的实施例进一步旨在说明实施本发明的已知最好的方式,并使本领域的其他技术人员以这种或其他实施例利用该发明,并且根据本发明特定的应用或者使用进行不同的修改。因此,本说明书不是旨在将本发明限制到这里所公开的形式和应用。而是,后面的权利要求书应被理解为包括其他可选的实施例。
权利要求
1.一种用来减少在指令高速缓存和流水线处理器之间等待时间的方法,该流水线处理器有多个并行的执行阶段,每个执行阶段具有用来顺序地处理被所述处理器处理的指令的译码阶段和指令队列,该方法包括判断所述译码阶段和指令队列是否不包含有效数据;以及当所述译码阶段和指令队列包含无效数据时从该指令高速缓存中并行地向所述译码阶段和指令队列插入指令。
2.如权利要求1所述的用来减少指令高速缓存和所述流水线处理器之间等待时间的方法,还包括当所述指令队列中存在有效数据时,从所述高速缓存通过所述译码阶段和指令队列顺序地处理所述高速缓存指令。
3.一种用来在具有一系列流水线阶段的流水线处理器中处理指令的方法,该方法减少了指令队列和流水线处理器之间的等待时间,其包括顺序地从高速缓冲存储器取出多个指令用来在所述流水线处理器中执行;在所述流水线处理器的第一个阶段中对每个所取指令的地址进行译码以判断是否一个执行分支将被采取;当所述指令队列和所述译码器为空时,在所述指令被载入所述译码器的同时载入所述指令至所述指令队列;当所述指令队列和所述译码器不为空时,顺序地从所述译码器中向所述指令队列载入所述指令;以及移动指令队列的内容以从所述指令队列中产生一条指令用来在随后的流水线阶段中进行处理。
4.如权利要求3所述的用来在流水线处理器中处理指令的方法,其中如果一执行分支没有采取,则所述译码器在所述流水线处理器的一个随后周期里,识别在所述指令装入所述译码器的同时,装入所述队列中的所述指令是有效的还是无效的。
5.如权利要求3所述的用来在流水线处理器中处理指令的方法,其中所述指令队列的内容向左移动到与多个流水线处理器阶段相连的输出端口。
6.一种用于在流水线处理器中执行指令的方法,包括顺序地取出将由所述流水线处理器执行的指令的地址;判断所述指令是否存储在高速缓冲存储器中;判断译码阶段和所述流水线处理器的指令队列阶段的位置是否为空;当所述阶段为空时从所述高速缓冲存储器中并行地装入所述指令到所述译码阶段和所述指令队列中;以及顺序地从指令队列中读出所述指令,以便在所述流水线处理器中执行。
7.如权利要求6所述的用来在流水线处理器中执行指令的方法,还包括当所述指令队列包含有效数据时仅向所述译码阶段载入所述指令,并且当所述指令队列有一个位置可用时顺序传送所述指令至所述指令队列。
8.如权利要求7所述的用来在流水线处理器中执行指令的方法,还包括如果所述译码器预测从所述指令采取一分支,则识别所述指令为分支指令;以及禁止从所述译码器向所述指令队列传送随后的指令。
9.如权利要求7所述的用来在流水线处理器中执行指令的方法,还包括当指令不在所述高速缓冲存储器中时,从主存储器中取所述指令;以及转送所述指令到所述译码阶段,以便顺序传送至所述指令队列。
10.如权利要求6所述的用来在流水线处理器中执行指令的方法,还包括检查所述队列中的位置的内容;以及判断每一个所述位置的有效位的状态,从而确定所述位置是否包含有效数据。
11.如权利要求7所述的用来在流水线处理器中执行指令的方法,其中每当一条指令从所述指令队列中读出时所述指令从所述译码阶段传送到所述指令队列。
12.一种用来减少流水线处理器阶段之间等待时间的装置,包括产生多个将由所述流水线处理器执行的指令的指令高速缓存;多个相连接以从所述高速缓存接收多个指令的译码阶段;指令队列,其具有用来接收指令和有效位的多个位置;以及多个多路转换器,其用来接收每个所述指令、接收所述指令的相应的译码阶段的输出,并被连接以从所述队列的位置接收有效位作为选择信号,所述多路转换器被连接以提供给每个所述指令队列位置一个从所述译码阶段或所述高速缓存中选择的所述指令。
13.如权利要求12所述的装置,其中所述多路转换器接收用于所述指令队列的移动信号,该移动信号向所述队列的输出端口移动所述指令队列的内容,并使得来自所述译码器的所述指令被传送至所述指令队列。
14.如权利要求12所述的装置,其中所述队列的所述输出端口与多个并行处理阶段相连接。
15.如权利要求14所述的装置,其所述处理阶段执行的指令属于载入/存储操作、算术运算或分支目标指令其中之一。
全文摘要
一种用于在流水线处理器中执行指令的方法和装置。该方法减少了由于执行一分支校正,或当一中断改变了指令流的序列而在处理流中产生泡时指令高速缓存和流水线处理器之间的等待时间。当一用来检测分支预测的译码阶段和一相关的指令队列位置中有表示处理流中的一个泡的无效数据时,等待时间被减少。用来执行的指令被并行地插入译码阶段和指令队列中,从而使流水线阶段的长度减少了一个周期时间。
文档编号G06F9/38GK1673955SQ200510053649
公开日2005年9月28日 申请日期2005年3月9日 优先权日2004年3月26日
发明者J·N·迪芬德弗, R·W·杜因, B·M·斯坦普尔, S·R·特斯塔, 土屋宪一 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1