專利名稱:用于預(yù)取指令線的方法和處理器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明總體涉及計算機處理器領(lǐng)域。更具體地說,本發(fā)明涉及一種計算機處理器使用的高速緩沖存儲機制。
背景技術(shù):
現(xiàn)代的計算機系統(tǒng)通常包含多個集成電路(IC),其中包括可以用于在所述計算機系統(tǒng)中處理信息的處理器。由處理器處理的數(shù)據(jù)可以包括由處理器執(zhí)行的計算機指令以及由處理器使用計算機指令而操縱的數(shù)據(jù)。所述計算機指令和數(shù)據(jù)通常存儲在計算機系統(tǒng)中的主存儲器中。
處理器通常通過以一系列小步驟執(zhí)行指令來處理指令。在一些情況下,為了增大由處理器處理的指令的數(shù)目(并因此提高處理器的速度),可以使處理器流水線化(pipeline)。流水線化指的是在處理器中提供分離的多個級(stage),其中,每個級執(zhí)行用于執(zhí)行指令所需要的一個或多個小步驟。在一些情況下,(除了其它電路之外)流水線也可以置于處理器中的被稱為處理器核芯的部分中。一些處理器可以具有多個處理器核芯。
作為在流水線中執(zhí)行指令的示例,當(dāng)接收到第一指令時,第一流水線級可以處理所述指令的一小部分。當(dāng)?shù)谝涣魉€級已經(jīng)結(jié)束處理指令的該小部分時,第二流水線級可以開始處理所述第一指令的另一小部分,同時第一流水線級接收并開始處理第二指令的一小部分。因此,處理器可以同時(并行地)處理兩個或多個指令。
為了提供對于數(shù)據(jù)和指令的更快的訪問以及更好地利用處理器,處理器可以具有多個高速緩沖存儲器。高速緩沖存儲器是通常小于主存儲器的存儲器,并且通常與處理器制造在同一集成塊(die)(即芯片)上?,F(xiàn)代處理器通常具有多個高速緩沖存儲器級別(level)。最接近處理器核芯的最快的高速緩沖存儲器被稱為第1級別高速緩沖存儲器(L1高速緩沖存儲器)。除了L1高速緩沖存儲器之外,處理器通常還具有另一更大的高速緩沖存儲器,被稱為第2級別高速緩沖存儲器(L2高速緩沖存儲器)。在一些情況下,處理器可以具有其它的附加高速緩沖存儲器級別(例如,L3高速緩沖存儲器和L4高速緩沖存儲器)。
為了向處理器提供用于填充(fill)處理器的流水線的每個級的足夠指令,處理器可以從L2高速緩沖存儲器以被稱為指令線的包含多個指令的組來取出指令。所取出的指令線可以被置于L1指令高速緩沖存儲器(I-高速緩沖存儲器),其中,處理器的核芯可以訪問在指令線中的指令。要由處理器處理的數(shù)據(jù)塊可以類似地從L2高速緩沖存儲器取出,并置于L1高速緩沖存儲器數(shù)據(jù)高速緩沖存儲器(D-高速緩沖存儲器)中。
從較高的高速緩沖存儲器級別取出信息以及將所述信息置于較低的高速緩沖存儲器級別的處理可以被稱為讀取(fetching),并且通常需要一定的時間量(等待時間)。例如,如果處理器核芯請求信息并且所述信息不在L1高速緩沖存儲器中(被稱為高速緩沖存儲器未中(cache miss)),則從L2高速緩沖存儲器讀取所述信息。當(dāng)向下一個高速緩沖存儲器/存儲器級別搜索所請求的信息時,每個高速緩沖存儲器未中導(dǎo)致另外的等待時間。例如,如果所請求的信息不在L2高速緩沖存儲器中,則所述處理器可以在L3高速緩沖存儲器或者在主存儲器中查找所述信息。
在一些情況下,處理器可能比從高速緩沖存儲器和/或存儲器取出指令和數(shù)據(jù)更快地處理所述指令和數(shù)據(jù)。例如,在已經(jīng)處理了指令線后,需要花時間來訪問要處理的下一個指令線(例如,如果當(dāng)向L1高速緩沖存儲器搜索包含下一個指令的指令線時存在高速緩沖存儲器未中)。當(dāng)處理器正在從更高級別的高速緩沖存儲器或存儲器取出下一個指令線時,流水線級可能完成了處理先前的指令,并且沒有剩下的要處理的指令(被稱為流水線停止(stall))。當(dāng)流水線停止時,處理器未被充分使用,并且損失流水線化的處理器核芯提供的益處。
因為指令(并且因此指令線)通常被依序處理,因此一些處理器試圖通過讀取依序編址的指令線的塊來防止流水線停止。通過讀取依序編址的指令線的塊,當(dāng)需要時在L1高速緩沖存儲器中可以已經(jīng)獲得下一個指令線,以便處理器核芯當(dāng)它結(jié)束處理在當(dāng)前指令線中的指令時可以容易地訪問在下一個指令線中的指令。
在一些情況下,讀取依序編址的指令線的塊不能防止流水線停止。例如,被稱為退出分支指令(exit branch instructions)的一些指令可以使處理器分支到在依序編址的指令線的塊之外的指令(被稱為目標(biāo)指令)。一些退出分支指令可以分支到不在當(dāng)前指令線或下一個已經(jīng)讀取的依序編址的指令線中的目標(biāo)指令。因此,當(dāng)處理器確定進(jìn)行該分支時,在L1高速緩沖存儲器中可能不能獲得包含所述退出分支的目標(biāo)指令的下一個指令線。結(jié)果,流水線可能停止,并且處理器可能低效率地運行。
關(guān)于讀取數(shù)據(jù),在指令訪問數(shù)據(jù)的情況下,處理器可能試圖在L1高速緩沖存儲器中定位包含所述數(shù)據(jù)的數(shù)據(jù)線。如果所述數(shù)據(jù)線不能被定位在L1高速緩沖存儲器中,則所述處理器可能在對存儲器的L2高速緩沖存儲器和更高的級別搜索期望的數(shù)據(jù)線時停止。因為期望數(shù)據(jù)的地址可能直到執(zhí)行指令時才知道,因此處理器可能直到執(zhí)行所述指令時才能夠去搜索期望的數(shù)據(jù)線。當(dāng)處理器搜索數(shù)據(jù)線時,可能發(fā)生高速緩沖存儲器未中,導(dǎo)致流水線停止。
一些處理器可以通過讀取包含當(dāng)前訪問的數(shù)據(jù)地址附近的數(shù)據(jù)地址的數(shù)據(jù)線塊,來防止這樣的高速緩沖存儲器未中。讀取附近的數(shù)據(jù)線依賴于這樣的假設(shè)當(dāng)訪問在數(shù)據(jù)線中的數(shù)據(jù)地址時,也將通常訪問附近的數(shù)據(jù)地址(被稱為引用局域性(locality of reference))。但是,在一些情況下,該假定可能證明是錯誤的,如通過指令來訪問不在當(dāng)前數(shù)據(jù)線附近的數(shù)據(jù)線中的數(shù)據(jù),由此導(dǎo)致高速緩沖存儲器未中和處理器低效率。
因此,需要在使用高速緩沖存儲的存儲器的處理器中的取出指令和數(shù)據(jù)的改進(jìn)的方法。
發(fā)明內(nèi)容
本發(fā)明的實施例提供了一種用于預(yù)取指令線的方法和裝置。在一個實施例中,所述方法包括(a)從第2級別高速緩沖存儲器讀取第一指令線;(b)在第一指令線中識別以在第一指令線外部的指令為目標(biāo)的分支指令;(c)從所識別的分支指令提取地址;以及(d)使用所提取的地址從第2級別高速緩沖存儲器預(yù)取包含作為目標(biāo)的指令的第二指令線。
在一個實施例中,提供了處理器。所述處理器包括第2級別高速緩沖存儲器、第1級別高速緩沖存儲器、處理器核芯、和電路。第1級別高速緩沖存儲器被配置來從第2級別高速緩沖存儲器接收指令線,其中,每個指令線包括一個或多個指令。所述處理器核芯被配置來執(zhí)行從第1級別高速緩沖存儲器取出的指令。所述電路被配置來(a)從第2級別高速緩沖存儲器讀取第一指令線;(b)在第一指令線中識別以在第一指令線外部的指令為目標(biāo)的分支指令;(c)從所識別的分支指令提取地址;以及(d)使用所提取的地址從第2級別高速緩沖存儲器預(yù)取包含作為目標(biāo)的指令的第二指令線。
在一個實施例中,提供了一種用于在指令線中存儲退出分支地址的方法。所述指令線包括一個或多個指令。所述方法包括執(zhí)行在所述指令線中的一個或多個指令之一;確定是否所述一個或多個指令中的該一個分支到在另一指令線中的指令;以及,如果如此的話,則將退出地址附加到對應(yīng)于另一指令線的指令線。
為了使得獲得和詳細(xì)地理解本發(fā)明的上述特征、優(yōu)點和目的,可以通過參見在附圖中圖解的本發(fā)明的實施例來獲得上面簡單總結(jié)的本發(fā)明的更具體的說明。
但是,應(yīng)當(dāng)注意,所附的附圖僅僅圖解本發(fā)明的典型實施例,因此不被理解為限制其范圍,因為本發(fā)明可以允許其它等同效果的實施例。
圖1是描述按照本發(fā)明的一個實施例的系統(tǒng)的方框圖。
圖2是描述按照本發(fā)明的一個實施例的計算機處理器的方框圖。
圖3是描述按照本發(fā)明的一個實施例的多個示例性指令線(I-線)的圖。
圖4是描述按照本發(fā)明的一個實施例的用于防止L1I-高速緩沖存儲器未中的處理的流程圖。
圖5是描述按照本發(fā)明的一個實施例的包含分支退出地址的I-線的方框圖。
圖6是描述按照本發(fā)明的一個實施例的用于預(yù)取指令和數(shù)據(jù)線的電路的方框圖。
圖7是描述按照本發(fā)明的一個實施例的用于存儲對應(yīng)于退出分支指令的分支退出地址的處理的流程圖。
具體實施例方式
本發(fā)明的實施例提供了一種用于預(yù)取指令線的方法和裝置。對于一些實施例,可以對被讀取的指令線檢查分支到位于所述指令線外部的(目標(biāo))指令的“退出分支指令”。這些退出分支指令的目標(biāo)地址可以被提取并用于從L2高速緩沖存儲器預(yù)取包含作為目標(biāo)的指令的指令線。結(jié)果,如果/當(dāng)進(jìn)行退出分支時,作為目標(biāo)的指令線可能已經(jīng)在L1指令高速緩沖存儲器(“I-高速緩沖存儲器”)中,由此避免在I-高速緩沖存儲器中的高代價的未中,并且改進(jìn)整體性能。
對于一些實施例,預(yù)取的數(shù)據(jù)可以被存儲在該預(yù)取數(shù)據(jù)涉及的對應(yīng)的信息塊(例如,指令線或者數(shù)據(jù)線)中的傳統(tǒng)高速緩沖存儲器的存儲器中。當(dāng)從高速緩沖存儲器的存儲器讀取信息的對應(yīng)塊時,所述信息塊可以被檢查并用于預(yù)取其它的、相關(guān)聯(lián)的信息塊。然后可以使用在每個其它預(yù)取的信息塊中存儲的預(yù)取數(shù)據(jù)來執(zhí)行預(yù)取。通過使用在讀取的信息塊內(nèi)的信息來預(yù)取與讀取的信息塊相關(guān)聯(lián)的其它信息塊,可以防止與被讀取的信息塊相關(guān)聯(lián)的高速緩沖存儲器未中。
按照本發(fā)明的一個實施例,在傳統(tǒng)的高速緩沖存儲器中將預(yù)取和預(yù)測數(shù)據(jù)存儲為信息塊的一部分可以不需要專門用來存儲預(yù)取和預(yù)測數(shù)據(jù)(例如,用于數(shù)據(jù)線和/或指令線的預(yù)取和預(yù)測數(shù)據(jù))的特殊高速緩沖存儲器或者存儲器。然而,雖然下面相對于在指令線中存儲這樣的信息而進(jìn)行說明,但是,這樣的信息可以被存儲在任何存儲單元(location),包括用于存儲這樣的歷史信息的特殊高速緩沖存儲器或者存儲器。在一些情況下,可以使用不同高速緩沖存儲器(和高速緩沖存儲器線)、緩沖器、特定用途高速緩沖存儲器、和其它存儲單元的組合來存儲在此所描述的歷史信息。
下面是在附圖中所描述的本發(fā)明的實施例的詳細(xì)說明。所述實施例是示例并且被詳細(xì)說明以清楚地闡述本發(fā)明。但是,所提供的細(xì)節(jié)量不意欲限制實施例的預(yù)期改變;而是相反,本發(fā)明要涵蓋落入由所附的權(quán)利要求限定的本發(fā)明的精神和范圍內(nèi)的所有修改、等同物和替代品。
本發(fā)明的實施例可以被用于系統(tǒng),諸如計算機系統(tǒng),下面相對于諸如計算機系統(tǒng)的系統(tǒng)來說明本發(fā)明的實施例。在此所使用的系統(tǒng)可以包括使用處理器和高速緩沖存儲器的存儲器的任何系統(tǒng),包括個人計算機、因特網(wǎng)設(shè)備、數(shù)字媒體設(shè)備、便攜式數(shù)字助理(PDA)、便攜式音樂/視頻播放器和視頻游戲控制臺。雖然高速緩沖存儲器的存儲器可以與使用所述高速緩沖存儲器的存儲器的處理器位于同一集成塊上,但是,在一些情況下,處理器和高速緩沖存儲器的存儲器可以位于不同的集成塊(例如,在分離的模塊內(nèi)的分離芯片或者在單個模塊中的分離芯片)上。
雖然下面關(guān)于具有多個處理器核芯和多個L1高速緩沖存儲器的處理器來進(jìn)行說明,其中,每個處理器核芯使用流水線來執(zhí)行指令,但是本發(fā)明的實施例可以用于使用高速緩沖存儲器的任何處理器,包括具有單個處理核芯的處理器和/或在執(zhí)行指令中不使用流水線的處理器??傮w上,可以將本發(fā)明的實施例用于任何處理器,并且不限于任何特定配置。
雖然下面關(guān)于具有被劃分為L1指令高速緩沖存儲器(L1I-高速緩沖存儲器)和L1數(shù)據(jù)高速緩沖存儲器(L1D-高速緩沖存儲器)的L1高速緩沖存儲器的處理器進(jìn)行說明,但是本發(fā)明的實施例可以用于其中使用一元化的L1高速緩沖存儲器的配置。而且,雖然下面關(guān)于從L2高速緩沖存儲器預(yù)取I-線和D-線并將預(yù)取的線置于L1高速緩沖存儲器而進(jìn)行說明,但是本發(fā)明的實施例可以用于從任何高速緩沖存儲器或者存儲器級別向任何其它的高速緩沖存儲器或存儲器級別預(yù)取I-線和D-線。
示例性系統(tǒng)的概述圖1是描述按照本發(fā)明的一個實施例的系統(tǒng)100的方框圖。所述系統(tǒng)100可以包含系統(tǒng)存儲器102,用于存儲指令和數(shù)據(jù);圖形處理單元104,用于圖形處理;I/O接口,用于與外部器件通信;存儲器108,用于長期存儲指令和數(shù)據(jù);以及處理器110,用于處理指令和數(shù)據(jù)。
按照本發(fā)明的一個實施例,處理器110可以具有L2高速緩沖存儲器112以及多個L1高速緩沖存儲器116,每個L1高速緩沖存儲器116被多個處理器核芯114之一使用。按照一個實施例,每個處理器核芯114可以被流水線化,其中,以一系列小步驟來執(zhí)行每個指令,每個步驟被不同的流水線級執(zhí)行。
圖2是描述按照本發(fā)明的一個實施例的處理器110的方框圖。為了簡單,圖2描述了處理器110的單個核芯114,并且關(guān)于處理器110的單個核芯114而被說明。在一個實施例中,每個核芯114可以相同(例如,包含具有相同的流水線級的相同流水線)。在另一個實施例中,每個核芯114可以不同(例如,包含具有不同級的不同流水線)。
在本發(fā)明的一個實施例中,L2高速緩沖存儲器可以包含被處理器110使用的指令和數(shù)據(jù)的一部分。在一些情況下,處理器110可以請求在L2高速緩沖存儲器112中不包含的指令和數(shù)據(jù)。當(dāng)被請求的指令和數(shù)據(jù)未被包含在L2高速緩沖存儲器112中時,所請求的指令和數(shù)據(jù)可以(從更高級別的高速緩沖存儲器,或者從系統(tǒng)存儲器102)被取出,并且被置于L2高速緩沖存儲器中。當(dāng)所述處理器核芯114從L2高速緩沖存儲器112請求指令時,所述指令可以首先被預(yù)解碼器和調(diào)度器220處理(下面更詳細(xì)說明)。
在本發(fā)明的一個實施例中,在圖1中所述的L1高速緩沖存儲器116可以被劃分為兩個部分L1指令高速緩沖存儲器222(L1I-高速緩沖存儲器222),用于存儲指令線;以及L1數(shù)據(jù)高速緩沖存儲器224(L1D-高速緩沖存儲器224),用于存儲數(shù)據(jù)線(D-線)。在從L2高速緩沖存儲器112取出的I-線被預(yù)解碼器和調(diào)度器220處理后,所述I-線可以置于I-高速緩沖存儲器222中。
在本發(fā)明的一個實施例中,可以從成組的L2高速緩沖存儲器112和I-高速緩沖存儲器222讀取指令,所述成組的L2高速緩沖存儲器112和I-高速緩沖存儲器222被稱為指令線(I-線)并被置于I-線緩沖器226中,其中,處理器核芯114可以訪問在該I-線中的指令。在一個實施例中,可以使用I-高速緩沖存儲器222和I-線緩沖器226的一部分來存儲有效地址和控制比特(EA/CTL),所述有效地址和控制比特(EA/CTL)可以被核芯114和/或預(yù)解碼器和調(diào)度器220使用來處理例如每個I-線,以實現(xiàn)如下所述的指令預(yù)取機制。
從L2高速緩沖存儲器預(yù)取指令線圖3是描述按照本發(fā)明的一個實施例的多個示例性I-線的圖。在一個實施例中,每個I-線可以包含多個指令(例如I1、I2、I3等)、以及諸如有效地址和控制比特之類的控制信息。在一定程度上,在每個I-線中的指令可以依序執(zhí)行,從而首先執(zhí)行指令I(lǐng)1,然后執(zhí)行I2,等等。因為依序執(zhí)行指令,因此也通常依序執(zhí)行I-線。因此,在一些情況下,每次從L2高速緩沖存儲器112向I-高速緩沖存儲器222移動I-線時,預(yù)解碼器和調(diào)度器220可以檢查I-線(例如I-線1),并且預(yù)取下一順序的I-線(例如I-線2),以便下一I-線被置于I-高速緩沖存儲器222中,并且可由處理器核芯114訪問。
在一些情況下,由處理器核芯114執(zhí)行的I-線可以包括分支指令(例如條件分支指令)。分支指令是分支到另一個指令(在此被稱為目標(biāo)指令)的指令。在一些情況下,所述目標(biāo)指令可以與分支指令在同一I-線內(nèi)。例如,在圖3中所描述的指令I(lǐng)21可以指定如果滿足一定條件(例如,如果在存儲器中存儲的值是0)則應(yīng)當(dāng)執(zhí)行目標(biāo)指令I(lǐng)41。因為包含目標(biāo)指令的I-線(I-線1)可能已經(jīng)在I-高速緩沖存儲器222中,因此如果進(jìn)行分支到指令I(lǐng)41,則可能不發(fā)生I-高速緩沖存儲器未中,使得處理器核芯114能夠繼續(xù)有效地處理指令。
在一些情況下,分支指令可以分支到在包含該分支指令的當(dāng)前I-線外部的指令,分支到當(dāng)前I-線之外的I-線的分支指令在此被稱為退出分支指令或者退出分支。退出分支指令可以是無條件的分支(例如,總是分支)或者條件分支指令(例如,如果等于0則分支)。例如,如果滿足對應(yīng)的條件,則在I-線1中的指令I(lǐng)51可以是分支到在I-線2中的指令I(lǐng)42的條件分支指令。在一些情況下,假定I-線2成功讀取并且已經(jīng)定位在I-高速緩沖存儲器222中,如果進(jìn)行條件分支,則處理器核芯114可以成功地從I-高速緩沖存儲器222請求指令I(lǐng)42,而不會發(fā)生I-高速緩沖存儲器未中。
但是,在一些情況下,條件分支指令(例如,指令I(lǐng)61)可以分支到不位于I-高速緩沖存儲器222內(nèi)的I-線中的指令(例如,在I-線X中的指令I(lǐng)4x),導(dǎo)致高速緩沖存儲器未中和處理器110的低效率運行。
按照本發(fā)明的一個實施例,可以通過按照從當(dāng)前被讀取的I-線提取的分支退出地址而預(yù)取目標(biāo)I-線,來降低I-高速緩沖存儲器未中的次數(shù)。
圖4是描述按照本發(fā)明的一個實施例的用于防止I-高速緩沖存儲器未中的處理400的流程圖。處理400可以在步驟404開始,其中,從L2高速緩沖存儲器112讀取I-線。在步驟406,可以識別從I-線退出的分支指令,并且在步驟408,可以提取被該退出分支指令作為目標(biāo)的指令的地址(稱為分支退出地址)。然后,在步驟410,可以使用所述分支退出地址來從L2高速緩沖存儲器112預(yù)取包含該作為目標(biāo)的指令的指令線。通過預(yù)取包含該作為目標(biāo)的指令的指令線并且將預(yù)取的指令置于I-高速緩沖存儲器222中,如果/當(dāng)取該退出分支時,由此可以防止高速緩沖存儲器未中。
在一個實施例中,可以直接在I-線中存儲(向I-線附加)所述分支退出地址。圖5是描述按照本發(fā)明的一個實施例的包含I-線分支退出地址(EA1)的I-線(I-線1)的方框圖。所存儲的分支退出地址EA1可以是有效地址或者有效地址的一部分。如所述,分支退出地址EA1可以識別包含被分支指令I(lǐng)61作為目標(biāo)的指令I(lǐng)4x的I-線。
按照一個實施例,所述I-線也可以存儲其它的有效地址(例如EA2)和控制比特(例如CTL)。如下所述,可以使用其它的有效地址來預(yù)取與在I-線中的數(shù)據(jù)訪問指令或者附加分支指令地址相對應(yīng)的數(shù)據(jù)線??刂票忍谻TL可以包括一個或多個比特,它們指示分支指令的歷史(CBH)、以及在I-線內(nèi)的分支指令的位置(CB-LOC)。下面也說明在I-線中存儲的信息的使用。
示例性預(yù)取電路圖6是描述按照本發(fā)明的一個實施例的用于預(yù)取指令和數(shù)據(jù)線的電路的方框圖。在本發(fā)明的一個實施例中,所述電路可以預(yù)取僅僅D-線或者僅僅I-線。在本發(fā)明的另一個實施例中,所述電路可以預(yù)取I-線和D-線二者。
每次從L2高速緩沖存儲器112讀取I-線或者D-線以分別被置于I-高速緩沖存儲器222或者D-高速緩沖存儲器224中時,由指令/據(jù)(I/D)控制的選擇電路620可以將所讀取的I-線或者D-線取路由到適當(dāng)?shù)母咚倬彌_存儲器。
預(yù)解碼器和調(diào)度器220可以檢查被L2高速緩沖存儲器112輸出的信息。在一個實施例中,當(dāng)使用多個處理器核芯114時,可以在多個處理器核芯之間共享單個預(yù)解碼器和調(diào)度器220。在另一個實施例中,可以對于每個處理器核芯114分離地提供預(yù)解碼器和調(diào)度器220。
在一個實施例中,預(yù)解碼器和調(diào)度器220可以具有預(yù)解碼器控制電路610,用于確定L2高速緩沖存儲器112輸出的信息是I-線還是D-線。例如,L2高速緩沖存儲器112可以在L2高速緩沖存儲器112中包含的每個信息塊中設(shè)置指定的比特,并且預(yù)解碼器控制電路610可以檢查該指定比特以確定由L2高速緩沖存儲器112輸出的信息塊是I-線還是D-線。
如果預(yù)解碼器控制電路610確定由L2高速緩沖存儲器112輸出的信息是I-線,則預(yù)解碼器控制電路610可以使用I-線地址選擇電路604和D-線地址選擇電路606來選擇在I-線中包含的任何適當(dāng)?shù)挠行У刂?例如,EA1或者EA2)。然后可以使用選擇(SEL)信號來由選擇電路608選擇所述有效地址。所選擇的有效地址可以然后被輸出到例如預(yù)取電路602,來作為用于從L2高速緩沖存儲器112預(yù)取對應(yīng)的I-線或D-線的32比特預(yù)取地址。
在一些情況下,所讀取的I-線可以包含對應(yīng)于要從主存儲器預(yù)取的第二I-線的單個有效地址(例如,包含由退出分支指令作為目標(biāo)的指令)。在其它情況下,所述I-線可以包含要從主存儲器預(yù)取的目標(biāo)I-線的有效地址、以及要從主存儲器預(yù)取的目標(biāo)D-線的有效地址。在其它實施例中,每個I-線可以包含要從主存儲器預(yù)取的多個I-線和/或者多個D-線的有效地址。按照一個實施例,當(dāng)I-線包含要預(yù)取的多個有效地址時,所述地址可以被臨時存儲(例如,在預(yù)解碼器控制電路610或者I-線地址選擇電路604或者一些其它的緩沖器中),同時每個有效地址被發(fā)送到預(yù)取電路602。在另一個實施例中,預(yù)取地址可以被并行發(fā)送到預(yù)取電路602和/或L2高速緩沖存儲器112。
預(yù)取電路602可以確定是否所請求的有效地址在L2高速緩沖存儲器112中。例如,預(yù)取電路602可以包含內(nèi)容可編址存儲器(CAM),諸如翻譯后備緩沖器(TLB),它可以確定是否所請求的有效地址在L2高速緩沖存儲器112中。如果所請求的有效地址在L2高速緩沖存儲器112中,則預(yù)取電路602可以向L2高速緩沖存儲器發(fā)出請求,以讀取對應(yīng)于所請求的有效地址的實際地址。對應(yīng)于實際地址的信息塊可以然后被輸出到選擇電路620,并且被引導(dǎo)到適當(dāng)?shù)腖1高速緩沖存儲器(例如,I-高速緩沖存儲器222或D-高速緩沖存儲器224)。如果預(yù)取電路602確定所請求的有效地址不在L2高速緩沖存儲器112中,則預(yù)取電路可以向更高級別的高速緩沖存儲器和/或存儲器發(fā)送信號。例如,預(yù)取電路602可以向L3高速緩沖存儲器發(fā)送對于地址的預(yù)取請求,然后可以向L3高速緩沖存儲器搜索所請求的地址。
在一些情況下,在預(yù)解碼器和調(diào)度器220試圖從L2高速緩沖存儲器112預(yù)取I-線或D-線之前,預(yù)解碼器和調(diào)度器220(或者,作為選項,預(yù)取電路602)可以確定是否正在被預(yù)取的所請求的I-線或者D-線已經(jīng)包含在I-高速緩沖存儲器222或者D-高速緩沖存儲器224中。如果所請求的I-線或D-線已經(jīng)位于I-高速緩沖存儲器222或者D-高速緩沖存儲器224中,則L2高速緩沖存儲器預(yù)取可能沒有必要,因此可能不執(zhí)行。在一些情況下,當(dāng)使得預(yù)取不必要時,在I-線中存儲當(dāng)前的有效地址也可能不必要,使得其它有效地址可以被存儲在I-線中(如下所述)。
在一個實施例中,當(dāng)從L2高速緩沖存儲器112讀取每個預(yù)取線的信息時,所述預(yù)取信息也可以被預(yù)解碼器和調(diào)度器220檢查以確定是否所預(yù)取信息線是I-線。如果所預(yù)取信息是I-線,則可以由預(yù)解碼器控制電路610來檢查I-線,以確定是否所預(yù)取的I-線包含任何對應(yīng)于例如另一I-線的任何有效地址,所述另一I-線包含被在所預(yù)取的I-線中的分支指令作為目標(biāo)的指令。如果所預(yù)取I-線包含指向另一I-線的有效地址,則也可以預(yù)取所述另一I-線。可以對該第二預(yù)取I-線重復(fù)同一處理,以便可以根據(jù)在每個I-線中包含的分支退出地址來預(yù)取多個I-線的鏈。
在本發(fā)明的一個實施例中,預(yù)解碼器和調(diào)度器220可以繼續(xù)預(yù)取I-線(和D-線),直到已經(jīng)讀取了閾值數(shù)目的I-線和/或D-線??梢砸匀魏芜m當(dāng)?shù)姆绞絹磉x擇所述閾值。例如,可以根據(jù)可以被分別置于I-高速緩沖存儲器和D-高速緩沖存儲器中的I-線和/或D-線的數(shù)目來選擇閾值。當(dāng)I-高速緩沖存儲器和/或D-高速緩沖存儲器具有大容量時,可以選擇大閾值數(shù)目的預(yù)取,而當(dāng)I-高速緩沖存儲器和/或D-高速緩沖存儲器具有小容量時,可以選擇小閾值數(shù)目的預(yù)取。
作為另一個示例,可以根據(jù)在正被讀取的I-線內(nèi)的條件分支指令的可預(yù)測性來選擇預(yù)取的閾值數(shù)目。在一些情況下,可以預(yù)測條件分支指令的結(jié)果(例如,該分支是否被進(jìn)行),因此,可以預(yù)測要預(yù)取的適當(dāng)I-線。但是,當(dāng)在I-線之間的分支預(yù)測的數(shù)目提高時,預(yù)測的整體精度可能變小,使得訪問給定的I-線的機會變小。當(dāng)使用不可預(yù)測分支指令的預(yù)取數(shù)目增加時,不可預(yù)測性的級別可能提高。
因此,在一個實施例中,可以選擇預(yù)取的閾值數(shù)目,從而訪問預(yù)取I-線的預(yù)測可能性不落入低于給定的百分比。在一些情況下,所選擇的閾值可以是按照采樣指令的測試運行而選擇的固定數(shù)目。在一些情況下,可以在設(shè)計時執(zhí)行閾值的測試運行和選擇,并且可以將閾值預(yù)先編程到處理器110中。可選地,測試運行可以發(fā)生在程序執(zhí)行的初始“訓(xùn)練(training)”階段期間(如下更詳細(xì)所述)。在另一個實施例中,處理器110可以跟蹤包含不可預(yù)測分支指令的預(yù)取I-線的數(shù)目,并且僅僅在已經(jīng)預(yù)取了包含不可預(yù)測分支指令的給定數(shù)目的I-線后才停止預(yù)取I-線,以便所預(yù)取I-線的閾值數(shù)目根據(jù)I-線的內(nèi)容而動態(tài)地改變。而且,在一些情況下,當(dāng)達(dá)到不可預(yù)測分支時(例如,分支的不可預(yù)測性值低于可預(yù)測性閾值情況下的分支),可以對分支指令的路徑讀取I-線(例如,對預(yù)測分支路徑和未預(yù)測分支路徑二者)。
存儲指令線的分支退出地址按照本發(fā)明的一個實施例,可以通過執(zhí)行在I-線中的指令來確定在I-線內(nèi)的分支指令和對應(yīng)于那些分支指令的目標(biāo)的分支退出地址。執(zhí)行I-線中指令也可以用于記錄分支指令的分支歷史,從而確定分支將被跟隨到在另一I-線中的目標(biāo)指令由此引起I-高速緩沖存儲器未中的可能性。
圖7是描述按照本發(fā)明的一個實施例的、用于存儲對應(yīng)于退出分支指令的分支退出地址的處理700的流程圖。所述處理700可以在步驟704開始,在此,例如從I-高速緩沖存儲器222讀取指令線。在步驟706,可以執(zhí)行在所讀取的指令線中的退出分支。在步驟708,如果進(jìn)行該退出分支,則可以確定被該退出分支作為目標(biāo)的指令是否位于讀取的指令線中。在步驟710,如果由該退出分支作為目標(biāo)的指令不在指令線中,則將作為目標(biāo)的指令的有效地址存儲為退出地址。通過記錄對應(yīng)于作為目標(biāo)的指令的分支退出地址,當(dāng)下一次從L2高速緩沖存儲器112讀取指令線時,可以從L2高速緩沖存儲器112預(yù)取包含作為目標(biāo)的指令的I-線。
在本發(fā)明的一個實施例中,可以直到執(zhí)行了分支到所述分支退出地址的分支指令時才計算分支退出地址。例如,所述分支指令可以指定從所述分支應(yīng)當(dāng)指向的當(dāng)前指令的地址的偏移值。當(dāng)執(zhí)行分支指令并進(jìn)行該分支時,該分支目標(biāo)的有效地址可以被計算并存儲為分支退出地址。在一些情況下,可以存儲整體的有效地址。但是,在其它情況下,僅僅可以存儲有效地址的一部分。例如,可以僅僅使用有效地址的高階32比特來定位包含分支的目標(biāo)指令的高速緩沖存儲的I-線,因此,可以僅僅將那32比特存儲為用于預(yù)取I-線的分支退出地址。
跟蹤和記錄分支歷史在本發(fā)明的一個實施例中,可以存儲各種量的分支歷史信息。在一些情況下,分支歷史可以指示在I-線中的哪個分支或者哪些分支將被進(jìn)行或者已經(jīng)進(jìn)行??梢愿鶕?jù)在實時執(zhí)行期間或者在預(yù)執(zhí)行“訓(xùn)練”期間產(chǎn)生的所存儲的分支歷史信息來確定在I-線中存儲了哪個或者哪些分支退出地址。
按照一個實施例,如上所述,可以存儲對應(yīng)于I-線中最近進(jìn)行的退出分支的分支退出地址。存儲對應(yīng)于I-線中最近進(jìn)行的分支的分支退出地址有效地預(yù)測出當(dāng)隨后讀取I-線時將進(jìn)行同一退出分支。因此,可以預(yù)取包含先前進(jìn)行的退出分支指令的目標(biāo)指令的I-線。
在一些情況下,可以使用一個或多個比特來記錄從I-線退出的退出分支的歷史,并且預(yù)測當(dāng)執(zhí)行在所讀取的I-線中的指令時將進(jìn)行哪個退出分支。例如,如圖5中所示,在指令線(I-線1)中存儲的控制比特CTL可以包含用于指示I-線中哪個退出分支先前被進(jìn)行的信息(CB-LOC)、以及何時進(jìn)行了所述分支的歷史(CBH)(例如,在某個數(shù)目的先前執(zhí)行中多少次進(jìn)行那個分支)。
作為可以如何使用分支位置CB-LOC和分支歷史CBH的示例,考慮還沒有被讀取到L1高速緩沖存儲器222的L2高速緩沖存儲器112中的I-線。當(dāng)向L1高速緩沖存儲器222讀取I-線時,預(yù)解碼器和調(diào)度器220可以確定該I-線不具有分支退出地址,并且因此可以不預(yù)取另一I-線??蛇x地,預(yù)解碼器和調(diào)度器220可以從當(dāng)前的I-線預(yù)取位于下一順序地址的I-線。
當(dāng)執(zhí)行在所讀取的I-線中的指令時,處理器核芯114可以確定在I-線中的分支是否分支到在另一I-線中的目標(biāo)指令。如果檢測到這樣的退出分支,則除了存儲EA1中的分支退出地址之外,還在CB-LOC中存儲該I-線內(nèi)的分支的位置。如果每個I-線包含32個指令,則CB-LOC可以是5比特的二進(jìn)制數(shù),因此數(shù)0-31(對應(yīng)于每個可能的指令位置)可以存儲在CB-LOC中以指示退出分支指令。
在一個實施例中,值也可以被寫入到CBH中,CBH指示進(jìn)行了位于CB-LOC的退出分支指令。例如,如果CBH是單個比特,則在I-線中的指令的首次執(zhí)行期間,當(dāng)執(zhí)行退出分支指令時,可以向CBH寫入0。在CBH中存儲的0可以指示這樣的弱預(yù)測,即在I-線中包含的指令的隨后執(zhí)行期間將進(jìn)行位于CB-LOC的退出分支指令。
如果在I-線中的指令的隨后執(zhí)行期間再次進(jìn)行位于CB-LOC的退出分支,則CBH將被設(shè)置為1。在CBH中存儲的1可以指示如下強預(yù)測,即將再次進(jìn)行位于CB-LOC的退出分支指令。
但是,如果再次讀取同一I-線(CBH=1)并且進(jìn)行不同的退出分支指令,則CB-LOC和EA1的值可以保持相同,但是,CBH可以被清空為0,用于指示弱預(yù)測,即在I-線中包含的指令的隨后執(zhí)行期間將進(jìn)行先前取用的分支。
當(dāng)CBH是0(指示弱分支預(yù)測)并且進(jìn)行不同于由CB-LOC指示的退出分支的退出分支時,可以以所進(jìn)行的退出分支的目標(biāo)地址來蓋寫分支退出地址EA1,并且可以將CB-LOC改變?yōu)閷?yīng)于在I-線中所進(jìn)行的退出分支的值。
因此,當(dāng)使用分支歷史比特時,I-線可以包含對應(yīng)于預(yù)測的退出分支的所存儲的分支退出地址。這樣經(jīng)常地進(jìn)行的退出分支可以比不常進(jìn)行的退出分支更可取。但是,如果弱預(yù)測出退出分支并且進(jìn)行另一退出分支,則分支退出地址可以被改變?yōu)閷?yīng)于所進(jìn)行的退出分支的地址,以便當(dāng)經(jīng)常地進(jìn)行其它退出分支時,弱預(yù)測的退出分支不是優(yōu)選的。
在一個實施例中,CBH可以包含多個歷史比特,以便可以存儲由CB-LOC指示的分支指令的較長的歷史。例如,如果CBH是兩個二進(jìn)制比特,則00可以對應(yīng)于很弱的預(yù)測(在這種情況下,進(jìn)行其它分支將蓋寫分支退出地址和CB-LOC),而01、10和11可以分別對應(yīng)于弱、強和很強的預(yù)測(在這種情況下,進(jìn)行其它的分支可不蓋寫分支退出地址或者CB-LOC)。作為示例,為了替換對應(yīng)于強預(yù)測的退出分支的分支退出地址,可能需要在I-線中的指令的三次連續(xù)執(zhí)行時進(jìn)行三個其它的退出分支。
在本發(fā)明的一個實施例中,可以使用多個分支歷史(例如,CBH1、CBH2等)、多個分支位置(例如,CB-LOC1、CB-LOC2等)和/或多個有效地址。例如,在一個實施例中,可以使用CBH1、CBH2等來跟蹤多個分支歷史,而在EA1中僅僅可以存儲對應(yīng)于CBH1、CBH2等中的最可預(yù)測分支的一個分支退出地址??蛇x地,可以在單個I-線中存儲多個分支歷史和多個分支退出地址。在一個實施例中,僅僅當(dāng)分支歷史指示可以預(yù)測由CB-LOC指定的給定分支時,所述分支退出地址可以用于預(yù)取I-線??蛇x地,可以由預(yù)解碼器和調(diào)度器220預(yù)取僅僅對應(yīng)于在多個所存儲地址中的最可預(yù)測的分支退出地址的I-線。
在本發(fā)明的一個實施例中,可以使用是否退出分支指令引起I-高速緩沖存儲器未中來確定是否存儲分支退出地址。例如,如果給定的退出分支很少引起I-高速緩沖存儲器未中,則可以不存儲對應(yīng)于退出分支的分支退出地址,即使可以比在I-線中的其它退出分支更經(jīng)常地進(jìn)行所述退出分支。如果在I-線中的另一個退出分支不常被進(jìn)行,而是總體上引起更多的I-高速緩沖存儲器未中,則可以在I-線中存儲對應(yīng)于所述其它退出分支的分支退出地址。諸如I-高速緩沖存儲器“未中”標(biāo)志的歷史比特可以如上所述用于確定哪個退出分支最可能引起I-高速緩沖存儲器未中。
在一些情況下,在I-線中存儲的比特可以用于指示是否因為I-高速緩沖存儲器未中或者因為預(yù)取而在I-高速緩沖存儲器222中設(shè)置了指令線。所述比特可以由處理器110使用來確定在防止高速緩沖存儲器未中過程中的預(yù)取的有效性。在一些情況下,預(yù)解碼器和調(diào)度器220(或者可選地,預(yù)取電路602)也可以確定預(yù)取是不必要的,并且因此改變在I-線中的比特。當(dāng),例如,因為正在被預(yù)取的信息已經(jīng)在I-高速緩沖存儲器222或者D-高速緩沖存儲器224中,因而預(yù)取不必要時,可以在I-線沖存儲對應(yīng)于引起更多的I-高速緩沖存儲器未中和D-高速緩沖存儲器未中的指令的其它分支退出地址。
在一個實施例中,是否退出分支引起I-高速緩沖存儲器未中可以是用于確定是否存儲退出分支的分支退出地址的唯一因素。在另一實施例中,退出分支的可預(yù)測性和是否退出分支將引起I-高速緩沖存儲器未中的可預(yù)測性可以一起用于確定是否存儲分支退出地址。例如,可以在一些其它公式中相加、相乘或者使用對應(yīng)于分支歷史和I-高速緩沖存儲器未中歷史的值(例如作為權(quán)重),以確定是否存儲分支退出地址和/或預(yù)取對應(yīng)于該分支退出地址的I-線。
在本發(fā)明的一個實施例中,可以在運行時間連續(xù)地跟蹤和更新分支退出地址、退出分支歷史和退出分支位置,以便當(dāng)執(zhí)行給定的一組指令時,分支退出地址和在I-線中存儲的其它值可以隨著時間而改變。因此,例如,當(dāng)執(zhí)行程序時,可以動態(tài)地修改分支退出地址和預(yù)取的I-線。
在本發(fā)明的另一實施例中,可以在一組指令的初始執(zhí)行階段期間(例如在其中執(zhí)行程序的初始時段期間)選擇和存儲分支退出地址。初始執(zhí)行階段也可以被稱為初始化階段或者訓(xùn)練階段。在初始化階段期間,可以跟蹤分支歷史和分支退出地址,并且可以(例如按照如上所述的標(biāo)準(zhǔn))在I-線中存儲一個或多個分支退出地址。當(dāng)完成初始執(zhí)行階段時,所存儲的分支退出地址可以繼續(xù)用于從L2高速緩沖存儲器112預(yù)取I-線,但是,可以不再跟蹤和更新在所讀取的I-線中的一個或多個分支退出地址。
在一個實施例中,在包含所述一個或多個分支退出地址的I-線中的一個或多個比特可以用于指示是否在初始執(zhí)行階段期間正在更新分支退出地址。例如,可以在訓(xùn)練階段期間清空比特。當(dāng)所述比特被清空時,在執(zhí)行在I-線中的指令時,可以跟蹤分支歷史,并且可以更新一個或多個分支退出地址。當(dāng)完成訓(xùn)練階段時,可以置位所述比特。當(dāng)置位所述比特時,可以不再更新所述一個或多個分支退出地址,并且初始執(zhí)行階段可以完成。
在一個實施例中,初始執(zhí)行階段可以持續(xù)指定的時段(例如,直到已經(jīng)過去了多個時鐘周期)。在一個實施例中,當(dāng)所述指定時段已經(jīng)過去并且退出初始執(zhí)行階段時,最近存儲的分支退出地址可以保持存儲在I-線中。在另一實施例中,對應(yīng)于最常進(jìn)行的退出分支、或者對應(yīng)于引起最頻繁次數(shù)的I-高速緩沖存儲器未中的退出分支的分支退出地址可以被存儲在I-線中并且用于隨后的預(yù)取。
在本發(fā)明的另一個實施例中,初始執(zhí)行階段可以繼續(xù),直到滿足一個或多個退出標(biāo)準(zhǔn)。例如,當(dāng)存儲分支歷史時,初始執(zhí)行階段可以繼續(xù),直到在I-線中的分支之一變得可以預(yù)測(或者可以強預(yù)測),或者直到I-高速緩沖存儲器未中變?yōu)榭梢灶A(yù)測(或者可以強預(yù)測)。當(dāng)給定的退出分支變?yōu)榭深A(yù)測時,可以在I-線中置位鎖定比特,用于指示初始訓(xùn)練階段完成,并且所述可強預(yù)測的退出分支的分支退出地址可以用于當(dāng)從L2高速緩沖存儲器112讀取I-線時執(zhí)行的每個隨后的預(yù)取。
在本發(fā)明的另一個實施例中,可以以間歇的訓(xùn)練階段來修改在I-線中的分支退出地址。例如,可以存儲每個訓(xùn)練階段的頻率和持續(xù)時間值。每次對應(yīng)于該頻率的多個時鐘周期已經(jīng)過去時,訓(xùn)練階段可以啟動,并且可以持續(xù)所指定的持續(xù)時間值。在另一個實施例中,每次對應(yīng)于該頻率的多個時鐘周期已經(jīng)過去時,訓(xùn)練階段可以啟動和持續(xù),直到滿足了所指定的條件(例如,直到達(dá)到了分支的分支可預(yù)測性的指定級別,如上所述)。
在本發(fā)明的一個實施例中,在系統(tǒng)100中使用的高速緩沖存儲器和/或存儲器的每個級別可以包含在I-線中包含的信息的拷貝。在本發(fā)明的另一個實施例中,僅僅高速緩沖存儲器和/或存儲器的所指定級別可以包含在I-線中包含的信息(例如,分支歷史和退出分支)。在一個實施例中,可以使用本領(lǐng)域內(nèi)的技術(shù)人員公知的高速緩沖存儲器的一致性原理(coherency principle)來更新在高速緩沖存儲器和/或存儲器的每個級別中的I-線的拷貝。
注意,在使用指令高速緩沖存儲器的傳統(tǒng)系統(tǒng)中,通常不由處理器110來修改指令。因此,在傳統(tǒng)的系統(tǒng)中,通常I-線在被處理后丟棄,而不是被寫回I-高速緩沖存儲器。但是,如在此所述,在一些實施例中,修改的I-線可以被寫回I-高速緩沖存儲器222中。
作為示例,當(dāng)已經(jīng)由處理器核芯處理了在I-線中的指令(可能使得更新分支退出地址和其它的歷史信息)時,可以向I-高速緩沖存儲器222中寫入I-線(稱為寫回),可能蓋寫在I-高速緩沖存儲器222中存儲的I-線的更舊的版本。在一個實施例中,當(dāng)已經(jīng)對在I-線中存儲的信息進(jìn)行改變時,I-線可以僅僅被置于I-高速緩沖存儲器222中。
按照本發(fā)明的一個實施例,當(dāng)向I-高速緩沖存儲器222寫回修改的I-線時,可以將I-線標(biāo)注為被改變。當(dāng)I-線被寫回I-高速緩沖存儲器222并且被標(biāo)注為被改變時,所述I-線可以在I-高速緩沖存儲器中保持不同的時間量。例如,如果由處理器核芯114經(jīng)常使用I-線,則I-線可以被讀取并返回到I-高速緩沖存儲器222多次,并可能每次被更新。但是,如果不頻繁使用I-線(稱為老化(aging)),則可以從I-高速緩沖存儲器222清除該I-線。當(dāng)從I-高速緩沖存儲器222清除該I-線時,可以向L2高速緩沖存儲器112寫回I-線。在一個實施例中,只在該I-線標(biāo)注為被修改時,可以向L2高速緩沖存儲器寫回該I-線。在另一個實施例中,I-線可以總被寫回到L2高速緩沖存儲器112。在一個實施例中,可以可選地將I-線一次寫回多個高速緩沖存儲器級別(例如寫回到L2高速緩沖存儲器112和I-高速緩沖存儲器222)、或者除了I-高速緩沖存儲器222之外的級別(例如,直接寫回到L2高速緩沖存儲器112)。
結(jié)論如上所述,由在第一I-線中包含的退出分支指令作為目標(biāo)的指令的地址可以被存儲并用于從L2高速緩沖存儲器預(yù)取包含作為目標(biāo)的指令的第二I-線。結(jié)果,可以減少I-高速緩沖存儲器未中的數(shù)目和訪問指令的相應(yīng)的等待時間,使得處理器性能提高。
雖然上述涉及本發(fā)明的實施例,但是在不脫離本發(fā)明的基本范圍的情況下,可以設(shè)計本發(fā)明的其它和另外的實施例,并且本發(fā)明的范圍由所附的權(quán)利要求確定。
權(quán)利要求
1.一種預(yù)取指令線的方法,包括(a)從第2級別高速緩沖存儲器讀取第一指令線;(b)在所述第一指令線中識別以在所述第一指令線外部的指令為目標(biāo)的分支指令;(c)從所識別的分支指令提取地址;以及(d)使用所提取的地址從所述第2級別高速緩沖存儲器預(yù)取包含作為目標(biāo)的指令的第二指令線。
2.按照權(quán)利要求1的方法,還包括重復(fù)步驟(a)-(d)以預(yù)取包含由在所述第二指令線中的分支指令作為目標(biāo)的指令的第三指令線。
3.按照權(quán)利要求1的方法,還包括重復(fù)步驟(a)-(d),直到預(yù)取了閾值數(shù)目的指令線。
4.按照權(quán)利要求1的方法,還包括重復(fù)步驟(a)-(d),直到從所述第2級別高速緩沖存儲器預(yù)取了包含閾值數(shù)目的不可預(yù)測退出分支指令的多個預(yù)取的指令線。
5.按照權(quán)利要求1的方法,還包括在所述第一指令線中識別以在所述第一指令線外部的第二指令作為目標(biāo)的第二分支指令;從所識別的第二分支指令中提取第二地址;以及使用所提取的第二地址來從所述第2級別高速緩沖存儲器預(yù)取包含作為目標(biāo)的第二指令的第三指令線。
6.按照權(quán)利要求1的方法,其中,所提取的地址存儲為附加到所述第一指令線的有效地址。
7.按照權(quán)利要求6的方法,其中,在所識別的分支指令的先前執(zhí)行期間計算所述有效地址。
8.按照權(quán)利要求1的方法,其中,所述第一指令線包含以在所述第一指令線外部的二個或更多指令作為目標(biāo)的二個或更多分支指令,并且其中,在所述第一指令線中存儲的分支歷史值指示所識別的分支指令是所述第一指令線的預(yù)測的分支。
9.一種處理器,包括第2級別高速緩沖存儲器;第1級別高速緩沖存儲器,被配置來從所述第2級別高速緩沖存儲器接收指令線,其中,每個指令線包括一個或多個指令;處理器核芯,被配置來執(zhí)行從所述第1級別高速緩沖存儲器取出的指令;以及電路,被配置來(a)從第2級別高速緩沖存儲器讀取第一指令線;(b)在所述第一指令線中識別以在所述第一指令線外部的指令為目標(biāo)的分支指令;(c)從所識別的分支指令提取地址;以及(d)使用所提取的地址從所述第2級別高速緩沖存儲器預(yù)取包含作為目標(biāo)的指令的第二指令線。
10.按照權(quán)利要求9的處理器,其中,所述控制電路還被配置來重復(fù)步驟(a)-(d),以預(yù)取包含被在所述第二指令線中的分支指令作為目標(biāo)的指令的第三指令線。
11.按照權(quán)利要求9的處理器,其中,所述控制電路還被配置來重復(fù)步驟(a)-(d),直到預(yù)取了閾值數(shù)目的指令線。
12.按照權(quán)利要求9的處理器,其中,所述控制電路還被配置來重復(fù)步驟(a)-(d),直到從所述第2級別高速緩沖存儲器預(yù)取了包含閾值數(shù)目的不可預(yù)測的退出分支指令的多個預(yù)取的指令線。
13.按照權(quán)利要求9的處理器,其中,所述控制電路還被配置來在所述第一指令線中識別以在所述第一指令線外部的第二指令作為目標(biāo)的第二分支指令;從所識別的第二分支指令提取第二地址;以及使用所提取的第二地址來從所述第2級別高速緩沖存儲器預(yù)取包含作為目標(biāo)的第二指令的第三指令線。
14.按照權(quán)利要求9的處理器,其中,所提取的地址被存儲為附加到所述第一指令線的有效地址。
15.按照權(quán)利要求14的處理器,其中,由所述處理器核芯在所識別的分支指令的先前執(zhí)行期間計算所述有效地址。
16.按照權(quán)利要求9的處理器,其中,所述第一指令線包含以在所述第一指令線外部的二個或更多指令為目標(biāo)的二個或更多分支指令,并且其中,在所述第一指令線中存儲的分支歷史值指示所識別的分支指令是所述第一指令線的預(yù)測的分支。
17.一種在指令線中存儲退出分支地址的方法,其中,所述指令線包括一個或多個指令,所述方法包括執(zhí)行在所述指令線中的所述一個或多個指令中的一個;確定所述一個或多個指令中的所述一個是否分支到另一指令線中的指令;以及如果是,則將退出地址附加到對應(yīng)于另一指令線的指令線。
18.按照權(quán)利要求17的方法,其中,具有所附加的退出地址的指令線被寫回第2級別高速緩沖存儲器。
19.按照權(quán)利要求17的方法,其中,在所述指令線中存儲與所述一個或多個指令中的所述一個相對應(yīng)的分支歷史信息。
20.按照權(quán)利要求19的方法,還包括在所述指令線中的所述一個或多個指令的隨后執(zhí)行期間,執(zhí)行在所述指令線中的所述一個或多個指令中的第二個;如果所述一個或多個指令中的所述第二個分支到在第二指令線中的第二指令,則確定對應(yīng)于所述一個或多個指令中的一個的所述分支歷史信息是否指示所述分支可預(yù)測;如果所述分支不可預(yù)測,則向?qū)?yīng)于所述第二指令線的指令線附加第二退出地址。
21.按照權(quán)利要求17的方法,其中,在其中重復(fù)地執(zhí)行多個指令線的初始執(zhí)行階段期間,執(zhí)行存儲所述退出地址。
22.按照權(quán)利要求17的方法,還包括在第2級別高速緩沖存儲器中存儲具有所附加的退出地址的所述指令線;從所述第2級別高速緩沖存儲器讀取具有所附加的退出地址的所述指令線,并且將所述指令線置于第1級別高速緩沖存儲器中;以及使用附加到所述指令線的所述退出地址來預(yù)取另一指令線。
23.按照權(quán)利要求17的方法,其中,只有在執(zhí)行所述退出分支指令引起高速緩沖存儲器未中的情況下,所述退出地址被附加到所述指令線。
24.按照權(quán)利要求17的方法,其中,所述退出地址是在所述一個或多個指令的所述一個的執(zhí)行期間計算的有效地址。
全文摘要
本發(fā)明的實施例提供了一種用于預(yù)取指令線的方法和裝置。在一個實施例中,所述方法包括從第2級別高速緩沖存儲器讀取第一指令線;在第一指令線中識別以在該第一指令線外部的指令為目標(biāo)的分支指令;從所識別的分支指令提取地址;以及使用所提取的地址從第2級別高速緩沖存儲器預(yù)取包含作為目標(biāo)的指令的第二指令線。
文檔編號G06F12/08GK101013360SQ20071000773
公開日2007年8月8日 申請日期2007年1月29日 優(yōu)先權(quán)日2006年2月3日
發(fā)明者戴維·A·盧克 申請人:國際商業(yè)機器公司