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