亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

維護(hù)轉(zhuǎn)移信息的系統(tǒng)與方法

文檔序號(hào):6418911閱讀:196來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):維護(hù)轉(zhuǎn)移信息的系統(tǒng)與方法
技術(shù)領(lǐng)域
本發(fā)明涉及對(duì)中央處理單元中的指令流水線的改進(jìn)。具體地,本發(fā)明涉及與轉(zhuǎn)移指令相關(guān)的信息的維護(hù)。
當(dāng)代中央處理單元(CPU)為了提高程序執(zhí)行速度包含指令流水線。通常,在指令流水線中,以下述方式取回與解碼程序指令,即在任何給定時(shí)間上,若干程序指令處于取回或解碼的各階段中。流水作業(yè)通過(guò)試圖保證微處理器的執(zhí)行單元沒(méi)有必要等待指令而加快執(zhí)行時(shí)間。理想地,當(dāng)執(zhí)行單元完成了一條指令的執(zhí)行時(shí),另一條指令已經(jīng)取出與譯碼并準(zhǔn)備好執(zhí)行。一個(gè)示范性流水作業(yè)微處理器是Intel的PentiumPro。為了使流水作業(yè)微處理器高效地操作,指令是連續(xù)地取出及饋送到流水線中的。在大多數(shù)情況中,取單元事先知道下一條要取的指令地地址,通常是下一個(gè)順序地址。然而,當(dāng)取出條件轉(zhuǎn)移指令時(shí),在轉(zhuǎn)移條件沒(méi)有完全解決以前,取單元不能取后續(xù)指令。在流水作業(yè)的微處理器中,在轉(zhuǎn)移指令接近到達(dá)流水線終點(diǎn)并執(zhí)行之前,轉(zhuǎn)移條件不可能完全解決。從而,由于未解決的轉(zhuǎn)移條件防礙取單元知道下一次取哪些指令而取單元停止工作。
為了緩和這一問(wèn)題,諸如Intel的Pentium與PentiumPro微處理器等一些微處理器利用轉(zhuǎn)移預(yù)測(cè)邏輯來(lái)預(yù)測(cè)轉(zhuǎn)移條件的結(jié)果及相應(yīng)的轉(zhuǎn)移方向(即“采取”或“不采取”)。取單元然后用轉(zhuǎn)移預(yù)測(cè)來(lái)確定下一條要取的指令。如果轉(zhuǎn)移預(yù)測(cè)邏輯預(yù)測(cè)采取轉(zhuǎn)移,則取單元取在轉(zhuǎn)移目標(biāo)地址上的指令。如果轉(zhuǎn)移預(yù)測(cè)邏輯預(yù)測(cè)不采取轉(zhuǎn)移,則取單元繼續(xù)按順序取指令。
在Intel的PentiumPro微處理器中,轉(zhuǎn)移預(yù)測(cè)是至少部分地根據(jù)各轉(zhuǎn)移的歷史的。具體地,利用過(guò)去取轉(zhuǎn)移指令的存儲(chǔ)器地址在轉(zhuǎn)移目標(biāo)緩沖器(BTB)(高速后備緩沖器)中執(zhí)行查找。如果分支不在轉(zhuǎn)移目標(biāo)緩沖器中,即高速緩沖器不命中,則預(yù)測(cè)不采取轉(zhuǎn)移而取單元繼續(xù)順序地取指令。
如果分支在轉(zhuǎn)移目標(biāo)緩沖器中,即高速緩沖器命中,便利用轉(zhuǎn)移目標(biāo)緩沖器項(xiàng)的“歷史位”的狀態(tài)來(lái)確定應(yīng)將轉(zhuǎn)移預(yù)測(cè)為采取或不采取。如果將轉(zhuǎn)移預(yù)測(cè)為采取,則取單元取在轉(zhuǎn)移目標(biāo)地址上開(kāi)始的指令。如果將轉(zhuǎn)移預(yù)測(cè)為不采取,則取單元繼續(xù)順序地取指令。
當(dāng)在諸如指令退役而轉(zhuǎn)移完全解決時(shí),便用結(jié)果(即是否采取轉(zhuǎn)移,及如果采取則轉(zhuǎn)移目標(biāo)地址)更新轉(zhuǎn)移目標(biāo)緩沖器。授予Hoyt等人的美國(guó)專(zhuān)利號(hào)5,574,871、Hoyt等人的5,577,217、Hoyt等人的5,584,001中詳細(xì)描述了轉(zhuǎn)移目標(biāo)緩沖器的示范性實(shí)施例。
在諸如Intel的PentiumPro微處理器等深度流水作業(yè)系統(tǒng)中,轉(zhuǎn)移誤預(yù)測(cè)的代價(jià)是相當(dāng)高的。如果誤預(yù)測(cè)了轉(zhuǎn)移,流水線中轉(zhuǎn)移指令(即流水線中上游)后面的指令是不正確的。從而,必須沖刷流水線,及必須重新啟動(dòng)流水線。因此使轉(zhuǎn)移預(yù)測(cè)盡可能正確極為重要。
在具有單指令源及單重新啟動(dòng)點(diǎn)的系統(tǒng)中上述轉(zhuǎn)移預(yù)測(cè)機(jī)制工作得合理地好。然而,對(duì)于具有多個(gè)指令源的系統(tǒng)及其中的指令流水線可在若干重新啟動(dòng)點(diǎn)中任何一個(gè)上重新啟動(dòng)的系統(tǒng)而言,這一機(jī)制是不足的。
在本發(fā)明的示范性實(shí)施例中,提供了微處理器中的指令流水線,指令流水線包含多個(gè)流水線單元,各流水線單元處理包含轉(zhuǎn)移指令在內(nèi)的多條指令。指令流水線還包含存儲(chǔ)各自的轉(zhuǎn)移信息數(shù)據(jù)(如轉(zhuǎn)移歷史信息、關(guān)于轉(zhuǎn)移地址的信息、關(guān)于轉(zhuǎn)移目標(biāo)地址的信息等)的多個(gè)存儲(chǔ)器。各存儲(chǔ)器與至少一個(gè)流水線單元關(guān)聯(lián)。各相應(yīng)轉(zhuǎn)移信息數(shù)據(jù)是作為至少一條受處理的轉(zhuǎn)移指令的函數(shù)確定的。
按照示范性實(shí)施例,流水線單元中的兩個(gè)包含用于作為所存儲(chǔ)的轉(zhuǎn)移信息數(shù)據(jù)的函數(shù)預(yù)測(cè)轉(zhuǎn)移方向的轉(zhuǎn)移預(yù)測(cè)電路。


圖1a示出本發(fā)明的示范性實(shí)施例的總體結(jié)構(gòu)的框圖。
圖1b示出本發(fā)明的另一示范性實(shí)施例的總體結(jié)構(gòu)的框圖。
圖2示出本發(fā)明的示范性實(shí)施例中的指令譯碼器單元上的轉(zhuǎn)移信息維護(hù)的流程圖。
圖3為本發(fā)明的示范性實(shí)施例中的跟蹤高速緩沖器單元上的轉(zhuǎn)移信息維護(hù)的流程圖。
圖4a為用于“按照次序”維護(hù)具有按照本發(fā)明的示范性實(shí)施例的不按次序執(zhí)行單元的指令流水線的轉(zhuǎn)移歷史的流程圖。
圖4b為按照本發(fā)明的示范性實(shí)施例從宏轉(zhuǎn)移誤預(yù)測(cè)中恢復(fù)的流程圖。
圖5a為在本發(fā)明的示范性實(shí)施例中的寫(xiě)回單元上的轉(zhuǎn)移信息維護(hù)的流程圖。
圖5b為按照本發(fā)明的示范性實(shí)施例從EVENT(事件)與陷阱中恢復(fù)的流程圖。
總體系統(tǒng)結(jié)構(gòu)參見(jiàn)附圖,首先參見(jiàn)圖1a,其中示出了本發(fā)明的總體系統(tǒng)結(jié)構(gòu)。如所示,指令流水線900包含多個(gè)流水線單元,即流水線單元1 910、流水線單元2 920、流水線單元3 930及流水線單元n 940。雖然示出了四個(gè)流水線單元,指令流水線900可包含更多或更少的單元。此外,雖然流水線900的流水線單元是示出為串聯(lián)的,其它聯(lián)接方式也是可能的。例如,流水線3 930可與諸如流水線單元2 920等另一單元并聯(lián)。
例如,流水線單元1 910可以是流水線900的指令源。這便是,流水線單元1 910可從例如主存儲(chǔ)器、高速緩沖存儲(chǔ)器等中取指令,并將所取的指令提供給指令流水線900供處理。在所示的實(shí)施例中,各流水線單元處理從上游流水線單元接收的指令,然后將處理過(guò)的指令傳遞給下一個(gè)下游單元。例如,流水線單元2 920可從流水線單元1 910接收指令及譯碼所接收的指令。然后將譯碼的指令傳遞給流水線單元3 930。(當(dāng)然,在一些處理器中,指令不需要譯碼。在這種處理器中,指令流水線900不需要譯碼單元)。
按照本發(fā)明,流水線900中可包含第二指令源。例如流水線單元3 930可從例如主存儲(chǔ)器、高速緩沖存儲(chǔ)器等取指令,并將指令提供給流水線900。在這一系統(tǒng)中,流水線單元3 930可在流水線單元1 910不提供指令給流水線900的期間提供指令給流水線900。這便是,在任何給定時(shí)間上通常只有一個(gè)流水線單元提供指令給流水線900(但是在特殊結(jié)構(gòu)中,有可能多個(gè)單元同時(shí)提供指令給流水線900)。
指令流水線100還包含指令執(zhí)行單元。例如,流水線單元n 940可接收來(lái)自上游流水線單元的指令,并以接收的次序或打亂的序列執(zhí)行這些指令(取決于例如處理器的特定結(jié)構(gòu))。
流水線900包含轉(zhuǎn)移預(yù)測(cè)電路。具體地,諸如流水線單元1 910等指令源可順序地取指令。然而,在取到轉(zhuǎn)移指令之后,下一條順序指令可能不是下一條應(yīng)取的指令。例如,如果轉(zhuǎn)移指令是無(wú)條件轉(zhuǎn)移,則作為替代希望取在轉(zhuǎn)移指令的目標(biāo)地址上的指令。從而,流水線單元1 910可包含轉(zhuǎn)移預(yù)測(cè)電路,以便在取得轉(zhuǎn)移指令之后,流水線單元1 910可確定下一條應(yīng)取的指令。在無(wú)條件轉(zhuǎn)移指令的情況中,可進(jìn)行靜態(tài)預(yù)測(cè)。例如,轉(zhuǎn)移預(yù)測(cè)電路可將無(wú)條件轉(zhuǎn)移確定為永遠(yuǎn)采取的(其中“采取”表示跳轉(zhuǎn)到轉(zhuǎn)移目標(biāo)地址而“不采取”表示進(jìn)行到下一條順序指令)。然而,轉(zhuǎn)移預(yù)測(cè)電路也可進(jìn)行動(dòng)態(tài)預(yù)測(cè)。在條件轉(zhuǎn)移指令的情況中,執(zhí)行之前不知道采取不采取轉(zhuǎn)移。從而,轉(zhuǎn)移預(yù)測(cè)電路可根據(jù)諸如轉(zhuǎn)移指令的“歷史”預(yù)測(cè)轉(zhuǎn)移方向(即采取或不采取)。這樣,可維護(hù)轉(zhuǎn)移信息。轉(zhuǎn)移信息可提供最近N條轉(zhuǎn)移指令是預(yù)測(cè)為(或?qū)嶋H上是)采取或不采取(如轉(zhuǎn)移歷史)的指示,或可提供完整的或部分轉(zhuǎn)移指令地址或轉(zhuǎn)移目標(biāo)地址的指示。轉(zhuǎn)移信息可以是各分支特定的,例如,可維護(hù)指示轉(zhuǎn)移指令的地址及采取或不采取特定轉(zhuǎn)移指令的指示的表?;蛘?,轉(zhuǎn)移信息可以是“全程”形式的。例如,轉(zhuǎn)移信息可指示各最近N條轉(zhuǎn)移指令,是否將這些轉(zhuǎn)移指令預(yù)測(cè)(或?qū)嶋H上)成是采取或不采取的,而不論特定的轉(zhuǎn)移指令。當(dāng)然,其它形式的轉(zhuǎn)移信息也是可能的。
在本發(fā)明的示范性實(shí)施例中,指令流水線900的各流水線單元維護(hù)各自的轉(zhuǎn)移信息數(shù)據(jù),即轉(zhuǎn)移歷史1 911、轉(zhuǎn)移歷史2 921、轉(zhuǎn)移歷史3 931及轉(zhuǎn)移歷史n 941(在替代實(shí)施例中,不是所有流水線單元都維護(hù)轉(zhuǎn)移歷史)。對(duì)于各流水線單元所處理與識(shí)別的至少某些轉(zhuǎn)移指令,流水線單元更新其各自的轉(zhuǎn)移信息數(shù)據(jù)。
各自的轉(zhuǎn)移信息數(shù)據(jù)是各流水線單元與其它流水線單元合作維護(hù)的。具體地,如果流水線單元檢測(cè)到上游流水線單元不正確地預(yù)測(cè)轉(zhuǎn)移方向,檢測(cè)到錯(cuò)誤預(yù)測(cè)的單元便“向后傳播”其各自的轉(zhuǎn)移信息數(shù)據(jù)。例如,如果流水線單元n 940檢測(cè)到流水線單元1 910的轉(zhuǎn)移預(yù)測(cè)電路誤預(yù)測(cè)轉(zhuǎn)移方向,則流水線單元n 940將其各自的轉(zhuǎn)移歷史n 940傳輸給上游流水線單元,即流水線單元3 930、流水線單元2 920與流水線單元1 910。然后,這些上游流水線單元的每一個(gè)可利用接收的轉(zhuǎn)移信息數(shù)據(jù)來(lái)更新其本身的相應(yīng)轉(zhuǎn)移信息數(shù)據(jù)。作為替代,流水線單元n 940可將轉(zhuǎn)移歷史n 941簡(jiǎn)單地復(fù)制到各上游轉(zhuǎn)移歷史中,即轉(zhuǎn)移歷史3 931、轉(zhuǎn)移歷史2 921及轉(zhuǎn)移歷史1 910?;蛘?,流水線單元n 940可令流水線中另一單元執(zhí)行復(fù)制或更新。
此外,在具有一個(gè)以上指令源的指令流水線中,每次指令源從下游流水線單元切換到上游流水線單元時(shí),轉(zhuǎn)移信息數(shù)據(jù)可例如向后傳播。例如,當(dāng)流水線單元3 930提供指令給流水線900時(shí),由于流水線單元1 910與流水線單元2 920是在流水線單元3 930的上游,流水線單元1 910與流水線單元2 920都看不見(jiàn)(或不處理)流水線單元3 930提供的指令。從而,轉(zhuǎn)移歷史1 911與轉(zhuǎn)移歷史2 921都不反映關(guān)于流水線單元3 930所提供的轉(zhuǎn)移指令的信息。按照本發(fā)明的示范性實(shí)施例,每次指令源從下游單元(例如流水線單元3 930)切換到上游單元(例如流水線單元1 910)時(shí),便向后傳播下游轉(zhuǎn)移信息數(shù)據(jù)。從而,用當(dāng)前信息更新上游轉(zhuǎn)移信息數(shù)據(jù)。
另一示范性實(shí)施例的概述圖1b示出本發(fā)明的另一示范性實(shí)施例。本實(shí)施例說(shuō)明將本發(fā)明應(yīng)用在例如處理Intel體系結(jié)構(gòu)(即×86)指令(如IA-32)的指令流水線上,然而,正如本技術(shù)中的普通技術(shù)人同能理解的,可將本發(fā)明應(yīng)用在諸如RISC與CISC體系結(jié)構(gòu)等其它處理器體系結(jié)構(gòu)或包含使用指令流水線的任何處理體系結(jié)構(gòu)的指令流水線上。
參見(jiàn)圖1b,其中示出了按照本發(fā)明的示范性指令流水線100。指令流水線100可包含例如6個(gè)主要階段或單元(各流水線階段或單元實(shí)際上可由若干子階段組成),其中包含取指令單元(IFU)110、指令譯碼單元(ID)120、跟蹤高速緩沖器單元130、分配單元(ALLOC)140、執(zhí)行單元(EX)150、及寫(xiě)回單元(WB)160。
在本發(fā)明的示范性實(shí)施例中,取指令單元110為指令流水線100的程序指令源。具體地,取指令單元110按嚴(yán)格的程序次序從主存儲(chǔ)器111中取例如宏代碼指令,以便將指令流提供給流水線100。當(dāng)檢測(cè)到轉(zhuǎn)移指令時(shí),取指令單元110上的轉(zhuǎn)移預(yù)測(cè)邏輯,具體地轉(zhuǎn)移目標(biāo)緩沖器(BTB)113作出關(guān)于在最終執(zhí)行了轉(zhuǎn)移時(shí)將采取還是不采取轉(zhuǎn)移的動(dòng)態(tài)預(yù)測(cè)。(轉(zhuǎn)移目標(biāo)緩沖器113作出它所識(shí)別的每一條宏代碼轉(zhuǎn)移指令的轉(zhuǎn)移預(yù)測(cè))。如果轉(zhuǎn)移目標(biāo)緩沖器113預(yù)測(cè)將不采取該轉(zhuǎn)移,則取指令單元110繼續(xù)順序地取指令。反之如果轉(zhuǎn)移目標(biāo)緩沖器113預(yù)測(cè)將采取轉(zhuǎn)移,則轉(zhuǎn)移目標(biāo)緩沖器113指示取指令單元110從轉(zhuǎn)移目標(biāo)地址開(kāi)始取指令。以這一方式,取指令單元110在取后面的指令之前無(wú)須等待任何有關(guān)轉(zhuǎn)移的條件完全解決。在示范性實(shí)施例中,如果轉(zhuǎn)移目標(biāo)緩沖器113并未識(shí)別出特定指令為轉(zhuǎn)移指令(即使事實(shí)上它是轉(zhuǎn)移指令),它將不進(jìn)行轉(zhuǎn)移預(yù)測(cè)而取指令單元110繼續(xù)順序地取指令。
取指令單元110將每一條取出的指令推到流水線100中。如果所取的指令是轉(zhuǎn)移指令(且轉(zhuǎn)移目標(biāo)緩沖器113識(shí)別出該指令是這樣的),則取指令單元110也將取指令單元指示采取還是不采取轉(zhuǎn)移的轉(zhuǎn)移預(yù)測(cè)位(未示出)推到流水線100中。
可將推到流水線100中的指令與數(shù)據(jù)有選擇地存儲(chǔ)在取指令單元110與下一流水線單元之間的一系列鎖存器112中。鎖存器112的數(shù)目對(duì)應(yīng)于取指令單元110與流水線100中下一個(gè)下游單元之間的流水線100的深度。
在示范性實(shí)施例中,指令譯碼單元120接收通過(guò)鎖存器112來(lái)自取指令單元110的所取的宏代碼指令,并按先進(jìn)先出(FIFO)次序處理這些宏代碼指令。指令譯碼單元120將宏代碼指令譯碼成例如稱(chēng)作微操作或單位操作(UOP)的固定長(zhǎng)度RISC指令。各宏代碼指令可譯碼成一或若干微操作。分配單元140將順序號(hào)分配給這些微操作,并將其臨時(shí)存儲(chǔ)在指令存儲(chǔ)池141中。
在本發(fā)明的示范性實(shí)施例中,指令流水線100包含第二程序指令源。具體地,跟蹤高速緩沖器單元130將微操作形式的指令序列存儲(chǔ)在高速緩沖存儲(chǔ)器中,以便稍后將這些指令提供給分配單元140供執(zhí)行單元150執(zhí)行。
按照本發(fā)明的示范性實(shí)施例,跟蹤高速緩沖器單元130在高速緩沖存儲(chǔ)器中建立與存儲(chǔ)指令“蹤跡”。這些指令蹤跡是在取指令單元110作為指令源工作(即在跟蹤高速緩沖器單元130是在“建立”模式中時(shí))建立的。具體地,對(duì)于一定的指令序列,跟蹤高速緩沖器單元130建立與存儲(chǔ)可作為一塊代碼,即“跟蹤段”訪問(wèn)的宏代碼指令序列。如果序列中包含轉(zhuǎn)移指令,只存儲(chǔ)沿預(yù)測(cè)的指令路徑(如轉(zhuǎn)移目標(biāo)緩沖器113所預(yù)測(cè)的)的指令。此外,跟蹤高速緩沖器單元130存儲(chǔ)轉(zhuǎn)移預(yù)測(cè)(如伴隨轉(zhuǎn)移指令的預(yù)測(cè)位所標(biāo)識(shí)的)。在授予Peleg等人的美國(guó)專(zhuān)利號(hào)5,381,533中進(jìn)一步詳述跟蹤高速緩沖器單元130的結(jié)構(gòu)與操作。
跟蹤高速緩沖器單元130控制進(jìn)入指令存儲(chǔ)池141中的指令的源是取指令單元110(通過(guò)指令譯碼單元120)還是跟蹤高速緩沖器單元130。具體地,跟蹤高速緩沖器單元130窺探指令路徑122(在分配單元140與指令存儲(chǔ)池141之間)。如果跟蹤高速緩沖器單元130識(shí)別出源自IFU 110的指令對(duì)應(yīng)于指令跟蹤段中的第一條指令(“蹤跡頭”),即跟蹤高速緩沖器命中,則跟蹤高速緩沖器單元130信令取指令單元110不繼續(xù)取指令,而跟蹤高速緩沖器單元130將來(lái)自其高速緩沖存儲(chǔ)器中的適當(dāng)指令提供給分配單元140,即跟蹤高速緩沖器單元130進(jìn)入“流”模式。當(dāng)跟蹤高速緩沖器單元130檢測(cè)出進(jìn)一步必需的指令不在高速緩沖器中時(shí)(即跟蹤高速緩沖器不命中),跟蹤高速緩沖器單元130指示取指令單元110開(kāi)始取指令(在跟蹤高速緩沖器單元130提供的地址上),并且跟蹤高速緩沖器單元130不再繼續(xù)提供指令給分配單元140。
跟蹤高速緩沖器單元130包含轉(zhuǎn)移預(yù)測(cè)電路、跟蹤轉(zhuǎn)移目標(biāo)緩沖器131。如果跟蹤單元包含轉(zhuǎn)移指令,跟蹤轉(zhuǎn)移目標(biāo)緩沖器131動(dòng)態(tài)地預(yù)測(cè)“跟蹤離開(kāi)”條件。具體地,隨著跟蹤高速緩沖器單元130提供跟蹤指令給分配單元140,跟蹤轉(zhuǎn)移目標(biāo)緩沖器131執(zhí)行其本身的關(guān)于是否采取還是不采取跟蹤段中的轉(zhuǎn)移指令的動(dòng)態(tài)預(yù)測(cè)。
在本發(fā)明的示范性實(shí)施例中,執(zhí)行單元150從指令存儲(chǔ)池141中取得指令。當(dāng)可以獲得各微操作所需的數(shù)據(jù)與執(zhí)行單元時(shí),執(zhí)行單元150便以任何可能的次序執(zhí)行指令存儲(chǔ)池141中的微操作。從而,執(zhí)行單元150是流水線的無(wú)次充(000)部分。
最后,寫(xiě)回單元160“退役”各執(zhí)行的微操作。即,寫(xiě)回單元160按原始程序流的次序?qū)⒏魑⒉僮鲌?zhí)行結(jié)果提交給處理器的寄存器組。從而,寫(xiě)回單元160是流水線的有次序的后端。動(dòng)態(tài)轉(zhuǎn)移預(yù)測(cè)在本發(fā)明的示范性實(shí)施例中,流水線100中的兩個(gè)單元執(zhí)行動(dòng)態(tài)轉(zhuǎn)移方向預(yù)測(cè),轉(zhuǎn)移目標(biāo)緩沖器113及跟蹤轉(zhuǎn)移目標(biāo)緩沖器131。具體地,對(duì)于各自的單元檢測(cè)到的各轉(zhuǎn)移指令,轉(zhuǎn)移目標(biāo)緩沖器113與跟蹤轉(zhuǎn)移目標(biāo)緩沖器131作出關(guān)于在最終執(zhí)行時(shí)采取還是不采取轉(zhuǎn)移指令的預(yù)測(cè)。轉(zhuǎn)移目標(biāo)緩沖器113及跟蹤轉(zhuǎn)移目標(biāo)緩沖器131兩者都將它們的各自的預(yù)測(cè)至少部分地基于各自的“全程轉(zhuǎn)移歷史”。全程轉(zhuǎn)移歷史可提供例如前面的轉(zhuǎn)移指令的方向的指示(即采取或不采取轉(zhuǎn)移)。例如,取指令單元110維護(hù)全程歷史IFU歷史1 117供轉(zhuǎn)移目標(biāo)緩沖器113用于轉(zhuǎn)移預(yù)測(cè)。IFU歷史1 117是對(duì)轉(zhuǎn)移目標(biāo)緩沖器113本地維護(hù)的。對(duì)應(yīng)地,跟蹤高速緩沖器單元130維護(hù)全程歷史TC歷史2 133供跟蹤轉(zhuǎn)移目標(biāo)緩沖器131在作出其轉(zhuǎn)移預(yù)測(cè)中使用。TC歷史2 133是對(duì)跟蹤轉(zhuǎn)移目標(biāo)緩沖器131本地維護(hù)的。各轉(zhuǎn)移目標(biāo)緩沖器113與跟蹤轉(zhuǎn)移目標(biāo)緩沖器130期望歷史是不同形式的,從而,取指令單元110與跟蹤高速緩沖器單元130使用不同方法來(lái)確定歷史的新值。在另一實(shí)施例中,轉(zhuǎn)移目標(biāo)緩沖器113與跟蹤轉(zhuǎn)移目標(biāo)緩沖器130可能期望歷史是相同形式的,從而有可能轉(zhuǎn)移目標(biāo)緩沖器113與跟蹤轉(zhuǎn)移目標(biāo)緩沖器130兩者只利用一個(gè)全程歷史。
在本發(fā)明的示范性實(shí)施例中,對(duì)于它檢測(cè)到并預(yù)測(cè)為“采取”的各條件轉(zhuǎn)移指令,取指令單元110確定作為IFU歷史1 117的舊值與轉(zhuǎn)移指令的地址的函數(shù)的新值來(lái)存儲(chǔ)到IFU歷史1 117中,例如,“新”值=(“舊”值XOR addr[3∶0])<<4(新值等于舊值與轉(zhuǎn)移指令的地址的低4位異或運(yùn)算然后左移4位)。相應(yīng)地,將若干前面“采取”的轉(zhuǎn)移的地址的低4位維護(hù)在IFU歷史1 117中??捎闷渌椒ㄓ?jì)算或表示轉(zhuǎn)移指令的歷史。例如,有可能利用不同的函數(shù)來(lái)確定新歷史?;蛘撸琁FU歷史1 117可簡(jiǎn)單地包含可能與存儲(chǔ)的轉(zhuǎn)移地址對(duì)應(yīng)的轉(zhuǎn)移預(yù)測(cè)的棧、列表或表(如“TNTTNNT”或“1011001”,其中“T”或“1”表示轉(zhuǎn)移“采取”條件而“N”或“O”表示轉(zhuǎn)移“不采取”條件)。當(dāng)然反映轉(zhuǎn)移歷史的其它方法也是可能的。
在示范性實(shí)施例中,跟蹤高速緩沖器單元130利用與取指令單元110所用的計(jì)算新歷史的不同函數(shù)。具體地,對(duì)于它沿指令路徑122檢測(cè)到(窺探到)的各轉(zhuǎn)移指令(無(wú)論采取或不采取),跟蹤高速緩沖器單元130作為老歷史、轉(zhuǎn)移地址與預(yù)測(cè)(即采取或不采取)的函數(shù)確定新值來(lái)存儲(chǔ)到TC歷史2 133中,例如,“新”值=(“舊”值XOR addr[3∶0])·預(yù)測(cè)(新值等于舊值與轉(zhuǎn)移地址的低4位進(jìn)行異或運(yùn)算與預(yù)測(cè)拼接)。從而在IFU歷史1 117中維護(hù)若干前面的轉(zhuǎn)移的地址的低4位以及各轉(zhuǎn)移的預(yù)測(cè)方面(“采取”或“不采取”,其中例如可將“采取”表示為“1”而將“不采取”表示為“0”)。對(duì)于IFU歷史1 117,也能利用諸如上面提到的其它方法來(lái)反映轉(zhuǎn)移歷史。
例如,可將IFU歷史1 117與TC歷史2 133存儲(chǔ)在各自的移位寄存器中,然而也可使用另一存儲(chǔ)設(shè)備。(術(shù)語(yǔ)IFU歷史1及TC歷史2用于指稱(chēng)這些值并附加指稱(chēng)存儲(chǔ)這些值的存儲(chǔ)設(shè)備)。IFU歷史1 117與TC歷史2 133反映分別由取指令單元110與跟蹤高速緩沖器單元130檢測(cè)到的轉(zhuǎn)移指令的歷史。如圖1b中所示,取指令單元110在轉(zhuǎn)移目標(biāo)緩沖器113上維護(hù)IFU歷史1 117,而跟蹤高速緩沖器單元130在跟蹤轉(zhuǎn)移目標(biāo)緩沖器131上維護(hù)TC歷史2 133。
轉(zhuǎn)移歷史的維護(hù)取指令單元110及跟蹤高速緩沖器單元130合作并與流水線110中其它單元同步(分別)維護(hù)IFU歷史1 117與TC歷史2 133。指令譯碼單元120、跟蹤高速緩沖器單元130及寫(xiě)回單元161控制各自的全程歷史,即ID歷史1 121、TC歷史1 132及WB歷史1 161的更新,以便用在流水線100中下游(相對(duì)于取指令單元110)獲得的當(dāng)前與精確信息協(xié)助維護(hù)IFU歷史1 117。寫(xiě)回單元160還控制附加全程歷史(在跟蹤轉(zhuǎn)移目標(biāo)緩沖器131上維護(hù)的)WB歷史2 162以便用流水線100中下游(相對(duì)于跟蹤高速緩沖器單元130)獲得的當(dāng)前與精確信息協(xié)助維護(hù)TC歷史2 133。此外,由于執(zhí)行單元150以不按次序的序列執(zhí)行指令,跟蹤轉(zhuǎn)移信息表135將兩種全程歷史,它所處理的各指令的TBIT歷史1 151與TBIT歷史2 152維護(hù)在一個(gè)表中。維護(hù)了TBIT歷史1 151及TBIT歷史2 152使流水線100能在誤預(yù)測(cè)轉(zhuǎn)移指令的事件中恢復(fù)全程轉(zhuǎn)移歷史的正確狀態(tài)。具體地,TBIT歷史1 151用于恢復(fù)IFU歷史1 117的正確狀態(tài),而TBIT歷史2 152用于恢復(fù)TC歷史2 133的正確狀態(tài)。表1(下面)概括示范性轉(zhuǎn)移歷史歷史 控制單元 示范目的IFU-歷史1 117取指令單元110 轉(zhuǎn)移目標(biāo)緩沖器113預(yù)測(cè)ID-歷史1 121 指令譯碼單元120維護(hù)IFU-歷史1 117TC-歷史1 132 跟蹤高速緩沖器單元132 維護(hù)IFU-歷史1 117TC-歷史2 133 跟蹤高速緩沖器單元132 跟蹤轉(zhuǎn)移目標(biāo)緩沖器131預(yù)測(cè)WB-歷史1 161 寫(xiě)回單元160維護(hù)IFU-歷史1 117WB-歷史2 162 寫(xiě)回單元160維護(hù)TC-歷史2 133TBIT-歷史1 151 跟蹤轉(zhuǎn)移信息表135 恢復(fù)IFU-歷史1 117的正確狀態(tài)TBIT-歷史2 152跟蹤轉(zhuǎn)移信息表135恢復(fù)TC-歷史2 132的正確狀態(tài)表1圖2-5b的流程圖示出流水線100中的單元為維護(hù)與同步轉(zhuǎn)移歷史所執(zhí)行的示范性進(jìn)程。(下面的說(shuō)明中,用100系列號(hào)標(biāo)識(shí)的各元素示出在圖1b中)。
參見(jiàn)圖2的流程圖,其中示出了指令譯碼單元120關(guān)于維護(hù)轉(zhuǎn)移歷史執(zhí)行的示范性進(jìn)程。指令譯碼單元120按嚴(yán)格的FIFO次序連續(xù)地處理來(lái)自鎖存器112的宏代碼指令(步驟210)。更具體地,指令譯碼單元120將各宏代碼指令譯碼成一或多個(gè)微操作(步驟220)。然后將各微操作傳輸給分配單元140(步驟230)。
下面指令譯碼單元120測(cè)試宏代碼指令來(lái)確定該指令是否轉(zhuǎn)移指令(步驟240)。如果該宏代碼指令不是轉(zhuǎn)移指令,指令譯碼單元120便處理下一條宏代碼指令(步驟210)。
如果宏代碼指令是轉(zhuǎn)移指令,指令譯碼單元120通過(guò)觀察轉(zhuǎn)移預(yù)測(cè)位來(lái)確定轉(zhuǎn)移目標(biāo)緩沖器113是否在該指令上作出轉(zhuǎn)移方向預(yù)測(cè)(步驟250)。如上所述,任何轉(zhuǎn)移目標(biāo)緩沖器113的轉(zhuǎn)移方向預(yù)測(cè)(采取或不采取)是在流水線100中與宏代碼指令一起傳輸?shù)?。在示范?shí)施例中,指令譯碼單元120并不“第二次猜測(cè)”轉(zhuǎn)移目標(biāo)緩沖器113的預(yù)測(cè)。從而,如果轉(zhuǎn)移目標(biāo)緩沖器113已作出轉(zhuǎn)移預(yù)測(cè),指令譯碼單元120只是向取指令單元110發(fā)信號(hào)從而在必要時(shí)更新ID歷史1 121。
具體地,如果轉(zhuǎn)移目標(biāo)緩沖器113作出了轉(zhuǎn)移預(yù)測(cè),指令譯碼單元120通過(guò)測(cè)試預(yù)測(cè)位來(lái)判定采取還是不采取轉(zhuǎn)移指令(步驟255)。如果采取轉(zhuǎn)移,指令譯碼單元120信令取指令單元110更新ID歷史1121(步驟258)。具體地,指令譯碼單元120將轉(zhuǎn)移地址傳輸給取指令單元110。然后取指令單元110用與為IFU歷史1 117確定新值相同的方式為ID歷史1 121確定新值,即新值=(舊值XOR addr[3∶0])<<4。
如果轉(zhuǎn)移目標(biāo)緩沖器113并未作出轉(zhuǎn)移方向預(yù)測(cè)(步驟250),則取指令單元110判定該轉(zhuǎn)移指令是否無(wú)條件轉(zhuǎn)移指令(步驟260)。如果該指令是無(wú)條件轉(zhuǎn)移,指令譯碼單元120便預(yù)測(cè)(如靜態(tài)預(yù)測(cè))在執(zhí)行時(shí)采取轉(zhuǎn)移。相應(yīng)地,指令譯碼單元120信令取指令單元110以上述方式(參照步驟258)更新ID歷史1 121(步驟275)。
此外,如果轉(zhuǎn)移指令是無(wú)條件轉(zhuǎn)移指令,轉(zhuǎn)移目標(biāo)緩沖器113并不將該指令識(shí)別為這樣的(因?yàn)椴襟E250指明轉(zhuǎn)移目標(biāo)緩沖器113并不作出預(yù)測(cè)),因此并不指示取指令單元110去取轉(zhuǎn)移目標(biāo)地址上的指令。從而,流水線100中的下一條指令不是正確的指令。相應(yīng)地,指令譯碼單元120向取指令單元110發(fā)信號(hào)以將ID歷史1 121復(fù)制到IFU歷史1 117中(由于ID歷史1 121現(xiàn)在具有正確的轉(zhuǎn)移歷史而IFU歷史1 117是不正確的,因?yàn)樗丛紤]到當(dāng)前的無(wú)條件轉(zhuǎn)移)(步驟275)。相應(yīng)地,實(shí)際上將ID歷史1 121中的值向流水線100中“上游”傳播。
此外,指令譯碼單元120指示取指令單元110重新啟動(dòng),具體地,現(xiàn)在取在轉(zhuǎn)移目標(biāo)地址上開(kāi)始的指令,并且還沖刷取指令單元110與指令譯碼單元120之間的流水線100的部分(例如通過(guò)復(fù)位鎖存器112)(步驟278)。
如果該指令不是無(wú)條件轉(zhuǎn)移指令(步驟260),指令譯碼單元120判定該轉(zhuǎn)移指令是否條件向后轉(zhuǎn)移指令(即,轉(zhuǎn)移目標(biāo)地址<轉(zhuǎn)移指令地址)(步驟270)。如果是,指令譯碼單元120預(yù)測(cè)將采取該轉(zhuǎn)移指令(即靜態(tài)預(yù)測(cè))(向后轉(zhuǎn)移指令通常出現(xiàn)在程序循環(huán)的末尾,并且除外最后一次執(zhí)行它,每次執(zhí)行它時(shí)通常是采取的)。從而,指令譯碼單元120向取指令單元110發(fā)信號(hào)以更新ID歷史1 121來(lái)反映這一轉(zhuǎn)移預(yù)測(cè)(新值=(舊值XOR addr[3∶0])<<4)(步驟265)。
此外,由于轉(zhuǎn)移目標(biāo)緩沖器113并不將該指令識(shí)別為采取轉(zhuǎn)移,流水線100中的下一條指令是不正確的。即,由于轉(zhuǎn)移目標(biāo)緩沖器113并不將該指令識(shí)別為采取轉(zhuǎn)移,取指令單元110必定已經(jīng)以不正確的順序取出了該當(dāng)前轉(zhuǎn)移指令后面的指令。從而,指令譯碼單元120向取指令單元110發(fā)信號(hào)將ID歷史1 121復(fù)制到IFU歷史1 117中,然后向取指令單元110發(fā)信號(hào)以重新啟動(dòng)流水線100(步驟268)。
如果轉(zhuǎn)移既不是無(wú)條件轉(zhuǎn)移也不是條件向后轉(zhuǎn)移,指令譯碼單元120預(yù)測(cè)將不采取轉(zhuǎn)移。從而,轉(zhuǎn)移目標(biāo)緩沖器113不識(shí)別該指令為轉(zhuǎn)移也無(wú)所謂。具體地,IFU歷史1 117仍然正確(由于IFU歷史1 117包含只與“采取”轉(zhuǎn)移相關(guān)的信息)。再者,由于指令譯碼單元120已預(yù)測(cè)不采取該轉(zhuǎn)移,指令譯碼單元120預(yù)期取指令單元110已順序地繼續(xù)處理指令(這是因?yàn)檗D(zhuǎn)移目標(biāo)緩沖器113未識(shí)別轉(zhuǎn)移而這樣做的,從而并未指示取指令單元110采取轉(zhuǎn)移)。相應(yīng)地,處理下一條指令(步驟210)。
圖3的流程圖示出跟蹤高速緩沖器單元130關(guān)于維護(hù)轉(zhuǎn)移歷史執(zhí)行的示范進(jìn)程。參見(jiàn)圖3,跟蹤高速緩沖器單元130窺探指令路徑122并在建立模式中(步驟305)。在檢測(cè)到宏代碼指令時(shí),跟蹤高速緩沖器單元130測(cè)試判定該宏代碼指令是否與存儲(chǔ)在其高速緩沖器中的任何跟蹤段的第一條指令(即蹤跡頭)匹配(步驟310)。
如果該宏代碼指令不是蹤跡頭,跟蹤高速緩沖器單元130測(cè)試該宏代碼指令并判定該指令是否轉(zhuǎn)移指令(步驟311)。如果否,跟蹤高速緩沖器單元130繼續(xù)窺探指令路徑122(步驟305)。
如果該宏代碼指令為條件轉(zhuǎn)移指令(步驟311),跟蹤高速緩沖器單元130用轉(zhuǎn)移地址及轉(zhuǎn)移方向預(yù)測(cè)(通過(guò)調(diào)查上述轉(zhuǎn)移方向預(yù)測(cè)位確定的)更新TC歷史2 133(步驟312)。具體地,跟蹤高速緩沖器130將TC歷史2 133更新如下“新”值=(“舊”值XORaddr[3∶0])·預(yù)測(cè)。
接著,如果轉(zhuǎn)移預(yù)測(cè)為采取(步驟313),跟蹤高速緩沖器單元130向取指令單元110發(fā)信號(hào)用轉(zhuǎn)移地址更新TC歷史1 132,即“新”值=(“舊”值XOR addr[3∶0])<<4(步驟314)。
然后跟蹤高速緩沖器單元130繼續(xù)窺探指令路徑122(步驟305)。
如果宏代碼指令為蹤跡頭(步驟310),跟蹤高速緩沖器單元130進(jìn)入“流模式”(步驟315)。在流模式中,跟蹤高速緩沖器單元130將來(lái)自適當(dāng)?shù)母櫠蔚男畔⑻峁┙o分配單元140(步驟315)。此外,跟蹤高速緩沖器單元130向取指令單元110發(fā)信號(hào)以停止取指令。
對(duì)于跟蹤高速緩沖器單元130提供給分配單元140的每一條指令,跟蹤高速緩沖器單元130都測(cè)試該指令是否轉(zhuǎn)移指令(步驟320)。如果指令為轉(zhuǎn)移指令,跟蹤轉(zhuǎn)移目標(biāo)緩沖器131預(yù)測(cè)執(zhí)行時(shí)采取或不采取該轉(zhuǎn)移指令(至少部分地根據(jù)TC歷史2 133)(步驟325)。然后跟蹤高速緩沖器單元130更新TC歷史2 133(步驟330)。
如果將轉(zhuǎn)移指令預(yù)測(cè)為采取的(步驟335),跟蹤高速緩沖器單元130信令取指令單元110更新TC歷史1(“新”值=(“舊”值XOR addr[3∶0])<<4(步驟340)。否則,進(jìn)程跳至步驟345。
接著,跟蹤高速緩沖器單元130判定當(dāng)前宏代碼指令是否在跟蹤段的末尾,或“跟蹤離開(kāi)”條件存在(步驟345)。例如,如果跟蹤段包含轉(zhuǎn)移指令,并且跟蹤轉(zhuǎn)移目標(biāo)緩沖器131預(yù)測(cè)在執(zhí)行該指令時(shí),轉(zhuǎn)移方向?qū)⑴c跟蹤段假定的方向不同(即,跟蹤轉(zhuǎn)移目標(biāo)緩沖器131的預(yù)測(cè)與轉(zhuǎn)移目標(biāo)緩沖器113的原始預(yù)測(cè)不同),則可能存在跟蹤離開(kāi)條件。如果宏代碼指令不在跟蹤段末尾,且跟蹤高速緩沖器單元130并未檢測(cè)到跟蹤離開(kāi)條件,則跟蹤高速緩沖器單元130處理下一條指令(步驟346)。
如果當(dāng)前宏代碼指令在跟蹤段的末尾,或跟蹤高速緩沖器單元130檢測(cè)到跟蹤離開(kāi)條件,則跟蹤高速緩沖器單元130判定下一條要求的指令是否蹤跡頭(步驟350)。如果下一條要求的指令不是蹤跡頭,取指令單元110必須再一次開(kāi)始取指令。從而,跟蹤高速緩沖器單元130信令取指令單元110將TC歷史1 132復(fù)制到ID歷史1 121及IFU歷史1 117中。在示范性實(shí)施例中,將IC歷史1 132復(fù)制到ID歷史1 121及IFU歷史1 117中,由于當(dāng)前值ID歷史1 121及IFU歷史1 117并不象TC歷史1 132那樣考慮跟蹤高速緩沖器單元130提供給分配單元140的任何轉(zhuǎn)移指令(步驟351)。
最后,跟蹤高速緩沖器單元130信令取指令單元110重新啟動(dòng)(步驟352)。
如果下一條要求的指令是蹤跡頭(步驟350),便檢索下一個(gè)要求的跟蹤段(步驟315)。
圖4a為跟蹤轉(zhuǎn)移信息表135關(guān)于轉(zhuǎn)移歷史維護(hù)所執(zhí)行的進(jìn)程的流程圖。(跟蹤轉(zhuǎn)移信息表135是跟蹤轉(zhuǎn)移目標(biāo)緩沖器131的一部分)。跟蹤轉(zhuǎn)移信息表135維護(hù)轉(zhuǎn)移歷史以便在轉(zhuǎn)移誤預(yù)測(cè)事件中提供同步轉(zhuǎn)移歷史的手段。具體地,執(zhí)行單元150可能檢測(cè)到轉(zhuǎn)移誤預(yù)測(cè)。然而,由于執(zhí)行單元150不按次序處理指令,需要專(zhuān)用機(jī)構(gòu)在檢測(cè)到誤預(yù)測(cè)的轉(zhuǎn)移時(shí)來(lái)啟動(dòng)糾正在流水線100的上游維護(hù)的轉(zhuǎn)移歷史。從而,在本發(fā)明的示范性實(shí)施例中,利用了跟蹤轉(zhuǎn)移信息表135電路。從而,圖4a示出了為恢復(fù)轉(zhuǎn)移誤預(yù)測(cè)而“按次序”維護(hù)轉(zhuǎn)移歷史而跟蹤轉(zhuǎn)移信息表135所執(zhí)行的進(jìn)程。圖4b示出為從轉(zhuǎn)移誤預(yù)測(cè)中恢復(fù)而在流水線100中所執(zhí)行的進(jìn)程。
參見(jiàn)圖4a,跟蹤轉(zhuǎn)移信息表135沿指令路徑122(即在分配單元140與指令存儲(chǔ)池141之間)檢測(cè)微操作(步驟410)。對(duì)于它檢測(cè)到的每一個(gè)微操作,跟蹤轉(zhuǎn)移信息表135存儲(chǔ)某些信息在其表中,例如微操作的序號(hào)。如果該微操作是與宏轉(zhuǎn)移指令關(guān)聯(lián)的(步驟420),跟蹤轉(zhuǎn)移信息表135存儲(chǔ)足夠的數(shù)據(jù)來(lái)重建例如轉(zhuǎn)移歷史。在示范性實(shí)施例中,跟蹤轉(zhuǎn)移信息表135計(jì)算(及存儲(chǔ)在其表中)兩個(gè)轉(zhuǎn)移歷史值,TBIT歷史1 151及TBIT歷史2 152(步驟430、440)。
如果宏轉(zhuǎn)移指令是預(yù)測(cè)為采取的,跟蹤轉(zhuǎn)移信息表135使用取指令單元110所用的相同公式為T(mén)BIT歷史1 151計(jì)算新的轉(zhuǎn)移歷史值,即“新”值=(“舊”值XOR addr[3∶0])<<4,“舊”值為計(jì)算的最近TBIT歷史1 151(為任何轉(zhuǎn)移指令)。如果宏轉(zhuǎn)移是預(yù)測(cè)為不采取的,跟蹤轉(zhuǎn)移信息表135將“舊”值存儲(chǔ)在TBIT歷史1 151中。
為了計(jì)算TBIT歷史2 152的值(無(wú)論轉(zhuǎn)移指令是預(yù)測(cè)為采取或不采取的),跟蹤轉(zhuǎn)移信息表135使用跟蹤高速緩沖器單元130所用的相同公式計(jì)算新轉(zhuǎn)移歷史值,即“新”值=(“舊”值XORaddr[3∶0])·轉(zhuǎn)移預(yù)測(cè)。
圖4b示出當(dāng)執(zhí)行單元150檢測(cè)到轉(zhuǎn)移誤預(yù)測(cè)時(shí)所執(zhí)行的進(jìn)程。首先,執(zhí)行單元150將當(dāng)前微操作的序號(hào)提供給跟蹤轉(zhuǎn)移信息表135(該微操作將是轉(zhuǎn)移指令)(步驟450)。跟蹤轉(zhuǎn)移信息表135在表中查找對(duì)應(yīng)于該序號(hào)的項(xiàng)(步驟460)。然后,跟蹤轉(zhuǎn)移信息表135將該項(xiàng)的TBIT歷史1 151部分傳輸給轉(zhuǎn)移目標(biāo)緩沖器112(步驟470)。此外,取指令單元110將TBIT歷史1 151復(fù)制到TC歷史1 132、ID歷史1 121及IFU歷史1 117中(步驟480)。此外,跟蹤高速緩沖器單元131將TBIT歷史2 152復(fù)制到TC歷史2 133中(步驟485)。最后,在取指令單元110或跟蹤高速緩沖器單元130上重新啟動(dòng)流水線100(步驟490)。
參見(jiàn)圖5a,提供了展示寫(xiě)回單元160與轉(zhuǎn)移歷史的維護(hù)協(xié)作執(zhí)行的示范進(jìn)程的流程圖。在正常操作期間,寫(xiě)回單元160按嚴(yán)格的程序次序退役指令(步驟510)。對(duì)于各宏轉(zhuǎn)移指令,寫(xiě)回單元160信令取指令單元110(如果采取該轉(zhuǎn)移指令)及跟蹤高速緩沖器單元130分別更新WB歷史1 161及WB歷史2 162。
具體地,如果采取轉(zhuǎn)移,寫(xiě)回單元160信令取指令單元110更新WB歷史1 161如下“新”值=(“舊”值XOR addr[3∶0])<<4。類(lèi)似地,寫(xiě)回單元160信令跟蹤高速緩沖器單元130更新WB歷史2 162(無(wú)論采取或不采取轉(zhuǎn)移)如下“新”值=(“舊”值XORaddr[3∶0])·預(yù)測(cè)(在這一情況下,“預(yù)測(cè)”為是否實(shí)際采取轉(zhuǎn)移)。
微處理器檢測(cè)諸如EVENTS(事件)與TRAPS(陷阱)等導(dǎo)致微處理器執(zhí)行機(jī)器微代碼的某些條件。(EVENTS與TRAPS是超出本討論的范圍的條件)。如果微處理器在指令上出現(xiàn)事件或檢測(cè)到陷阱,便執(zhí)行圖5b中的進(jìn)程。參見(jiàn)圖5b,寫(xiě)回單元160信令取指令單元110將WB歷史1 161復(fù)制到TC歷史1 132、ID歷史1 121及IFU歷史117上(步驟550)。此外,寫(xiě)回單元160信令跟蹤高速緩沖器單元130將WB歷史2 162復(fù)制到TC歷史2 133上(步驟555)。從而寫(xiě)回單元160所維護(hù)的轉(zhuǎn)移歷史實(shí)際上是在流水線100上向上游傳播的。
最后,沖刷流水線100并起動(dòng)機(jī)器微代碼(步驟560)。
其它實(shí)施例雖然已參照其示范性實(shí)施例具體展示與描述了本發(fā)明,熟悉本技術(shù)的人員會(huì)理解可在其中作出形式上與細(xì)節(jié)上的各種改變而不偏離本發(fā)明的精神與范圍。例如,在第二示范性實(shí)施例中維護(hù)了兩組轉(zhuǎn)移歷史,即在轉(zhuǎn)移目標(biāo)緩沖器113上的轉(zhuǎn)移歷史(IFU歷史1 117、ID歷史1 121、TC歷史1 132及WB歷史1 161)及TBIT歷史1 151、以及在跟蹤轉(zhuǎn)移目標(biāo)緩沖器131上的轉(zhuǎn)移歷史(即WB歷史1 162與TC歷史2 133)及TBIT歷史2 152。維護(hù)這兩組轉(zhuǎn)移歷史因?yàn)槭痉缎詫?shí)施例的流水線100包含兩個(gè)單元(轉(zhuǎn)移目標(biāo)緩沖器113及跟蹤轉(zhuǎn)移目標(biāo)緩沖器131)根據(jù)轉(zhuǎn)移歷史執(zhí)行動(dòng)態(tài)轉(zhuǎn)移預(yù)測(cè),其中各預(yù)測(cè)單元期望用不同的函數(shù)計(jì)算歷史值。如果將預(yù)測(cè)單元設(shè)計(jì)成根據(jù)用相同方法計(jì)算的轉(zhuǎn)移歷史信息進(jìn)行預(yù)測(cè),或者流水線100只包含單個(gè)預(yù)測(cè)單元,則只需要一組轉(zhuǎn)移歷史。預(yù)測(cè)單元有可能將預(yù)測(cè)基于存儲(chǔ)在單一設(shè)備中的轉(zhuǎn)移歷史。再者,如果流水線100包含作出動(dòng)態(tài)轉(zhuǎn)移預(yù)測(cè)的第三單元,能夠設(shè)想可維護(hù)第三組轉(zhuǎn)移歷史。
權(quán)利要求
1.一種微處理器中的指令流水線,包括多個(gè)流水線單元,各流水線單元處理多條指令,該多條指令包含多條轉(zhuǎn)移指令;以及多個(gè)存儲(chǔ)設(shè)備,各該多個(gè)存儲(chǔ)設(shè)備存儲(chǔ)各自的轉(zhuǎn)移信息數(shù)據(jù)并且是與多個(gè)流水線單元之中至少一個(gè)關(guān)聯(lián)的,每一個(gè)各自的轉(zhuǎn)移信息數(shù)據(jù)是作為多個(gè)流水線單元中至少一個(gè)所處理的多條轉(zhuǎn)移指令中至少一條的函數(shù)確定的;其中該多個(gè)流水線單元中的第一個(gè)為多個(gè)流水線單元中的第一個(gè)所處理的多條轉(zhuǎn)移指令中至少一條作為存儲(chǔ)在多個(gè)存儲(chǔ)設(shè)備的第一個(gè)中的各自的轉(zhuǎn)移信息數(shù)據(jù)的函數(shù)預(yù)測(cè)第一各自的轉(zhuǎn)移方向,及該多個(gè)流水線單元中的第二個(gè)為多個(gè)流水線單元中的第二所處理的多條轉(zhuǎn)移指令中至少一條作為存儲(chǔ)在多個(gè)存儲(chǔ)設(shè)備中的第二個(gè)中的各自的轉(zhuǎn)移信息數(shù)據(jù)的函數(shù)預(yù)測(cè)第二各自的轉(zhuǎn)移方向。
2.權(quán)利要求1的指令流水線,其中該多個(gè)流水線單元中的第一個(gè)是取指令單元,該取指令單元包含第一轉(zhuǎn)移預(yù)測(cè)電路。
3.權(quán)利要求2的指令流水線,其中該多個(gè)流水線單元中的第二個(gè)是跟蹤高速緩沖器單元,該跟蹤高速緩沖器單元包含第二轉(zhuǎn)移預(yù)測(cè)電路。
4.權(quán)利要求1的指令流水線,其中存儲(chǔ)在多個(gè)存儲(chǔ)設(shè)備中的第一個(gè)中的各自的轉(zhuǎn)移信息數(shù)據(jù)是用第一函數(shù)確定的,及存儲(chǔ)在多個(gè)存儲(chǔ)設(shè)備中的第二個(gè)中的各自的轉(zhuǎn)移信息數(shù)據(jù)是用第二函數(shù)確定的,第二函數(shù)與第一函數(shù)不同。
5.權(quán)利要求1的指令流水線,其中該多個(gè)流水線單元中的第三個(gè)能檢測(cè)出轉(zhuǎn)移誤預(yù)測(cè),及其中當(dāng)多個(gè)流水線單元的第三個(gè)檢測(cè)到轉(zhuǎn)移誤預(yù)測(cè)時(shí)至少一個(gè)流水線單元將存儲(chǔ)在多個(gè)存儲(chǔ)設(shè)備中第一個(gè)中的各自的轉(zhuǎn)移信息數(shù)據(jù)復(fù)制到多個(gè)存儲(chǔ)設(shè)備的第二個(gè)中。
6.權(quán)利要求5的指令流水線,其中該多個(gè)流水線單元的第三個(gè)是執(zhí)行單元。
7.權(quán)利要求5的指令流水線,其中該多個(gè)存儲(chǔ)設(shè)備中的第一個(gè)與該多個(gè)流水線單元之中的第四個(gè)關(guān)聯(lián),及該多個(gè)存儲(chǔ)設(shè)備的第二個(gè)與該多個(gè)流水線單元中的第五個(gè)關(guān)聯(lián),多個(gè)流水線單元的第五個(gè)是相對(duì)于多個(gè)流水線單元中的第四個(gè)在指令流水線的上游。
8.權(quán)利要求5的指令流水線,其中至少一個(gè)流水線單元是取指令單元,及多個(gè)存儲(chǔ)設(shè)備的第一個(gè)是與跟蹤高速緩沖器單元關(guān)聯(lián)的及多個(gè)存儲(chǔ)設(shè)備的第二個(gè)與取指令單元關(guān)聯(lián)。
9.一種微處理器中的指令流水線,包括多個(gè)流水線單元,該多個(gè)流水線單元中的每一個(gè)處理多條指令,多條指令的子集包含多條轉(zhuǎn)移指令,其中該多個(gè)流水線單元的第一個(gè)在第一時(shí)間中作為第一指令源操作,及該多個(gè)流水線單元的第二個(gè)在第二時(shí)間中作為第二指令源操作,第二時(shí)間與第一時(shí)間不同;以及多個(gè)存儲(chǔ)設(shè)備,該存儲(chǔ)設(shè)備的每一個(gè)存儲(chǔ)各自的轉(zhuǎn)移信息數(shù)據(jù)并與多個(gè)流水線單元之中至少一個(gè)關(guān)聯(lián),每一個(gè)各自的轉(zhuǎn)移信息數(shù)據(jù)是作為該多個(gè)流水線單元的關(guān)聯(lián)的至少一個(gè)所處理的多條轉(zhuǎn)移指令的子集的函數(shù)確定的;第一預(yù)測(cè)電路,用于作為存儲(chǔ)在該多個(gè)存儲(chǔ)設(shè)備的第一個(gè)中的各自的轉(zhuǎn)移信息數(shù)據(jù)的函數(shù)預(yù)測(cè)第一轉(zhuǎn)移方向,該第一轉(zhuǎn)移預(yù)測(cè)是用于該多個(gè)流水線單元的第一個(gè)所處理的多條轉(zhuǎn)移指令中至少一條的。
10.權(quán)利要求9的指令流水線,還包括第二預(yù)測(cè)電路,用于作為存儲(chǔ)在該多個(gè)存儲(chǔ)設(shè)備的第二個(gè)中的各自的轉(zhuǎn)移信息數(shù)據(jù)的函數(shù)預(yù)測(cè)第二個(gè)各自的轉(zhuǎn)移方向,該第二個(gè)各自的轉(zhuǎn)移預(yù)測(cè)是用于該多個(gè)流水線單元的第二個(gè)所處理的多條轉(zhuǎn)移指令中至少一條的。
11.權(quán)利要求10的指令流水線,其中多個(gè)存儲(chǔ)設(shè)備的第一個(gè)與該多個(gè)存儲(chǔ)設(shè)備的第二個(gè)是同一設(shè)備。
12.權(quán)利要求10的指令流水線,其中存儲(chǔ)在該多個(gè)存儲(chǔ)設(shè)備的第一個(gè)中的各自的轉(zhuǎn)移信息數(shù)據(jù)是用第一函數(shù)確定的,及存儲(chǔ)在該多個(gè)存儲(chǔ)設(shè)備的第二個(gè)中的各自的轉(zhuǎn)移信息數(shù)據(jù)是用第二函數(shù)確定的,第二函數(shù)與第一函數(shù)不同。
13.權(quán)利要求9的指令流水線,其中該多個(gè)流水線單元的第三個(gè)不按順序處理指令。
14.權(quán)利要求13的指令流水線,其中至少一個(gè)存儲(chǔ)設(shè)備包含一張表,該表存儲(chǔ)多個(gè)各自的轉(zhuǎn)移信息數(shù)據(jù),各該多個(gè)轉(zhuǎn)移信息數(shù)據(jù)對(duì)應(yīng)于各自的指令序列號(hào)。
15.權(quán)利要求13的指令流水線,其中該多個(gè)流水線單元的第三個(gè)是執(zhí)行單元。
16.權(quán)利要求9的指令流水線,其中該多個(gè)流水線單元的第三個(gè)能檢測(cè)出轉(zhuǎn)移誤預(yù)測(cè),及其中至少一個(gè)流水線單元當(dāng)該多個(gè)流水線單元的第三個(gè)檢測(cè)到轉(zhuǎn)移誤預(yù)測(cè)時(shí),將存儲(chǔ)在多個(gè)存儲(chǔ)設(shè)備的第一個(gè)中的各自的文件信息數(shù)據(jù)復(fù)制到該多個(gè)存儲(chǔ)設(shè)備的第二個(gè)中。
17.權(quán)利要求9的指令流水線,其中該多個(gè)流水線單元的第三個(gè)取作為預(yù)測(cè)的第一轉(zhuǎn)移方向的函數(shù)的下一條指令。
18.一種維護(hù)微處理器的指令流水線中的轉(zhuǎn)移信息的方法,該指令流水線包含多個(gè)流水線單元,包括下述步驟在第一時(shí)間間隔期間由該多個(gè)流水線單元的第一個(gè)提供第一多條指令給指令流水線,該第一多條指令包含第一轉(zhuǎn)移指令;作為第一轉(zhuǎn)移指令與存儲(chǔ)在第一存儲(chǔ)設(shè)備中的一個(gè)值的函數(shù)確定第一轉(zhuǎn)移信息數(shù)據(jù);將該第一轉(zhuǎn)移信息數(shù)據(jù)存儲(chǔ)在第一存儲(chǔ)設(shè)備中;將該第一轉(zhuǎn)移信息數(shù)據(jù)從第一存儲(chǔ)設(shè)備復(fù)制到第二存儲(chǔ)設(shè)備中;在第二時(shí)間間隔期間由該多個(gè)指令流水線單元的第二個(gè)提供第二多條指令給指令流水線,該第二時(shí)間間隔在第一時(shí)間間隔外面,第二多條指令包含第二轉(zhuǎn)移指令,該多個(gè)流水線單元的第二個(gè)是在相對(duì)于該多個(gè)流水線單元的第一個(gè)指令流水線中的上游;作為第二轉(zhuǎn)移指令與存儲(chǔ)在第二存儲(chǔ)設(shè)備中的第一轉(zhuǎn)移信息數(shù)據(jù)的函數(shù)確定第二轉(zhuǎn)移信息數(shù)據(jù);以及將第二轉(zhuǎn)移信息數(shù)據(jù)存儲(chǔ)在第二存儲(chǔ)設(shè)備中。
19.權(quán)利要求18的方法,還包括下述步驟作為第二轉(zhuǎn)移信息數(shù)據(jù)的函數(shù)預(yù)測(cè)第三轉(zhuǎn)移指令的轉(zhuǎn)移方向。
20.權(quán)利要求18的方法,還包括下述步驟分配序號(hào)給第二轉(zhuǎn)移指令;作為第二轉(zhuǎn)移指令的函數(shù)確定第三轉(zhuǎn)移信息數(shù)據(jù);將第三轉(zhuǎn)移信息數(shù)據(jù)存儲(chǔ)在表項(xiàng)中,該表項(xiàng)是用該序號(hào)索引的。
21.權(quán)利要求20的方法,還包括下述步驟作為第二轉(zhuǎn)移信息數(shù)據(jù)的函數(shù)為第三轉(zhuǎn)移指令預(yù)測(cè)轉(zhuǎn)移方向;如果預(yù)測(cè)的轉(zhuǎn)移方向不正確檢測(cè)到轉(zhuǎn)移誤預(yù)測(cè);作為序號(hào)的函數(shù)從表項(xiàng)檢索第三轉(zhuǎn)移信息數(shù)據(jù);將第三轉(zhuǎn)移信息數(shù)據(jù)復(fù)制到第二存儲(chǔ)設(shè)備中;以及將第三轉(zhuǎn)移信息數(shù)據(jù)復(fù)制到第一存儲(chǔ)設(shè)備中。
22.一種維護(hù)微處理器的指令流水線中的轉(zhuǎn)移信息的方法,包括下述步驟提供第一轉(zhuǎn)移指令給指令流水線,該第一轉(zhuǎn)移指令包含未解決的條件;作為第一轉(zhuǎn)移指令的函數(shù)確定第一轉(zhuǎn)移信息數(shù)據(jù);將第一轉(zhuǎn)移信息數(shù)據(jù)存儲(chǔ)在第一存儲(chǔ)設(shè)備中;作為第一轉(zhuǎn)移信息數(shù)據(jù)的函數(shù)預(yù)測(cè)第一轉(zhuǎn)移指令的轉(zhuǎn)移方向;作為預(yù)測(cè)的轉(zhuǎn)移方向的函數(shù)確定指令地址;從確定的指令地址檢索下一條指令;將下一條指令提供給指令流水線;分配序號(hào)給第一轉(zhuǎn)移指令;作為第一轉(zhuǎn)移指令的函數(shù)確定第二轉(zhuǎn)移信息數(shù)據(jù);將第二轉(zhuǎn)移信息數(shù)據(jù)存儲(chǔ)在表項(xiàng)中,該表項(xiàng)是用序號(hào)索引的;解決轉(zhuǎn)移條件;作為解決步驟的函數(shù)確定實(shí)際轉(zhuǎn)移方向;比較實(shí)際轉(zhuǎn)移方向與預(yù)測(cè)轉(zhuǎn)移方向;以及如果實(shí)際轉(zhuǎn)移方向與預(yù)測(cè)轉(zhuǎn)移方向不匹配作為序號(hào)的函數(shù)從表項(xiàng)檢索第二轉(zhuǎn)移信息數(shù)據(jù);將第二轉(zhuǎn)移信息數(shù)據(jù)復(fù)制到第一存儲(chǔ)設(shè)備中;以及沖刷來(lái)自指令流水線的下一第指令。
23.權(quán)利要求22的方法,其中該預(yù)測(cè)步驟包含預(yù)測(cè)該轉(zhuǎn)移指令是否要采取的一條。
全文摘要
提供了微處理器中的指令流水線。指令流水線包含多個(gè)流水線單元,各流水線單元處理包含轉(zhuǎn)移指令在內(nèi)的多條指令。指令流水線還包含存儲(chǔ)各自的轉(zhuǎn)移信息數(shù)據(jù)的多個(gè)存儲(chǔ)設(shè)備。各存儲(chǔ)設(shè)備與流水線單元中至少一個(gè)關(guān)聯(lián)。每一個(gè)各自的轉(zhuǎn)移信息數(shù)據(jù)是作為所處理的轉(zhuǎn)移指令中至少一條的函數(shù)確定的。兩個(gè)流水線單元包含轉(zhuǎn)移預(yù)測(cè)電路,用于作為所存儲(chǔ)的轉(zhuǎn)移信息數(shù)據(jù)的函數(shù)預(yù)測(cè)轉(zhuǎn)移方向。
文檔編號(hào)G06F9/38GK1297546SQ99805187
公開(kāi)日2001年5月30日 申請(qǐng)日期1999年4月20日 優(yōu)先權(quán)日1998年4月20日
發(fā)明者R·V·德薩, A·B·凱克爾, G·S·舍菲爾, G·P·埃斯皮諾薩, S·卡拉法蒂斯, R·E·赫布達(dá) 申請(qǐng)人:英特爾公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1