维护转移信息的系统与方法

文档序号:6418911阅读:184来源:国知局
专利名称:维护转移信息的系统与方法
技术领域
本发明涉及对中央处理单元中的指令流水线的改进。具体地,本发明涉及与转移指令相关的信息的维护。
当代中央处理单元(CPU)为了提高程序执行速度包含指令流水线。通常,在指令流水线中,以下述方式取回与解码程序指令,即在任何给定时间上,若干程序指令处于取回或解码的各阶段中。流水作业通过试图保证微处理器的执行单元没有必要等待指令而加快执行时间。理想地,当执行单元完成了一条指令的执行时,另一条指令已经取出与译码并准备好执行。一个示范性流水作业微处理器是Intel的PentiumPro。为了使流水作业微处理器高效地操作,指令是连续地取出及馈送到流水线中的。在大多数情况中,取单元事先知道下一条要取的指令地地址,通常是下一个顺序地址。然而,当取出条件转移指令时,在转移条件没有完全解决以前,取单元不能取后续指令。在流水作业的微处理器中,在转移指令接近到达流水线终点并执行之前,转移条件不可能完全解决。从而,由于未解决的转移条件防碍取单元知道下一次取哪些指令而取单元停止工作。
为了缓和这一问题,诸如Intel的Pentium与PentiumPro微处理器等一些微处理器利用转移预测逻辑来预测转移条件的结果及相应的转移方向(即“采取”或“不采取”)。取单元然后用转移预测来确定下一条要取的指令。如果转移预测逻辑预测采取转移,则取单元取在转移目标地址上的指令。如果转移预测逻辑预测不采取转移,则取单元继续按顺序取指令。
在Intel的PentiumPro微处理器中,转移预测是至少部分地根据各转移的历史的。具体地,利用过去取转移指令的存储器地址在转移目标缓冲器(BTB)(高速后备缓冲器)中执行查找。如果分支不在转移目标缓冲器中,即高速缓冲器不命中,则预测不采取转移而取单元继续顺序地取指令。
如果分支在转移目标缓冲器中,即高速缓冲器命中,便利用转移目标缓冲器项的“历史位”的状态来确定应将转移预测为采取或不采取。如果将转移预测为采取,则取单元取在转移目标地址上开始的指令。如果将转移预测为不采取,则取单元继续顺序地取指令。
当在诸如指令退役而转移完全解决时,便用结果(即是否采取转移,及如果采取则转移目标地址)更新转移目标缓冲器。授予Hoyt等人的美国专利号5,574,871、Hoyt等人的5,577,217、Hoyt等人的5,584,001中详细描述了转移目标缓冲器的示范性实施例。
在诸如Intel的PentiumPro微处理器等深度流水作业系统中,转移误预测的代价是相当高的。如果误预测了转移,流水线中转移指令(即流水线中上游)后面的指令是不正确的。从而,必须冲刷流水线,及必须重新启动流水线。因此使转移预测尽可能正确极为重要。
在具有单指令源及单重新启动点的系统中上述转移预测机制工作得合理地好。然而,对于具有多个指令源的系统及其中的指令流水线可在若干重新启动点中任何一个上重新启动的系统而言,这一机制是不足的。
在本发明的示范性实施例中,提供了微处理器中的指令流水线,指令流水线包含多个流水线单元,各流水线单元处理包含转移指令在内的多条指令。指令流水线还包含存储各自的转移信息数据(如转移历史信息、关于转移地址的信息、关于转移目标地址的信息等)的多个存储器。各存储器与至少一个流水线单元关联。各相应转移信息数据是作为至少一条受处理的转移指令的函数确定的。
按照示范性实施例,流水线单元中的两个包含用于作为所存储的转移信息数据的函数预测转移方向的转移预测电路。


图1a示出本发明的示范性实施例的总体结构的框图。
图1b示出本发明的另一示范性实施例的总体结构的框图。
图2示出本发明的示范性实施例中的指令译码器单元上的转移信息维护的流程图。
图3为本发明的示范性实施例中的跟踪高速缓冲器单元上的转移信息维护的流程图。
图4a为用于“按照次序”维护具有按照本发明的示范性实施例的不按次序执行单元的指令流水线的转移历史的流程图。
图4b为按照本发明的示范性实施例从宏转移误预测中恢复的流程图。
图5a为在本发明的示范性实施例中的写回单元上的转移信息维护的流程图。
图5b为按照本发明的示范性实施例从EVENT(事件)与陷阱中恢复的流程图。
总体系统结构参见附图,首先参见图1a,其中示出了本发明的总体系统结构。如所示,指令流水线900包含多个流水线单元,即流水线单元1 910、流水线单元2 920、流水线单元3 930及流水线单元n 940。虽然示出了四个流水线单元,指令流水线900可包含更多或更少的单元。此外,虽然流水线900的流水线单元是示出为串联的,其它联接方式也是可能的。例如,流水线3 930可与诸如流水线单元2 920等另一单元并联。
例如,流水线单元1 910可以是流水线900的指令源。这便是,流水线单元1 910可从例如主存储器、高速缓冲存储器等中取指令,并将所取的指令提供给指令流水线900供处理。在所示的实施例中,各流水线单元处理从上游流水线单元接收的指令,然后将处理过的指令传递给下一个下游单元。例如,流水线单元2 920可从流水线单元1 910接收指令及译码所接收的指令。然后将译码的指令传递给流水线单元3 930。(当然,在一些处理器中,指令不需要译码。在这种处理器中,指令流水线900不需要译码单元)。
按照本发明,流水线900中可包含第二指令源。例如流水线单元3 930可从例如主存储器、高速缓冲存储器等取指令,并将指令提供给流水线900。在这一系统中,流水线单元3 930可在流水线单元1 910不提供指令给流水线900的期间提供指令给流水线900。这便是,在任何给定时间上通常只有一个流水线单元提供指令给流水线900(但是在特殊结构中,有可能多个单元同时提供指令给流水线900)。
指令流水线100还包含指令执行单元。例如,流水线单元n 940可接收来自上游流水线单元的指令,并以接收的次序或打乱的序列执行这些指令(取决于例如处理器的特定结构)。
流水线900包含转移预测电路。具体地,诸如流水线单元1 910等指令源可顺序地取指令。然而,在取到转移指令之后,下一条顺序指令可能不是下一条应取的指令。例如,如果转移指令是无条件转移,则作为替代希望取在转移指令的目标地址上的指令。从而,流水线单元1 910可包含转移预测电路,以便在取得转移指令之后,流水线单元1 910可确定下一条应取的指令。在无条件转移指令的情况中,可进行静态预测。例如,转移预测电路可将无条件转移确定为永远采取的(其中“采取”表示跳转到转移目标地址而“不采取”表示进行到下一条顺序指令)。然而,转移预测电路也可进行动态预测。在条件转移指令的情况中,执行之前不知道采取不采取转移。从而,转移预测电路可根据诸如转移指令的“历史”预测转移方向(即采取或不采取)。这样,可维护转移信息。转移信息可提供最近N条转移指令是预测为(或实际上是)采取或不采取(如转移历史)的指示,或可提供完整的或部分转移指令地址或转移目标地址的指示。转移信息可以是各分支特定的,例如,可维护指示转移指令的地址及采取或不采取特定转移指令的指示的表。或者,转移信息可以是“全程”形式的。例如,转移信息可指示各最近N条转移指令,是否将这些转移指令预测(或实际上)成是采取或不采取的,而不论特定的转移指令。当然,其它形式的转移信息也是可能的。
在本发明的示范性实施例中,指令流水线900的各流水线单元维护各自的转移信息数据,即转移历史1 911、转移历史2 921、转移历史3 931及转移历史n 941(在替代实施例中,不是所有流水线单元都维护转移历史)。对于各流水线单元所处理与识别的至少某些转移指令,流水线单元更新其各自的转移信息数据。
各自的转移信息数据是各流水线单元与其它流水线单元合作维护的。具体地,如果流水线单元检测到上游流水线单元不正确地预测转移方向,检测到错误预测的单元便“向后传播”其各自的转移信息数据。例如,如果流水线单元n 940检测到流水线单元1 910的转移预测电路误预测转移方向,则流水线单元n 940将其各自的转移历史n 940传输给上游流水线单元,即流水线单元3 930、流水线单元2 920与流水线单元1 910。然后,这些上游流水线单元的每一个可利用接收的转移信息数据来更新其本身的相应转移信息数据。作为替代,流水线单元n 940可将转移历史n 941简单地复制到各上游转移历史中,即转移历史3 931、转移历史2 921及转移历史1 910。或者,流水线单元n 940可令流水线中另一单元执行复制或更新。
此外,在具有一个以上指令源的指令流水线中,每次指令源从下游流水线单元切换到上游流水线单元时,转移信息数据可例如向后传播。例如,当流水线单元3 930提供指令给流水线900时,由于流水线单元1 910与流水线单元2 920是在流水线单元3 930的上游,流水线单元1 910与流水线单元2 920都看不见(或不处理)流水线单元3 930提供的指令。从而,转移历史1 911与转移历史2 921都不反映关于流水线单元3 930所提供的转移指令的信息。按照本发明的示范性实施例,每次指令源从下游单元(例如流水线单元3 930)切换到上游单元(例如流水线单元1 910)时,便向后传播下游转移信息数据。从而,用当前信息更新上游转移信息数据。
另一示范性实施例的概述图1b示出本发明的另一示范性实施例。本实施例说明将本发明应用在例如处理Intel体系结构(即×86)指令(如IA-32)的指令流水线上,然而,正如本技术中的普通技术人同能理解的,可将本发明应用在诸如RISC与CISC体系结构等其它处理器体系结构或包含使用指令流水线的任何处理体系结构的指令流水线上。
参见图1b,其中示出了按照本发明的示范性指令流水线100。指令流水线100可包含例如6个主要阶段或单元(各流水线阶段或单元实际上可由若干子阶段组成),其中包含取指令单元(IFU)110、指令译码单元(ID)120、跟踪高速缓冲器单元130、分配单元(ALLOC)140、执行单元(EX)150、及写回单元(WB)160。
在本发明的示范性实施例中,取指令单元110为指令流水线100的程序指令源。具体地,取指令单元110按严格的程序次序从主存储器111中取例如宏代码指令,以便将指令流提供给流水线100。当检测到转移指令时,取指令单元110上的转移预测逻辑,具体地转移目标缓冲器(BTB)113作出关于在最终执行了转移时将采取还是不采取转移的动态预测。(转移目标缓冲器113作出它所识别的每一条宏代码转移指令的转移预测)。如果转移目标缓冲器113预测将不采取该转移,则取指令单元110继续顺序地取指令。反之如果转移目标缓冲器113预测将采取转移,则转移目标缓冲器113指示取指令单元110从转移目标地址开始取指令。以这一方式,取指令单元110在取后面的指令之前无须等待任何有关转移的条件完全解决。在示范性实施例中,如果转移目标缓冲器113并未识别出特定指令为转移指令(即使事实上它是转移指令),它将不进行转移预测而取指令单元110继续顺序地取指令。
取指令单元110将每一条取出的指令推到流水线100中。如果所取的指令是转移指令(且转移目标缓冲器113识别出该指令是这样的),则取指令单元110也将取指令单元指示采取还是不采取转移的转移预测位(未示出)推到流水线100中。
可将推到流水线100中的指令与数据有选择地存储在取指令单元110与下一流水线单元之间的一系列锁存器112中。锁存器112的数目对应于取指令单元110与流水线100中下一个下游单元之间的流水线100的深度。
在示范性实施例中,指令译码单元120接收通过锁存器112来自取指令单元110的所取的宏代码指令,并按先进先出(FIFO)次序处理这些宏代码指令。指令译码单元120将宏代码指令译码成例如称作微操作或单位操作(UOP)的固定长度RISC指令。各宏代码指令可译码成一或若干微操作。分配单元140将顺序号分配给这些微操作,并将其临时存储在指令存储池141中。
在本发明的示范性实施例中,指令流水线100包含第二程序指令源。具体地,跟踪高速缓冲器单元130将微操作形式的指令序列存储在高速缓冲存储器中,以便稍后将这些指令提供给分配单元140供执行单元150执行。
按照本发明的示范性实施例,跟踪高速缓冲器单元130在高速缓冲存储器中建立与存储指令“踪迹”。这些指令踪迹是在取指令单元110作为指令源工作(即在跟踪高速缓冲器单元130是在“建立”模式中时)建立的。具体地,对于一定的指令序列,跟踪高速缓冲器单元130建立与存储可作为一块代码,即“跟踪段”访问的宏代码指令序列。如果序列中包含转移指令,只存储沿预测的指令路径(如转移目标缓冲器113所预测的)的指令。此外,跟踪高速缓冲器单元130存储转移预测(如伴随转移指令的预测位所标识的)。在授予Peleg等人的美国专利号5,381,533中进一步详述跟踪高速缓冲器单元130的结构与操作。
跟踪高速缓冲器单元130控制进入指令存储池141中的指令的源是取指令单元110(通过指令译码单元120)还是跟踪高速缓冲器单元130。具体地,跟踪高速缓冲器单元130窥探指令路径122(在分配单元140与指令存储池141之间)。如果跟踪高速缓冲器单元130识别出源自IFU 110的指令对应于指令跟踪段中的第一条指令(“踪迹头”),即跟踪高速缓冲器命中,则跟踪高速缓冲器单元130信令取指令单元110不继续取指令,而跟踪高速缓冲器单元130将来自其高速缓冲存储器中的适当指令提供给分配单元140,即跟踪高速缓冲器单元130进入“流”模式。当跟踪高速缓冲器单元130检测出进一步必需的指令不在高速缓冲器中时(即跟踪高速缓冲器不命中),跟踪高速缓冲器单元130指示取指令单元110开始取指令(在跟踪高速缓冲器单元130提供的地址上),并且跟踪高速缓冲器单元130不再继续提供指令给分配单元140。
跟踪高速缓冲器单元130包含转移预测电路、跟踪转移目标缓冲器131。如果跟踪单元包含转移指令,跟踪转移目标缓冲器131动态地预测“跟踪离开”条件。具体地,随着跟踪高速缓冲器单元130提供跟踪指令给分配单元140,跟踪转移目标缓冲器131执行其本身的关于是否采取还是不采取跟踪段中的转移指令的动态预测。
在本发明的示范性实施例中,执行单元150从指令存储池141中取得指令。当可以获得各微操作所需的数据与执行单元时,执行单元150便以任何可能的次序执行指令存储池141中的微操作。从而,执行单元150是流水线的无次充(000)部分。
最后,写回单元160“退役”各执行的微操作。即,写回单元160按原始程序流的次序将各微操作执行结果提交给处理器的寄存器组。从而,写回单元160是流水线的有次序的后端。动态转移预测在本发明的示范性实施例中,流水线100中的两个单元执行动态转移方向预测,转移目标缓冲器113及跟踪转移目标缓冲器131。具体地,对于各自的单元检测到的各转移指令,转移目标缓冲器113与跟踪转移目标缓冲器131作出关于在最终执行时采取还是不采取转移指令的预测。转移目标缓冲器113及跟踪转移目标缓冲器131两者都将它们的各自的预测至少部分地基于各自的“全程转移历史”。全程转移历史可提供例如前面的转移指令的方向的指示(即采取或不采取转移)。例如,取指令单元110维护全程历史IFU历史1 117供转移目标缓冲器113用于转移预测。IFU历史1 117是对转移目标缓冲器113本地维护的。对应地,跟踪高速缓冲器单元130维护全程历史TC历史2 133供跟踪转移目标缓冲器131在作出其转移预测中使用。TC历史2 133是对跟踪转移目标缓冲器131本地维护的。各转移目标缓冲器113与跟踪转移目标缓冲器130期望历史是不同形式的,从而,取指令单元110与跟踪高速缓冲器单元130使用不同方法来确定历史的新值。在另一实施例中,转移目标缓冲器113与跟踪转移目标缓冲器130可能期望历史是相同形式的,从而有可能转移目标缓冲器113与跟踪转移目标缓冲器130两者只利用一个全程历史。
在本发明的示范性实施例中,对于它检测到并预测为“采取”的各条件转移指令,取指令单元110确定作为IFU历史1 117的旧值与转移指令的地址的函数的新值来存储到IFU历史1 117中,例如,“新”值=(“旧”值XOR addr[3∶0])<<4(新值等于旧值与转移指令的地址的低4位异或运算然后左移4位)。相应地,将若干前面“采取”的转移的地址的低4位维护在IFU历史1 117中。可用其它方法计算或表示转移指令的历史。例如,有可能利用不同的函数来确定新历史。或者,IFU历史1 117可简单地包含可能与存储的转移地址对应的转移预测的栈、列表或表(如“TNTTNNT”或“1011001”,其中“T”或“1”表示转移“采取”条件而“N”或“O”表示转移“不采取”条件)。当然反映转移历史的其它方法也是可能的。
在示范性实施例中,跟踪高速缓冲器单元130利用与取指令单元110所用的计算新历史的不同函数。具体地,对于它沿指令路径122检测到(窥探到)的各转移指令(无论采取或不采取),跟踪高速缓冲器单元130作为老历史、转移地址与预测(即采取或不采取)的函数确定新值来存储到TC历史2 133中,例如,“新”值=(“旧”值XOR addr[3∶0])·预测(新值等于旧值与转移地址的低4位进行异或运算与预测拼接)。从而在IFU历史1 117中维护若干前面的转移的地址的低4位以及各转移的预测方面(“采取”或“不采取”,其中例如可将“采取”表示为“1”而将“不采取”表示为“0”)。对于IFU历史1 117,也能利用诸如上面提到的其它方法来反映转移历史。
例如,可将IFU历史1 117与TC历史2 133存储在各自的移位寄存器中,然而也可使用另一存储设备。(术语IFU历史1及TC历史2用于指称这些值并附加指称存储这些值的存储设备)。IFU历史1 117与TC历史2 133反映分别由取指令单元110与跟踪高速缓冲器单元130检测到的转移指令的历史。如图1b中所示,取指令单元110在转移目标缓冲器113上维护IFU历史1 117,而跟踪高速缓冲器单元130在跟踪转移目标缓冲器131上维护TC历史2 133。
转移历史的维护取指令单元110及跟踪高速缓冲器单元130合作并与流水线110中其它单元同步(分别)维护IFU历史1 117与TC历史2 133。指令译码单元120、跟踪高速缓冲器单元130及写回单元161控制各自的全程历史,即ID历史1 121、TC历史1 132及WB历史1 161的更新,以便用在流水线100中下游(相对于取指令单元110)获得的当前与精确信息协助维护IFU历史1 117。写回单元160还控制附加全程历史(在跟踪转移目标缓冲器131上维护的)WB历史2 162以便用流水线100中下游(相对于跟踪高速缓冲器单元130)获得的当前与精确信息协助维护TC历史2 133。此外,由于执行单元150以不按次序的序列执行指令,跟踪转移信息表135将两种全程历史,它所处理的各指令的TBIT历史1 151与TBIT历史2 152维护在一个表中。维护了TBIT历史1 151及TBIT历史2 152使流水线100能在误预测转移指令的事件中恢复全程转移历史的正确状态。具体地,TBIT历史1 151用于恢复IFU历史1 117的正确状态,而TBIT历史2 152用于恢复TC历史2 133的正确状态。表1(下面)概括示范性转移历史历史 控制单元 示范目的IFU-历史1 117取指令单元110 转移目标缓冲器113预测ID-历史1 121 指令译码单元120维护IFU-历史1 117TC-历史1 132 跟踪高速缓冲器单元132 维护IFU-历史1 117TC-历史2 133 跟踪高速缓冲器单元132 跟踪转移目标缓冲器131预测WB-历史1 161 写回单元160维护IFU-历史1 117WB-历史2 162 写回单元160维护TC-历史2 133TBIT-历史1 151 跟踪转移信息表135 恢复IFU-历史1 117的正确状态TBIT-历史2 152跟踪转移信息表135恢复TC-历史2 132的正确状态表1图2-5b的流程图示出流水线100中的单元为维护与同步转移历史所执行的示范性进程。(下面的说明中,用100系列号标识的各元素示出在图1b中)。
参见图2的流程图,其中示出了指令译码单元120关于维护转移历史执行的示范性进程。指令译码单元120按严格的FIFO次序连续地处理来自锁存器112的宏代码指令(步骤210)。更具体地,指令译码单元120将各宏代码指令译码成一或多个微操作(步骤220)。然后将各微操作传输给分配单元140(步骤230)。
下面指令译码单元120测试宏代码指令来确定该指令是否转移指令(步骤240)。如果该宏代码指令不是转移指令,指令译码单元120便处理下一条宏代码指令(步骤210)。
如果宏代码指令是转移指令,指令译码单元120通过观察转移预测位来确定转移目标缓冲器113是否在该指令上作出转移方向预测(步骤250)。如上所述,任何转移目标缓冲器113的转移方向预测(采取或不采取)是在流水线100中与宏代码指令一起传输的。在示范实施例中,指令译码单元120并不“第二次猜测”转移目标缓冲器113的预测。从而,如果转移目标缓冲器113已作出转移预测,指令译码单元120只是向取指令单元110发信号从而在必要时更新ID历史1 121。
具体地,如果转移目标缓冲器113作出了转移预测,指令译码单元120通过测试预测位来判定采取还是不采取转移指令(步骤255)。如果采取转移,指令译码单元120信令取指令单元110更新ID历史1121(步骤258)。具体地,指令译码单元120将转移地址传输给取指令单元110。然后取指令单元110用与为IFU历史1 117确定新值相同的方式为ID历史1 121确定新值,即新值=(旧值XOR addr[3∶0])<<4。
如果转移目标缓冲器113并未作出转移方向预测(步骤250),则取指令单元110判定该转移指令是否无条件转移指令(步骤260)。如果该指令是无条件转移,指令译码单元120便预测(如静态预测)在执行时采取转移。相应地,指令译码单元120信令取指令单元110以上述方式(参照步骤258)更新ID历史1 121(步骤275)。
此外,如果转移指令是无条件转移指令,转移目标缓冲器113并不将该指令识别为这样的(因为步骤250指明转移目标缓冲器113并不作出预测),因此并不指示取指令单元110去取转移目标地址上的指令。从而,流水线100中的下一条指令不是正确的指令。相应地,指令译码单元120向取指令单元110发信号以将ID历史1 121复制到IFU历史1 117中(由于ID历史1 121现在具有正确的转移历史而IFU历史1 117是不正确的,因为它未曾考虑到当前的无条件转移)(步骤275)。相应地,实际上将ID历史1 121中的值向流水线100中“上游”传播。
此外,指令译码单元120指示取指令单元110重新启动,具体地,现在取在转移目标地址上开始的指令,并且还冲刷取指令单元110与指令译码单元120之间的流水线100的部分(例如通过复位锁存器112)(步骤278)。
如果该指令不是无条件转移指令(步骤260),指令译码单元120判定该转移指令是否条件向后转移指令(即,转移目标地址<转移指令地址)(步骤270)。如果是,指令译码单元120预测将采取该转移指令(即静态预测)(向后转移指令通常出现在程序循环的末尾,并且除外最后一次执行它,每次执行它时通常是采取的)。从而,指令译码单元120向取指令单元110发信号以更新ID历史1 121来反映这一转移预测(新值=(旧值XOR addr[3∶0])<<4)(步骤265)。
此外,由于转移目标缓冲器113并不将该指令识别为采取转移,流水线100中的下一条指令是不正确的。即,由于转移目标缓冲器113并不将该指令识别为采取转移,取指令单元110必定已经以不正确的顺序取出了该当前转移指令后面的指令。从而,指令译码单元120向取指令单元110发信号将ID历史1 121复制到IFU历史1 117中,然后向取指令单元110发信号以重新启动流水线100(步骤268)。
如果转移既不是无条件转移也不是条件向后转移,指令译码单元120预测将不采取转移。从而,转移目标缓冲器113不识别该指令为转移也无所谓。具体地,IFU历史1 117仍然正确(由于IFU历史1 117包含只与“采取”转移相关的信息)。再者,由于指令译码单元120已预测不采取该转移,指令译码单元120预期取指令单元110已顺序地继续处理指令(这是因为转移目标缓冲器113未识别转移而这样做的,从而并未指示取指令单元110采取转移)。相应地,处理下一条指令(步骤210)。
图3的流程图示出跟踪高速缓冲器单元130关于维护转移历史执行的示范进程。参见图3,跟踪高速缓冲器单元130窥探指令路径122并在建立模式中(步骤305)。在检测到宏代码指令时,跟踪高速缓冲器单元130测试判定该宏代码指令是否与存储在其高速缓冲器中的任何跟踪段的第一条指令(即踪迹头)匹配(步骤310)。
如果该宏代码指令不是踪迹头,跟踪高速缓冲器单元130测试该宏代码指令并判定该指令是否转移指令(步骤311)。如果否,跟踪高速缓冲器单元130继续窥探指令路径122(步骤305)。
如果该宏代码指令为条件转移指令(步骤311),跟踪高速缓冲器单元130用转移地址及转移方向预测(通过调查上述转移方向预测位确定的)更新TC历史2 133(步骤312)。具体地,跟踪高速缓冲器130将TC历史2 133更新如下“新”值=(“旧”值XORaddr[3∶0])·预测。
接着,如果转移预测为采取(步骤313),跟踪高速缓冲器单元130向取指令单元110发信号用转移地址更新TC历史1 132,即“新”值=(“旧”值XOR addr[3∶0])<<4(步骤314)。
然后跟踪高速缓冲器单元130继续窥探指令路径122(步骤305)。
如果宏代码指令为踪迹头(步骤310),跟踪高速缓冲器单元130进入“流模式”(步骤315)。在流模式中,跟踪高速缓冲器单元130将来自适当的跟踪段的信息提供给分配单元140(步骤315)。此外,跟踪高速缓冲器单元130向取指令单元110发信号以停止取指令。
对于跟踪高速缓冲器单元130提供给分配单元140的每一条指令,跟踪高速缓冲器单元130都测试该指令是否转移指令(步骤320)。如果指令为转移指令,跟踪转移目标缓冲器131预测执行时采取或不采取该转移指令(至少部分地根据TC历史2 133)(步骤325)。然后跟踪高速缓冲器单元130更新TC历史2 133(步骤330)。
如果将转移指令预测为采取的(步骤335),跟踪高速缓冲器单元130信令取指令单元110更新TC历史1(“新”值=(“旧”值XOR addr[3∶0])<<4(步骤340)。否则,进程跳至步骤345。
接着,跟踪高速缓冲器单元130判定当前宏代码指令是否在跟踪段的末尾,或“跟踪离开”条件存在(步骤345)。例如,如果跟踪段包含转移指令,并且跟踪转移目标缓冲器131预测在执行该指令时,转移方向将与跟踪段假定的方向不同(即,跟踪转移目标缓冲器131的预测与转移目标缓冲器113的原始预测不同),则可能存在跟踪离开条件。如果宏代码指令不在跟踪段末尾,且跟踪高速缓冲器单元130并未检测到跟踪离开条件,则跟踪高速缓冲器单元130处理下一条指令(步骤346)。
如果当前宏代码指令在跟踪段的末尾,或跟踪高速缓冲器单元130检测到跟踪离开条件,则跟踪高速缓冲器单元130判定下一条要求的指令是否踪迹头(步骤350)。如果下一条要求的指令不是踪迹头,取指令单元110必须再一次开始取指令。从而,跟踪高速缓冲器单元130信令取指令单元110将TC历史1 132复制到ID历史1 121及IFU历史1 117中。在示范性实施例中,将IC历史1 132复制到ID历史1 121及IFU历史1 117中,由于当前值ID历史1 121及IFU历史1 117并不象TC历史1 132那样考虑跟踪高速缓冲器单元130提供给分配单元140的任何转移指令(步骤351)。
最后,跟踪高速缓冲器单元130信令取指令单元110重新启动(步骤352)。
如果下一条要求的指令是踪迹头(步骤350),便检索下一个要求的跟踪段(步骤315)。
图4a为跟踪转移信息表135关于转移历史维护所执行的进程的流程图。(跟踪转移信息表135是跟踪转移目标缓冲器131的一部分)。跟踪转移信息表135维护转移历史以便在转移误预测事件中提供同步转移历史的手段。具体地,执行单元150可能检测到转移误预测。然而,由于执行单元150不按次序处理指令,需要专用机构在检测到误预测的转移时来启动纠正在流水线100的上游维护的转移历史。从而,在本发明的示范性实施例中,利用了跟踪转移信息表135电路。从而,图4a示出了为恢复转移误预测而“按次序”维护转移历史而跟踪转移信息表135所执行的进程。图4b示出为从转移误预测中恢复而在流水线100中所执行的进程。
参见图4a,跟踪转移信息表135沿指令路径122(即在分配单元140与指令存储池141之间)检测微操作(步骤410)。对于它检测到的每一个微操作,跟踪转移信息表135存储某些信息在其表中,例如微操作的序号。如果该微操作是与宏转移指令关联的(步骤420),跟踪转移信息表135存储足够的数据来重建例如转移历史。在示范性实施例中,跟踪转移信息表135计算(及存储在其表中)两个转移历史值,TBIT历史1 151及TBIT历史2 152(步骤430、440)。
如果宏转移指令是预测为采取的,跟踪转移信息表135使用取指令单元110所用的相同公式为TBIT历史1 151计算新的转移历史值,即“新”值=(“旧”值XOR addr[3∶0])<<4,“旧”值为计算的最近TBIT历史1 151(为任何转移指令)。如果宏转移是预测为不采取的,跟踪转移信息表135将“旧”值存储在TBIT历史1 151中。
为了计算TBIT历史2 152的值(无论转移指令是预测为采取或不采取的),跟踪转移信息表135使用跟踪高速缓冲器单元130所用的相同公式计算新转移历史值,即“新”值=(“旧”值XORaddr[3∶0])·转移预测。
图4b示出当执行单元150检测到转移误预测时所执行的进程。首先,执行单元150将当前微操作的序号提供给跟踪转移信息表135(该微操作将是转移指令)(步骤450)。跟踪转移信息表135在表中查找对应于该序号的项(步骤460)。然后,跟踪转移信息表135将该项的TBIT历史1 151部分传输给转移目标缓冲器112(步骤470)。此外,取指令单元110将TBIT历史1 151复制到TC历史1 132、ID历史1 121及IFU历史1 117中(步骤480)。此外,跟踪高速缓冲器单元131将TBIT历史2 152复制到TC历史2 133中(步骤485)。最后,在取指令单元110或跟踪高速缓冲器单元130上重新启动流水线100(步骤490)。
参见图5a,提供了展示写回单元160与转移历史的维护协作执行的示范进程的流程图。在正常操作期间,写回单元160按严格的程序次序退役指令(步骤510)。对于各宏转移指令,写回单元160信令取指令单元110(如果采取该转移指令)及跟踪高速缓冲器单元130分别更新WB历史1 161及WB历史2 162。
具体地,如果采取转移,写回单元160信令取指令单元110更新WB历史1 161如下“新”值=(“旧”值XOR addr[3∶0])<<4。类似地,写回单元160信令跟踪高速缓冲器单元130更新WB历史2 162(无论采取或不采取转移)如下“新”值=(“旧”值XORaddr[3∶0])·预测(在这一情况下,“预测”为是否实际采取转移)。
微处理器检测诸如EVENTS(事件)与TRAPS(陷阱)等导致微处理器执行机器微代码的某些条件。(EVENTS与TRAPS是超出本讨论的范围的条件)。如果微处理器在指令上出现事件或检测到陷阱,便执行图5b中的进程。参见图5b,写回单元160信令取指令单元110将WB历史1 161复制到TC历史1 132、ID历史1 121及IFU历史117上(步骤550)。此外,写回单元160信令跟踪高速缓冲器单元130将WB历史2 162复制到TC历史2 133上(步骤555)。从而写回单元160所维护的转移历史实际上是在流水线100上向上游传播的。
最后,冲刷流水线100并起动机器微代码(步骤560)。
其它实施例虽然已参照其示范性实施例具体展示与描述了本发明,熟悉本技术的人员会理解可在其中作出形式上与细节上的各种改变而不偏离本发明的精神与范围。例如,在第二示范性实施例中维护了两组转移历史,即在转移目标缓冲器113上的转移历史(IFU历史1 117、ID历史1 121、TC历史1 132及WB历史1 161)及TBIT历史1 151、以及在跟踪转移目标缓冲器131上的转移历史(即WB历史1 162与TC历史2 133)及TBIT历史2 152。维护这两组转移历史因为示范性实施例的流水线100包含两个单元(转移目标缓冲器113及跟踪转移目标缓冲器131)根据转移历史执行动态转移预测,其中各预测单元期望用不同的函数计算历史值。如果将预测单元设计成根据用相同方法计算的转移历史信息进行预测,或者流水线100只包含单个预测单元,则只需要一组转移历史。预测单元有可能将预测基于存储在单一设备中的转移历史。再者,如果流水线100包含作出动态转移预测的第三单元,能够设想可维护第三组转移历史。
权利要求
1.一种微处理器中的指令流水线,包括多个流水线单元,各流水线单元处理多条指令,该多条指令包含多条转移指令;以及多个存储设备,各该多个存储设备存储各自的转移信息数据并且是与多个流水线单元之中至少一个关联的,每一个各自的转移信息数据是作为多个流水线单元中至少一个所处理的多条转移指令中至少一条的函数确定的;其中该多个流水线单元中的第一个为多个流水线单元中的第一个所处理的多条转移指令中至少一条作为存储在多个存储设备的第一个中的各自的转移信息数据的函数预测第一各自的转移方向,及该多个流水线单元中的第二个为多个流水线单元中的第二所处理的多条转移指令中至少一条作为存储在多个存储设备中的第二个中的各自的转移信息数据的函数预测第二各自的转移方向。
2.权利要求1的指令流水线,其中该多个流水线单元中的第一个是取指令单元,该取指令单元包含第一转移预测电路。
3.权利要求2的指令流水线,其中该多个流水线单元中的第二个是跟踪高速缓冲器单元,该跟踪高速缓冲器单元包含第二转移预测电路。
4.权利要求1的指令流水线,其中存储在多个存储设备中的第一个中的各自的转移信息数据是用第一函数确定的,及存储在多个存储设备中的第二个中的各自的转移信息数据是用第二函数确定的,第二函数与第一函数不同。
5.权利要求1的指令流水线,其中该多个流水线单元中的第三个能检测出转移误预测,及其中当多个流水线单元的第三个检测到转移误预测时至少一个流水线单元将存储在多个存储设备中第一个中的各自的转移信息数据复制到多个存储设备的第二个中。
6.权利要求5的指令流水线,其中该多个流水线单元的第三个是执行单元。
7.权利要求5的指令流水线,其中该多个存储设备中的第一个与该多个流水线单元之中的第四个关联,及该多个存储设备的第二个与该多个流水线单元中的第五个关联,多个流水线单元的第五个是相对于多个流水线单元中的第四个在指令流水线的上游。
8.权利要求5的指令流水线,其中至少一个流水线单元是取指令单元,及多个存储设备的第一个是与跟踪高速缓冲器单元关联的及多个存储设备的第二个与取指令单元关联。
9.一种微处理器中的指令流水线,包括多个流水线单元,该多个流水线单元中的每一个处理多条指令,多条指令的子集包含多条转移指令,其中该多个流水线单元的第一个在第一时间中作为第一指令源操作,及该多个流水线单元的第二个在第二时间中作为第二指令源操作,第二时间与第一时间不同;以及多个存储设备,该存储设备的每一个存储各自的转移信息数据并与多个流水线单元之中至少一个关联,每一个各自的转移信息数据是作为该多个流水线单元的关联的至少一个所处理的多条转移指令的子集的函数确定的;第一预测电路,用于作为存储在该多个存储设备的第一个中的各自的转移信息数据的函数预测第一转移方向,该第一转移预测是用于该多个流水线单元的第一个所处理的多条转移指令中至少一条的。
10.权利要求9的指令流水线,还包括第二预测电路,用于作为存储在该多个存储设备的第二个中的各自的转移信息数据的函数预测第二个各自的转移方向,该第二个各自的转移预测是用于该多个流水线单元的第二个所处理的多条转移指令中至少一条的。
11.权利要求10的指令流水线,其中多个存储设备的第一个与该多个存储设备的第二个是同一设备。
12.权利要求10的指令流水线,其中存储在该多个存储设备的第一个中的各自的转移信息数据是用第一函数确定的,及存储在该多个存储设备的第二个中的各自的转移信息数据是用第二函数确定的,第二函数与第一函数不同。
13.权利要求9的指令流水线,其中该多个流水线单元的第三个不按顺序处理指令。
14.权利要求13的指令流水线,其中至少一个存储设备包含一张表,该表存储多个各自的转移信息数据,各该多个转移信息数据对应于各自的指令序列号。
15.权利要求13的指令流水线,其中该多个流水线单元的第三个是执行单元。
16.权利要求9的指令流水线,其中该多个流水线单元的第三个能检测出转移误预测,及其中至少一个流水线单元当该多个流水线单元的第三个检测到转移误预测时,将存储在多个存储设备的第一个中的各自的文件信息数据复制到该多个存储设备的第二个中。
17.权利要求9的指令流水线,其中该多个流水线单元的第三个取作为预测的第一转移方向的函数的下一条指令。
18.一种维护微处理器的指令流水线中的转移信息的方法,该指令流水线包含多个流水线单元,包括下述步骤在第一时间间隔期间由该多个流水线单元的第一个提供第一多条指令给指令流水线,该第一多条指令包含第一转移指令;作为第一转移指令与存储在第一存储设备中的一个值的函数确定第一转移信息数据;将该第一转移信息数据存储在第一存储设备中;将该第一转移信息数据从第一存储设备复制到第二存储设备中;在第二时间间隔期间由该多个指令流水线单元的第二个提供第二多条指令给指令流水线,该第二时间间隔在第一时间间隔外面,第二多条指令包含第二转移指令,该多个流水线单元的第二个是在相对于该多个流水线单元的第一个指令流水线中的上游;作为第二转移指令与存储在第二存储设备中的第一转移信息数据的函数确定第二转移信息数据;以及将第二转移信息数据存储在第二存储设备中。
19.权利要求18的方法,还包括下述步骤作为第二转移信息数据的函数预测第三转移指令的转移方向。
20.权利要求18的方法,还包括下述步骤分配序号给第二转移指令;作为第二转移指令的函数确定第三转移信息数据;将第三转移信息数据存储在表项中,该表项是用该序号索引的。
21.权利要求20的方法,还包括下述步骤作为第二转移信息数据的函数为第三转移指令预测转移方向;如果预测的转移方向不正确检测到转移误预测;作为序号的函数从表项检索第三转移信息数据;将第三转移信息数据复制到第二存储设备中;以及将第三转移信息数据复制到第一存储设备中。
22.一种维护微处理器的指令流水线中的转移信息的方法,包括下述步骤提供第一转移指令给指令流水线,该第一转移指令包含未解决的条件;作为第一转移指令的函数确定第一转移信息数据;将第一转移信息数据存储在第一存储设备中;作为第一转移信息数据的函数预测第一转移指令的转移方向;作为预测的转移方向的函数确定指令地址;从确定的指令地址检索下一条指令;将下一条指令提供给指令流水线;分配序号给第一转移指令;作为第一转移指令的函数确定第二转移信息数据;将第二转移信息数据存储在表项中,该表项是用序号索引的;解决转移条件;作为解决步骤的函数确定实际转移方向;比较实际转移方向与预测转移方向;以及如果实际转移方向与预测转移方向不匹配作为序号的函数从表项检索第二转移信息数据;将第二转移信息数据复制到第一存储设备中;以及冲刷来自指令流水线的下一第指令。
23.权利要求22的方法,其中该预测步骤包含预测该转移指令是否要采取的一条。
全文摘要
提供了微处理器中的指令流水线。指令流水线包含多个流水线单元,各流水线单元处理包含转移指令在内的多条指令。指令流水线还包含存储各自的转移信息数据的多个存储设备。各存储设备与流水线单元中至少一个关联。每一个各自的转移信息数据是作为所处理的转移指令中至少一条的函数确定的。两个流水线单元包含转移预测电路,用于作为所存储的转移信息数据的函数预测转移方向。
文档编号G06F9/38GK1297546SQ99805187
公开日2001年5月30日 申请日期1999年4月20日 优先权日1998年4月20日
发明者R·V·德萨, A·B·凯克尔, G·S·舍菲尔, G·P·埃斯皮诺萨, S·卡拉法蒂斯, R·E·赫布达 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1