專利名稱:用于管理微處理器的指令管線中的指令沖刷的方法及設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明大體來(lái)說(shuō)涉及微處理器,且更具體來(lái)說(shuō)涉及管理微處理器的指令管線中的 指令沖刷。
背景技術(shù):
微處理器可用于從高端計(jì)算系統(tǒng)(其中處理功率代表極為重要的設(shè)計(jì)考慮因素) 到低端嵌入式系統(tǒng)(其中成本、大小和功率消耗構(gòu)成主要的設(shè)計(jì)考慮因素)的多種產(chǎn) 品中。以電池供電的便攜式裝置為目標(biāo)的處理器(例如,音樂(lè)播放器、掌上型計(jì)算機(jī)、便攜式數(shù)字助理(PDA)及類似裝置)代表具有競(jìng)爭(zhēng)力的設(shè)計(jì)考慮因素的極為復(fù)雜的 混合物。 一方面,處理器性能必須足以支持所述裝置的期望功能并提供令人滿意的用 戶"體驗(yàn)"。另一方面,低處理器功率消耗有助于準(zhǔn)許使用具有合理大小的電池系統(tǒng), 同時(shí)實(shí)現(xiàn)可接受的電池使用壽命。上述設(shè)計(jì)折衷的混合物已經(jīng)導(dǎo)致了許多處理器性能和效率提高。例如,現(xiàn)代管線 式處理器(例如所述基于精簡(jiǎn)指令集計(jì)算機(jī)(RISC)體系結(jié)構(gòu)的處理器)通常采用分 支預(yù)測(cè)方法來(lái)阻止指令管線"停止"。對(duì)于指令管線,連續(xù)指令處理的不同方面一般 發(fā)生于所述管線的不同階段內(nèi)。例如,給定指令管線可包含連續(xù)安排的提取、解碼、 發(fā)行及執(zhí)行階段。每個(gè)階段一般在每個(gè)指令時(shí)鐘周期中對(duì)一 (或多個(gè))不同指令進(jìn)行 操作。例如,隨著對(duì)一個(gè)指令的執(zhí)行在執(zhí)行階段完成,可對(duì)其他指令進(jìn)行提取、解碼、 發(fā)行等。分階段的執(zhí)行允許管線式處理器平均每一時(shí)鐘周期執(zhí)行一個(gè)指令。然而,維持所述平均每時(shí)鐘周期一個(gè)指令依賴于保持管線中充滿指令。進(jìn)而,保 持管線中充滿指令意味著管線式處理器在確定是否將采用給定程序分支時(shí)一般不能承 受停止程序指令提取。也就是說(shuō),處理器一般必須做出關(guān)于是否采用給定程序分支的 猜測(cè)(預(yù)測(cè))。如果所述預(yù)測(cè)是"采用",則指令提取從分支目標(biāo)地址繼續(xù)進(jìn)行。如 果所述預(yù)測(cè)是"不采用",則指令提取從所述分支指令后的下一指令地址繼續(xù)進(jìn)行。在任一情況下,如果所述預(yù)測(cè)是不正確的,則接續(xù)這一預(yù)測(cè)提取到管線中的指令 將是"錯(cuò)誤"指令。所述管線可在任何給定時(shí)間具有多個(gè)未完成預(yù)測(cè),也就是說(shuō),在 其管線階段的各個(gè)階段中其均可具有多個(gè)正在處理的未確定分支指令。因此,所述管 線中正在處理的指令的任一給定者均可依賴于所述未完成分支預(yù)測(cè)的一個(gè)或多個(gè),或 者可不依賴于其中的任何一個(gè)。在分支誤預(yù)測(cè)的上下文中,此類可能性會(huì)引入處理復(fù)雜性。 一般來(lái)說(shuō),至少部分正在處理的指令將依賴于至少一個(gè)未完成分支預(yù)測(cè),且因此應(yīng)從響應(yīng)于檢測(cè)對(duì)應(yīng)分支 誤預(yù)測(cè)的指令管線中沖刷。挑戰(zhàn)在于難以準(zhǔn)確地識(shí)別或跟蹤正在處理的指令的分支預(yù) 測(cè)依賴程度,尤其是因?yàn)槟承┲噶羁赡懿话丛汲绦蝽樞驁?zhí)行。例如,給定指令可能因?yàn)楦咚倬彺嫖疵卸仨毜却龜?shù)據(jù),且當(dāng)管線繼續(xù)處理其 他正在處理的指令時(shí),可中止執(zhí)行所述指令而不是當(dāng)從外部存儲(chǔ)器檢索數(shù)據(jù)時(shí)停止所 述管線。更一般來(lái)說(shuō),不按程序順序執(zhí)行指令代表了包括并行的管線階段組的超標(biāo)量 指令管線的一個(gè)處理性能優(yōu)點(diǎn)。這種超標(biāo)量管線可具有大量正在處理的指令,其中許 多指令不按程序順序執(zhí)行。因此,選擇性地只沖刷依賴于特定分支誤預(yù)測(cè)的指令代表了關(guān)于能夠準(zhǔn)確地識(shí)別 這種依賴程度而不引入太多跟蹤復(fù)雜性方面的潛在重大挑戰(zhàn)。當(dāng)然,選擇性地沖刷指 令的替代方案是,當(dāng)檢測(cè)到分支誤預(yù)測(cè)時(shí)從管線中沖刷所有指令,而不考慮個(gè)別所述 指令實(shí)際上是否依賴于所述誤預(yù)測(cè)的分支指令。所述方法的不利方面是與從管線中沖 刷已經(jīng)提取且至少部分地處理過(guò)的有效指令相關(guān)聯(lián)的性能和效率損失。發(fā)明內(nèi)容本發(fā)明包括一種用于管理微處理器的指令管線中的指令沖刷的方法和設(shè)備。在至 少一個(gè)實(shí)施例中,包含在所述微處理器中的一個(gè)或多個(gè)電路經(jīng)配置以基于下列來(lái)管理 指令沖刷標(biāo)記提取到指令管線中的指令以指示其分支預(yù)測(cè)依賴程度;檢測(cè)不正確的分支預(yù)測(cè);及沖刷指令管線中標(biāo)記為依賴于不正確的分支預(yù)測(cè)的指令。在至少一個(gè)實(shí)施例中,標(biāo)記提取到指令管線中的指令以指示其分支預(yù)測(cè)依賴程度 包括響應(yīng)于做出分支預(yù)測(cè)來(lái)激活位指示符;使特定分支預(yù)測(cè)的相應(yīng)位指示符保持在 現(xiàn)用狀態(tài)直到己經(jīng)解析所述分支預(yù)測(cè);及用所述現(xiàn)用位指示符的集合來(lái)標(biāo)記提取到指 令管線中的每個(gè)指令。例如,沖刷指令管線中標(biāo)記為依賴于不正確的分支預(yù)測(cè)的指令 可包括基于對(duì)應(yīng)于不正確的分支預(yù)測(cè)的位指示符來(lái)廣播沖刷信號(hào);及沖刷指令管線 中用所述位指示符標(biāo)記的指令。類似地,可基于對(duì)應(yīng)于正確分支預(yù)測(cè)的位指示符來(lái)廣 播清除信號(hào),以從指令管線中標(biāo)記為依賴于所述分支預(yù)測(cè)的指令中清除對(duì)應(yīng)的位指示 符。清除允許在依賴程度標(biāo)記過(guò)程中再次使用位指示符。在一個(gè)或多個(gè)實(shí)施例中,標(biāo)記提取到指令管線中的指令以指示其分支預(yù)測(cè)依賴程 度包括將至少"分支沖刷標(biāo)簽"指派給提取到指令管線中的每個(gè)條件分支指令;及 基于先前指派的分支沖刷標(biāo)簽將"分支路徑標(biāo)簽"附加到提取到指令管線中的每個(gè)指 令。在這個(gè)實(shí)施例的上下文中,沖刷指令管線中標(biāo)記為依賴于不正確的分支預(yù)測(cè)的指 令可基于在指令管線的執(zhí)行階段中解析分支條件來(lái)檢測(cè)正確的和不正確的分支預(yù)測(cè), 且對(duì)于不正確的分支預(yù)測(cè),基于相關(guān)聯(lián)的條件分支指令的分支沖刷標(biāo)簽來(lái)在指令管線 中廣播沖刷信號(hào)??身憫?yīng)于所述廣播來(lái)沖刷指令管線中的指令,其中用相關(guān)聯(lián)的條件 分支指令的分支沖刷標(biāo)簽來(lái)標(biāo)記所述指令的分支路徑標(biāo)簽。因此, 一個(gè)或多個(gè)處理器實(shí)施例包含沖刷控制電路,所述沖刷控制電路經(jīng)配置以-標(biāo)記提取到指令管線中的指令來(lái)指示其分支預(yù)測(cè)依賴程度;檢測(cè)不正確的分支預(yù)測(cè); 及沖刷指令管線中標(biāo)記為依賴于不正確的分支預(yù)測(cè)的指令。所述沖刷控制電路可在完 成這些操作時(shí)產(chǎn)生并維持分支沖刷標(biāo)簽及分支路徑標(biāo)簽,且可包含用于與一個(gè)或多個(gè) 指令管線階段合作以完成上述清除與沖刷操作或完成所述操作的變化形式的電路。
圖1是圖解說(shuō)明包含指令管線和相關(guān)聯(lián)的沖刷控制電路的微處理器的方塊圖。 圖2是指令管線及其相關(guān)聯(lián)的沖刷控制電路的一個(gè)實(shí)施例的方塊圖。 圖3是支持基于標(biāo)記并跟蹤分支預(yù)測(cè)依賴程度而從指令管線中沖刷指令的一個(gè)實(shí) 施例的處理邏輯的邏輯流程圖。圖4是圖解說(shuō)明按程序流程順序提取到指令管線中的六個(gè)指令的程序指令流程圖。圖5是支持亂序指令執(zhí)行的超標(biāo)量指令管線的方塊圖。圖6是圖解說(shuō)明產(chǎn)生分支沖刷標(biāo)簽并將其具體附加到提取到指令管線中的分支指 令及將分支路徑標(biāo)簽大致附加到提取到指令管線中的所有類型的指令的表格。圖7是對(duì)應(yīng)于給定數(shù)量的未完成分支預(yù)測(cè)的分支沖刷標(biāo)簽及邏輯地聚集個(gè)別分支 沖刷標(biāo)簽的對(duì)應(yīng)分支路徑標(biāo)簽的代表性組的方塊圖。圖8是圖解說(shuō)明產(chǎn)生分支沖刷標(biāo)簽、用對(duì)應(yīng)的分支路徑標(biāo)簽標(biāo)記指令、及基于廣 播沖刷或清除信號(hào)來(lái)沖刷或清除指令管線中的指令的一個(gè)實(shí)施例的邏輯流程圖。
具體實(shí)施方式
圖1至少部分地圖解說(shuō)明微處理器10,其包括處理器核心12、指令預(yù)取單元14、 指令高速緩存16、指令高速緩存控制器18、裝載/存儲(chǔ)單元20、數(shù)據(jù)高速緩存22、數(shù) 據(jù)高速緩存控制器24及主轉(zhuǎn)換后備緩沖器26。在處理器10的一個(gè)或多個(gè)實(shí)施例中, 處理器核心12的指令管線30包含沖刷控制電路32或與其相關(guān)聯(lián)。作為管理分支指令 目標(biāo)地址預(yù)測(cè)的一部分,沖刷控制電路32支持從指令管線30中沖刷正在處理的指令。通過(guò)非限定性實(shí)例可看出,處理器10可以是基于精簡(jiǎn)指令集計(jì)算機(jī)(RISC)體 系結(jié)構(gòu)的管線式處理器。在處理器10的至少一個(gè)實(shí)施例中,指令管線30支持亂序程 序執(zhí)行,且可包括包含多個(gè)并行執(zhí)行階段的超標(biāo)量指令管線(未圖示)。不管處理器10是否涵蓋超標(biāo)量特征,核心12均執(zhí)行程序指令并完成對(duì)應(yīng)的裝載 /存儲(chǔ)數(shù)據(jù)操作。轉(zhuǎn)換備用緩沖器26接受來(lái)自核心12的輸入,且向核心12提供輸出。 更特定來(lái)說(shuō),轉(zhuǎn)換備用緩沖器26將核心12分別面接到指令與數(shù)據(jù)高速緩存16與22。 指令與數(shù)據(jù)高速緩存16與22包括快速板上存儲(chǔ)器,且處理器10使用經(jīng)由指令和數(shù)據(jù) 高速緩存控制器18及24進(jìn)行預(yù)取的指令及數(shù)據(jù)來(lái)保持所述高速緩存充滿下一步需要的指令和數(shù)據(jù)。在指令預(yù)取的一個(gè)方面中,處理器10使用分支預(yù)測(cè)來(lái)加速其整體性能。借助分 支預(yù)測(cè),當(dāng)在程序流中辨別出條件分支指令時(shí),處理器10—般不會(huì)中斷核心的指令提 取操作,而是依賴于將程序分支預(yù)測(cè)為采用或者不采用而繼續(xù)從接下來(lái)的連續(xù)指令地 址中或從分支目標(biāo)地址中進(jìn)行指令提取。以非限定性實(shí)例方式,基于積累分支預(yù)測(cè)統(tǒng)計(jì)等,核心12可經(jīng)配置以實(shí)施"靜態(tài)"分支預(yù)測(cè),且預(yù)取單元14可經(jīng)配置以實(shí)施動(dòng) 態(tài)分支預(yù)測(cè)。其他電路配置可用來(lái)支持這種操作,且所屬技術(shù)領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到,需記住的一般要點(diǎn)是處理器10是分支預(yù)測(cè)處理器,其中至少部分提取到指令管線30中的指令依賴于在程序執(zhí)行期間由處理器10所做出的分支預(yù)測(cè)。一般來(lái)說(shuō),針對(duì)預(yù)測(cè)的已采用程序分支,指令提取從由分支指令作為目標(biāo)的指令 地址繼續(xù)進(jìn)行,且針對(duì)預(yù)測(cè)的未采用分支,指令提取從指令序列中所述分支指令之后 的指令地址繼續(xù)進(jìn)行。因此,在將某些分支不正確地預(yù)測(cè)為采用或不采用的情況下, 將把"錯(cuò)誤的"程序指令提取到處理器的指令管線30中??紤]到這一點(diǎn),沖刷控制電路32經(jīng)配置以直接地或間接地沖刷管線30中已存在 的所述被"標(biāo)記"為依賴于不正確的分支預(yù)測(cè)的指令。在指令管線30的上下文中更好 地闡述這種沖刷操作,且圖2圖解說(shuō)明指令管線30及沖刷控制電路32的一個(gè)實(shí)施例。 所圖解說(shuō)明的指令管線30包括提取階段40、指令解碼階段42、指令發(fā)行階段44及指 令執(zhí)行階段46。執(zhí)行階段46包含評(píng)價(jià)與條件分支指令相關(guān)聯(lián)的條件的條件確定電路 48或與其相關(guān)聯(lián)。換句話說(shuō),條件確定電路48通過(guò)確定未確定的分支指令的分支條 件來(lái)"解析"未確定的分支指令。確定與條件分支指令相關(guān)聯(lián)的分支條件使得能夠確 定為所述分支指令所做出的分支預(yù)測(cè)是正確的還是不正確的。例如,與指令管線30相關(guān)聯(lián)的分支預(yù)測(cè)電路50可經(jīng)配置以在通過(guò)指令解碼階段 42對(duì)分支指令進(jìn)行解碼后辨別分支指令,且做出關(guān)于是否將采用所述分支的預(yù)測(cè)。這 種預(yù)測(cè)在解析分支條件之前做出,且直到由條件評(píng)價(jià)電路48對(duì)所述分支指令的條件做 出評(píng)價(jià)之后才得知為給定分支指令做出的預(yù)測(cè)的正確性,條件評(píng)價(jià)電路48可經(jīng)配置以 提供指示對(duì)通過(guò)執(zhí)行階段46執(zhí)行的每個(gè)條件分支指令做出的條件解析的輸出。因此, 分支預(yù)測(cè)電路50及/或沖刷控制電路32可經(jīng)配置以接收由條件評(píng)價(jià)電路48輸出的條 件評(píng)價(jià)結(jié)果,以確定給定分支指令是否被正確地預(yù)測(cè)為采用或不采用。如果將分支指令不正確地預(yù)測(cè)為采用、或不正確地預(yù)測(cè)為不采用,則沖刷控制電 路32操作以沖刷所述依賴于誤預(yù)測(cè)分支的正在指令管線30中處理的指令。更特定來(lái) 說(shuō),在至少一個(gè)實(shí)施例中,沖刷控制電路32可操作以"標(biāo)記"提取到指令管線30中 的指令的分支預(yù)測(cè)依賴程度,且響應(yīng)于檢測(cè)分支誤預(yù)測(cè),導(dǎo)致當(dāng)前在指令管線30中標(biāo) 記為依賴于所述特定分支誤預(yù)測(cè)的所述指令被沖刷。在至少一個(gè)實(shí)施例中,使用NOP (無(wú)操作)指令來(lái)填充由沖刷操作在指令管線30中形成的任何"磁泡",但其他實(shí)施 例可不插入NOP,或可視需要采用其他步驟以在沖刷之后繼續(xù)在指令管線30中的操 作。作為沖刷的一部分,或繼沖刷之后,可通過(guò)從適當(dāng)?shù)牡刂分刑崛≈噶顏?lái)重新填充指令管線30。圖3圖解說(shuō)明用于指令沖刷的處理邏輯,其可實(shí)施于沖刷控制電路32中或支持 所述電路的操作。所圖解說(shuō)明的邏輯假設(shè)指令提取正在進(jìn)行,且沖刷控制電路32標(biāo)記 提取到指令管線30中的指令以指示其分支預(yù)測(cè)依賴程度(步驟IOO)。應(yīng)了解,提取 到所述管線中的給定指令一般直接地或間接地依賴于當(dāng)前在指令管線30中未完成的 未解析分支預(yù)測(cè)。因此,隨著做出新預(yù)測(cè)及解析舊預(yù)測(cè),分支預(yù)測(cè)依賴程度在程序執(zhí) 行期間發(fā)生變化,且標(biāo)記沖刷控制電路32的操作的分支預(yù)測(cè)依賴程度相應(yīng)地發(fā)生變 化。假設(shè)已標(biāo)記的指令正在歷經(jīng)指令管線的各個(gè)階段,且正在指令管線30中的某些 點(diǎn)處解析所述分支條件(步驟102),則沖刷控制電路32直接地(或間接地)檢測(cè)分 支誤預(yù)測(cè)(步驟104),且相應(yīng)地做出響應(yīng)。具體地說(shuō),在沖刷控制電路32的至少一 個(gè)實(shí)施例中,其沖刷當(dāng)前在指令管線30中標(biāo)記為依賴于不正確的分支預(yù)測(cè)的所有指令 (步驟106)。應(yīng)了解,在一個(gè)或多個(gè)實(shí)施例中, 一個(gè)用于實(shí)現(xiàn)所述沖刷的機(jī)構(gòu)涉及沖刷控制電 路32,所述沖刷控制電路"廣播"由對(duì)應(yīng)電路在指令管線30中的一個(gè)或多個(gè)階段中 使用以完成實(shí)際沖刷的沖刷信號(hào)。類似地,針對(duì)正確預(yù)測(cè)的分支,沖刷控制電路32 可廣播在指令管線30中一個(gè)或多個(gè)階段中使用的清除信號(hào)來(lái)清除根據(jù)標(biāo)記為依賴于 所述分支的任何指令來(lái)標(biāo)記的對(duì)應(yīng)依賴程度(步驟108)。在至少一個(gè)實(shí)施例中,清 除操作是可選的。然而,提供清除機(jī)制可帶來(lái)數(shù)個(gè)益處,包含允許對(duì)后來(lái)提取的指令 重新使用相同的依賴程度標(biāo)記。不考慮沖刷控制電路32的所述指示符重新使用方面,圖4通過(guò)按程序流順序圖 解說(shuō)明標(biāo)示為"A" 、 "B" 、 "C" 、 "D" 、 "E"和"F"的六個(gè)指令來(lái)促進(jìn)更好 地理解分支預(yù)測(cè)依賴程度標(biāo)記的更基本方面。假設(shè)按程序順序?qū)⑦@些指令提取到指令 管線30中,且圈出的指令C和E為條件分支指令,針對(duì)這些條件分支指令將對(duì)應(yīng)分 支地址目標(biāo)預(yù)測(cè)為采用或不采用。因此,從依賴于針對(duì)分支指令C做出的采用/不采用 預(yù)測(cè)的位置提取指令D和E。同樣,從直接地依賴于針對(duì)分支指令E做出的采用/不采 用預(yù)測(cè)且直接地或間接地依賴于針對(duì)指令C做出的現(xiàn)有預(yù)測(cè)的位置提取指令F。簡(jiǎn)單 地說(shuō),指令D、 E與F依賴于針對(duì)分支指令C做出的分支預(yù)測(cè),且指令F另外依賴于 針對(duì)分支指令E做出的分支預(yù)測(cè)。圖5圖解說(shuō)明在指令管線30的超標(biāo)量實(shí)施例中不按程序順序而執(zhí)行的指令A(yù)-F。 更特定來(lái)說(shuō),所圖解說(shuō)明的執(zhí)行階段46包括兩組并行執(zhí)行階段,將第一組標(biāo)注為階段 E1-A到E4-A,且將第二組標(biāo)注為E1-B到E4-B。當(dāng)然,應(yīng)了解,指令管線30實(shí)際上 可使用甚至更復(fù)雜的執(zhí)行階段安排,可使用不同的階段安排,或可使用未在本文中做 一般說(shuō)明的階段及其他元件。在任何情況下,我們可以容易地了解,沒(méi)有本文教示的依賴程度標(biāo)記,用以識(shí)別 指令管線30中由于分支誤預(yù)測(cè)而必須沖刷的指令的任務(wù)可變得相當(dāng)復(fù)雜。當(dāng)然,我們可能僅在檢測(cè)到任何分支誤預(yù)測(cè)時(shí)沖刷整個(gè)指令管線30,但那樣做將喪失通過(guò)保持已 經(jīng)在指令管線30中處理的非依賴性指令而獲得的性能及效率上的益處。沖刷控制電路30保留所述益處,同時(shí)確保依賴性指令已被沖刷。在沖刷控制電 路32的至少一個(gè)實(shí)施例中,其標(biāo)記提取到指令管線30中的指令以通過(guò)激活響應(yīng)于做 出分支預(yù)測(cè)的位指示符來(lái)指示其分支預(yù)測(cè)依賴程度,將特定分支預(yù)測(cè)的對(duì)應(yīng)位指示符 保持在現(xiàn)用狀態(tài)直到已解析所述分支預(yù)測(cè),且用現(xiàn)用位指示符的集合來(lái)標(biāo)記提取到指 令管線30中的每個(gè)指令。如果這種標(biāo)記被布置于指令流路徑中或如果其可存取所述路 徑,則其可發(fā)生在指令管線30中的任一便利點(diǎn)處(例如提取階段40、解碼階段42), 或在沖刷控制電路32中。在至少一個(gè)實(shí)施例中,沖刷指令管線30中標(biāo)記為依賴于不正確的分支預(yù)測(cè)的指 令包括廣播沖刷信號(hào)及沖刷指令管線30中用所述位指示符標(biāo)記的指令。所述沖刷信號(hào) 可以是基于位指示符的向量,所述位指示符對(duì)應(yīng)于不正確預(yù)測(cè)的分支指令的分支沖刷 標(biāo)簽。類似地,對(duì)于檢測(cè)為正確預(yù)測(cè)的分支預(yù)測(cè),沖刷控制電路32可經(jīng)配置以基于對(duì) 應(yīng)于正確的分支預(yù)測(cè)的位指示符來(lái)廣播清除信號(hào),以此來(lái)從指令管線30中標(biāo)記為依賴 于所述分支預(yù)測(cè)的指令中清除對(duì)應(yīng)的位指示符。所述清除信號(hào)可以是作為所述分支的 分支沖刷標(biāo)簽的逆的向量,因此其可以和每個(gè)指令的分支路徑標(biāo)簽進(jìn)行邏輯與,以清 除所述分支路徑標(biāo)簽中的適當(dāng)位。應(yīng)注意,對(duì)正確預(yù)測(cè)的分支的依賴程度指示符的清 除允許重新使用^f述指示符位置。在圖6與圖7中針對(duì)先前圖解說(shuō)明于圖4中的指令組來(lái)圖解說(shuō)明上述標(biāo)記方法的 一個(gè)實(shí)施例。向分支指令(至少是所述對(duì)其做出分支預(yù)測(cè)的分支指令)指派對(duì)應(yīng)的"分 支沖刷標(biāo)簽"。可將所述分支沖刷標(biāo)簽作為位向量附加到實(shí)際的分支指令中,因此其 與分支指令一起沿指令管線30被攜帶下來(lái)。進(jìn)一步地,標(biāo)記提取到指令管線中的每個(gè) 指令以通過(guò)向其附加"分支路徑標(biāo)簽"來(lái)指示其分支預(yù)測(cè)依賴程度。分支路徑標(biāo)簽可 形成為當(dāng)前未完成的分支沖刷標(biāo)簽的邏輯集合。因此,如果將所述分支沖刷標(biāo)簽實(shí)施為一組唯一的獨(dú)熱碼向量(也就是說(shuō),每個(gè) 分支沖刷標(biāo)簽具有一個(gè)不同的位位置設(shè)定),則可形成分支路徑標(biāo)簽并通過(guò)對(duì)當(dāng)前現(xiàn) 用分支沖刷標(biāo)簽進(jìn)行邏輯或來(lái)將其附加到每個(gè)指令。圖6圖解說(shuō)明所述類型的邏輯或 的一個(gè)實(shí)例。由于指令A(yù)與B不是分支指令,所以向其指派零分支沖刷標(biāo)簽(或根本不向其 指派任何分支沖刷標(biāo)簽),且假設(shè)在將其提取到指令管線時(shí)沒(méi)有未完成的分支預(yù)測(cè), 則向其指派全零分支路徑標(biāo)簽。指令C是分支指令,且向其指派具有唯一的獨(dú)熱碼向 量位位置的分支沖刷標(biāo)簽;然而,由于在提取指令C時(shí)不存在未完成的分支預(yù)測(cè),所 以將其分支路徑設(shè)定為全零。因?yàn)橹噶頓自身不是分支指令,所以不向其指派分支沖刷標(biāo)簽。或者,可向其指 派全零分支沖刷標(biāo)簽。在任一情況下,附加到指令D的分支路徑標(biāo)簽具有在對(duì)應(yīng)于指 令C的分支沖刷標(biāo)簽中的標(biāo)記位的位置中設(shè)定的位。因此,將指令D標(biāo)記為依賴于針對(duì)分支指令C做出的分支預(yù)測(cè)。類似地,用指示指令E與F對(duì)針對(duì)分支指令C做出的 分支預(yù)測(cè)的依賴程度的分支路徑標(biāo)簽來(lái)標(biāo)記指令E與F。進(jìn)一步地,標(biāo)記另外附加到 指令F的分支路徑標(biāo)簽來(lái)顯示其對(duì)針對(duì)分支指令E做出的分支預(yù)測(cè)的依賴程度。通過(guò)上述方法, 一般向每個(gè)條件分支指令指派唯一的分支沖刷標(biāo)簽,而不重新使 用當(dāng)前由仍在管線中的任何未解析的分支指令所要求的標(biāo)簽。 一旦條件分支在管線中 解析或從管線中沖刷,其分支沖刷標(biāo)簽可被"收回",在這種情況下可重新使用所述 標(biāo)簽。也就是說(shuō),當(dāng)已解析向其指派分支沖刷標(biāo)簽的分支時(shí),或當(dāng)由于先前指派的所 述分支沖刷標(biāo)簽依賴于已沖刷的另一指令(分支)或由于(例如)與中斷相關(guān)的沖刷 而將其從管線中沖刷時(shí),可收回并標(biāo)記先前指派的分支沖刷標(biāo)簽供重新使用。在至少一個(gè)實(shí)施例中,假設(shè)依序保持所述指令直到已指派標(biāo)簽,那么分支沖刷標(biāo)簽與分支路徑標(biāo)簽的寬度是相等的,其中所述寬度由允許出現(xiàn)于處理器管線中的其中 指派標(biāo)簽的階段和其中解析分支條件的階段之間的未完成分支數(shù)量來(lái)確定。適當(dāng)?shù)臉?biāo) 簽寬度最大將等于處理器管線中兩個(gè)指定點(diǎn)之間的階段數(shù)量。然而,在至少一個(gè)實(shí)施 例中,由于不可能所有這些階段均含有條件分支,所以標(biāo)簽寬度小于階段數(shù)目。當(dāng)然, 如果在所關(guān)注的管線階段中準(zhǔn)許有亂序指令,則標(biāo)簽寬度(也就是條件分支標(biāo)記的數(shù) 量)可以更大,且更一般來(lái)說(shuō),可根據(jù)所涉及的處理器管線的詳情來(lái)確定。在任何情況下,圖8通過(guò)分支預(yù)測(cè)依賴程度標(biāo)記的上述實(shí)施例的處理細(xì)節(jié)實(shí)例來(lái) 步進(jìn),其中沖刷控制電路32至少為具有未確定的分支條件的條件分支指令激活分支沖 刷標(biāo)簽(步驟110)??稍谥噶罟芫€30中的各點(diǎn)處完成這種激活。例如,可將所述標(biāo) 記作為解碼階段42的指令解碼的一部分而完成,或可緊接所述階段之后來(lái)完成。無(wú)論如何,將分支沖刷標(biāo)簽附加到條件分支指令,因此可針對(duì)為其做出預(yù)測(cè)的分 支指令的個(gè)別指令識(shí)別由執(zhí)行階段46輸出的分支條件結(jié)果。應(yīng)注意,處理器10可通 過(guò)將分支沖刷標(biāo)簽附加到所有分支指令(不管是不是條件分支指令)來(lái)簡(jiǎn)化分支沖刷 標(biāo)簽處理。結(jié)合上述特定于分支指令的分支沖刷標(biāo)簽處理, 一般用包含一個(gè)或多個(gè)對(duì)應(yīng)于當(dāng) 前現(xiàn)用分支沖刷標(biāo)簽的指示符的分支路徑標(biāo)簽(例如,現(xiàn)用分支沖刷標(biāo)簽的邏輯或) 來(lái)標(biāo)記提取到指令管線30中的所有指令(步驟112)??捎蓻_刷控制電路32中的電 路或由位于指令管線30中的其他處的電路來(lái)附加分支路徑標(biāo)簽。例如,可由提取階段 40中或解碼階段42中的電路來(lái)實(shí)施依賴程度標(biāo)記。由于附加到分支指令的分支沖刷標(biāo)簽,條件評(píng)價(jià)電路48可經(jīng)配置以輸出"加標(biāo) 簽"到對(duì)應(yīng)分支沖刷標(biāo)簽的分支條件估計(jì)結(jié)果。也就是說(shuō),為檢測(cè)正確地或不正確地 預(yù)測(cè)的分支,條件評(píng)價(jià)電路48可經(jīng)配置以識(shí)別與給定條件結(jié)果相關(guān)聯(lián)的分支沖刷標(biāo) 簽,且可經(jīng)配置以向沖刷控制電路32及/或向分支預(yù)測(cè)電路50發(fā)信號(hào)通知所述資訊(步 驟114)。針對(duì)正確地預(yù)測(cè)的分支,沖刷控制電路32可經(jīng)配置以基于對(duì)應(yīng)分支指令的分支 沖刷標(biāo)簽來(lái)廣播清除信號(hào)(步驟116)??稍跇?gòu)成指令管線30的一個(gè)或多個(gè)階段處接收所述清除信號(hào),且與所述階段相關(guān)聯(lián)的沖刷電路會(huì)從所述階段中先前被標(biāo)記為依賴 于現(xiàn)在已解析的分支預(yù)測(cè)的指令的分支路徑標(biāo)簽中清除對(duì)應(yīng)的指示符。這種電路可經(jīng) 配置以僅識(shí)別所述具有附加的分支路徑標(biāo)簽的指令,所述附加分支路徑標(biāo)簽具有對(duì)應(yīng) 于由清除信號(hào)指示的分支沖刷標(biāo)簽的設(shè)定位。在某些實(shí)施例中,可將這種電路視為每個(gè)個(gè)別階段的一部分,且在其他實(shí)施例中,可將其視為沖刷控制電路32的一部分。針對(duì)不正確地預(yù)測(cè)的分支,沖刷控制電路32可經(jīng)配置以基于對(duì)應(yīng)分支指令的分 支沖刷標(biāo)簽來(lái)廣播沖刷信號(hào)(步驟118)??稍跇?gòu)成指令管線30的一個(gè)或多個(gè)階段處 接收所述沖刷信號(hào),且與所述階段相關(guān)聯(lián)的沖刷電路會(huì)沖刷具有標(biāo)記為依賴于現(xiàn)在己 解析的分支預(yù)測(cè)的分支路徑標(biāo)簽的指令。所屬技術(shù)領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到,.上述處理邏輯僅代表用于標(biāo)記正在處理的指 令的分支預(yù)測(cè)依賴程度的更寬泛方法的一個(gè)實(shí)施例,因此可響應(yīng)于檢測(cè)出特定分支指 令被誤預(yù)測(cè)而從指令管線30中選擇性地沖刷這些指令。 一般來(lái)說(shuō),處理器10經(jīng)配置 以標(biāo)記指令來(lái)指示所述指令所依賴的特定分支指令,檢測(cè)個(gè)別分支指令的誤預(yù)測(cè),且 通過(guò)使用所述標(biāo)記識(shí)別依賴于誤預(yù)測(cè)分支的指令而從指令管線30中選擇性地沖刷指 令。因此,本發(fā)明并不限于前面的論述,也不限于附圖。而是,本發(fā)明僅由下面的權(quán) 利要求項(xiàng)及其合法的等效內(nèi)容限定。
權(quán)利要求
1、一種管理指令管線中的分支預(yù)測(cè)的方法,其包括標(biāo)記提取到所述指令管線中的指令以指示其分支預(yù)測(cè)依賴程度;檢測(cè)不正確的分支預(yù)測(cè);及沖刷所述指令管線中標(biāo)記為依賴于不正確的分支預(yù)測(cè)的指令。
2、 如權(quán)利要求1所述的方法,其中標(biāo)記提取到所述指令管線中的指令以指示其 分支預(yù)測(cè)依賴程度包括響應(yīng)于做出分支預(yù)測(cè)來(lái)激活位指示符;將特定分支預(yù)測(cè)的對(duì) 應(yīng)位指示符保持在現(xiàn)用狀態(tài)直到已解析所述分支預(yù)測(cè);及用所述現(xiàn)用位指示符的集合 來(lái)標(biāo)記提取到所述指令管線中的每個(gè)指令。
3、 如權(quán)利要求2所述的方法,其中沖刷所述指令管線中標(biāo)記為依賴于不正確的 分支預(yù)測(cè)的指令包括基于對(duì)應(yīng)于所述不正確的分支預(yù)測(cè)的所述位指示符來(lái)廣播沖刷 信號(hào);及沖刷所述指令管線中用所述位指示符標(biāo)記的指令。
4、 如權(quán)利要求2所述的方法,其進(jìn)一步包括檢測(cè)正確的分支預(yù)測(cè);及基于對(duì) 應(yīng)于正確的分支預(yù)測(cè)的所述位指示符來(lái)廣播清除信號(hào),以從所述指令管線中標(biāo)記為依 賴于所述分支預(yù)測(cè)的所述指令中清除所述對(duì)應(yīng)的位指示符。
5、 如權(quán)利要求1所述的方法,其中標(biāo)記提取到所述指令管線中的指令以指示其 分支預(yù)測(cè)依賴程度包括至少向提取到所述指令管線中的每個(gè)條件分支指令指派一分 支沖刷標(biāo)簽;及基于所述分支沖刷標(biāo)簽將分支路徑標(biāo)簽附加到提取到所述指令管線中 的每個(gè)指令。
6、 如權(quán)利要求5所述的方法,其中沖刷所述指令管線中標(biāo)記為依賴于不正確的 分支預(yù)測(cè)的指令包括在所述指令管線的執(zhí)行階段中解析分支條件來(lái)檢測(cè)正確的和不 正確的分支預(yù)測(cè);及針對(duì)不正確的分支預(yù)測(cè),基于所述相關(guān)聯(lián)條件分支指令的所述分 支沖刷標(biāo)簽來(lái)在所述指令管線中廣播沖刷信號(hào);及沖刷所述指令管線中的其分支路徑 標(biāo)簽對(duì)應(yīng)于所述相關(guān)聯(lián)條件分支指令的所述分支沖刷標(biāo)簽的所有指令。
7、 如權(quán)利要求6所述的方法,其進(jìn)一步包括響應(yīng)于檢測(cè)到正確的分支預(yù)測(cè), 基于所述相關(guān)聯(lián)條件分支指令的所述分支沖刷標(biāo)簽來(lái)在所述指令管線中廣播清除信 號(hào);及從當(dāng)前在所述指令管線中的指令的所述分支路徑標(biāo)簽中清除任何對(duì)應(yīng)于所述分 支沖刷標(biāo)簽的指示符。
8、 如權(quán)利要求7所述的方法,其進(jìn)一步包括重新使用分支沖刷標(biāo)簽,其中已針 對(duì)所述分支沖刷標(biāo)簽來(lái)廣播沖刷或清除信號(hào)以標(biāo)記與正在進(jìn)行的指令提取操作相關(guān)聯(lián) 的新分支預(yù)測(cè)依賴程度。
9、 如權(quán)利要求5所述的方法,其進(jìn)一步包括在解析所述相關(guān)聯(lián)條件分支指令的分支條件后或在沖刷所述給定的條件分支指令后,收回向給定的條件分支指令所指派的分支沖刷標(biāo)簽;及視需要重新使用所收回的分支沖刷標(biāo)簽來(lái)標(biāo)記新分支預(yù)測(cè)依賴程度。
10、 一種處理器,其包括包含沖刷控制電路的指令管線,所述沖刷控制電路經(jīng)配置以標(biāo)記提取到所述指令管線中的指令以指示其分支預(yù)測(cè)依賴程度; 檢測(cè)不正確的分支預(yù)測(cè);及沖刷所述指令管線中標(biāo)記為依賴于不正確的分支預(yù)測(cè)的指令。
11、 如權(quán)利要求10所述的處理器,其中所述沖刷控制電路經(jīng)配置以標(biāo)記提取 到所述指令管線中的指令以通過(guò)響應(yīng)于做出分支預(yù)測(cè)來(lái)激活位指示符而指示所述指令 的分支預(yù)測(cè)依賴程度;將特定分支預(yù)測(cè)的對(duì)應(yīng)位指示符保持在現(xiàn)用狀態(tài)直到已解析所 述分支預(yù)測(cè);及用所述現(xiàn)用位指示符的集合來(lái)標(biāo)記提取到所述指令管線中的每個(gè)指令。
12、 如權(quán)利要求11所述的處理器,其中所述沖刷控制電路經(jīng)配置以通過(guò)基于對(duì) 應(yīng)于所述不正確的分支預(yù)測(cè)的所述位指示符來(lái)廣播沖刷信號(hào)而沖刷所述指令管線中標(biāo) 記為依賴于不正確的分支預(yù)測(cè)的指令,以藉此起始對(duì)所述指令管線中用所述位指示符 標(biāo)記的指令的沖刷。
13、 如權(quán)利要求12所述的處理器,其中所述指令管線的一個(gè)或多個(gè)階段包含指 令沖刷電路,所述指令沖刷電路經(jīng)配置以接收所述沖刷信號(hào),且進(jìn)一步經(jīng)配置以沖刷 用由所述沖刷信號(hào)來(lái)傳送的位指示符標(biāo)記的指令。
14、 如權(quán)利要求11所述的處理器,其中所述沖刷控制電路經(jīng)配置以基于對(duì)應(yīng)于 正確的分支預(yù)測(cè)的所述位指示符來(lái)廣播清除信號(hào),以從所述指令管線中標(biāo)記為依賴于 所述分支預(yù)測(cè)的指令中清除所述對(duì)應(yīng)的位指示符。
15、 如權(quán)利要求14所述的處理器,其中所述指令管線的一個(gè)或多個(gè)階段包含指 令沖刷電路,所述指令沖刷電路經(jīng)配置以接收所述清除信號(hào),且進(jìn)一步經(jīng)配置以從對(duì) 應(yīng)于由所述清除信號(hào)傳送的位指示符的指令中清除標(biāo)記。
16、 如權(quán)利要求10所述的處理器,其中所述沖刷控制電路經(jīng)配置以標(biāo)記提取到 所述指令管線中的指令來(lái)通過(guò)下列操作指示所述指令的分支預(yù)測(cè)依賴程度至少向提 取到所述指令管線中的每個(gè)條件分支指令指派一分支沖刷標(biāo)簽,及基于所述分支沖刷 標(biāo)簽將分支路徑標(biāo)簽附加到提取到所述指令管線的每個(gè)指令。
17、 如權(quán)利要求16所述的處理器,其中所述沖刷控制電路經(jīng)配置以通過(guò)基于所 述相關(guān)條件分支指令的所述分支沖刷標(biāo)簽來(lái)在所述指令管線中廣播沖刷信號(hào)而沖刷所 述指令管線中標(biāo)記為依賴于不正確的分支預(yù)測(cè)的指令,以藉此起始對(duì)所述指令管線中 所有用對(duì)應(yīng)于所述不正確的分支預(yù)測(cè)的所述條件分支指令的分支沖刷標(biāo)簽來(lái)標(biāo)記其分 支路徑標(biāo)簽的指令的所述沖刷。
18、 如權(quán)利要求17所述的處理器,其中所述沖刷控制電路經(jīng)配置以基于對(duì)應(yīng)于 正確的分支預(yù)測(cè)的所述條件分支指令的所述分支沖刷標(biāo)簽來(lái)在所述指令管線中廣播清 除信號(hào),以藉此起始從所述指令管線中的指令的所述分支路徑標(biāo)簽中對(duì)對(duì)應(yīng)于所述分 支沖刷標(biāo)簽的任何指示符的所述清除。
19、 如權(quán)利要求18所述的處理器,其中所述沖刷控制電路經(jīng)配置以重新使用分 支沖刷標(biāo)簽,其中己針對(duì)所述分支沖刷標(biāo)簽來(lái)廣播沖刷或清除信號(hào)以標(biāo)記與正在進(jìn)行 的指令提取操作相關(guān)聯(lián)的新分支預(yù)測(cè)依賴程度。
20、 如權(quán)利要求16所述的處理器,其中所述沖刷控制電路經(jīng)配置以在檢測(cè)到已 經(jīng)解析或沖刷給定條件分支指令的分支條件后收回向所述給定條件分支指令所指派的 所述分支沖刷標(biāo)簽,且視需要重新使用所收回的分支沖刷標(biāo)簽供用于標(biāo)記新分支預(yù)測(cè) 依賴程度。
21、 如權(quán)利要求10所述的處理器,其中所述指令管線包括支持亂序程序執(zhí)行的 超標(biāo)量指令管線,且其中所述沖刷控制電路支持在構(gòu)成所述超標(biāo)量管線的多個(gè)并行執(zhí) 行階段中進(jìn)行標(biāo)記、檢測(cè)及沖刷。
22、 一種管理指令管線中的分支預(yù)測(cè)的方法,其包括 為指令管線中具有未確定的分支條件的分支指令維持現(xiàn)用分支沖刷標(biāo)簽; 用包含一個(gè)或多個(gè)對(duì)應(yīng)于所述現(xiàn)用分支沖刷標(biāo)簽的指示符的分支路徑標(biāo)簽來(lái)標(biāo)記提取到所述管線中的每個(gè)指令;通過(guò)確定所述分支指令的誤預(yù)測(cè)指令的相關(guān)聯(lián)分支條件來(lái)檢測(cè)所述分支指令的 誤預(yù)測(cè)指令;及沖刷所述指令管線中具有包含對(duì)應(yīng)于誤預(yù)測(cè)分支指令的所述現(xiàn)用分支沖刷標(biāo)簽 的指示符的分支路徑標(biāo)簽的指令。
全文摘要
在一個(gè)或多個(gè)實(shí)施例中,處理器包含一個(gè)或多個(gè)電路以響應(yīng)于檢測(cè)到分支誤預(yù)測(cè)而從指令管線中選擇性地沖刷指令,以便沖刷標(biāo)記為依賴于與分支誤預(yù)測(cè)相關(guān)聯(lián)的分支指令的指令。因此,所述一個(gè)或多個(gè)電路可經(jīng)配置以標(biāo)記提取到所述處理器的指令管線中的指令以指示其分支預(yù)測(cè)依賴程度,直接地或間接地檢測(cè)不正確的分支預(yù)測(cè),且直接地或間接地沖刷指令管線中標(biāo)記為依賴于不正確的分支預(yù)測(cè)的指令。
文檔編號(hào)G06F9/44GK101228507SQ200680027143
公開(kāi)日2008年7月23日 申請(qǐng)日期2006年6月2日 優(yōu)先權(quán)日2005年6月10日
發(fā)明者托馬斯·安德魯·薩托里烏斯, 詹姆斯·諾里斯·迪芬德?tīng)栙M(fèi)爾, 邁克爾·斯科特·麥基爾文 申請(qǐng)人:高通股份有限公司