亂序處理器中的分支目標(biāo)存儲(chǔ)與檢索的制作方法
【專利摘要】一種處理器,配置為方便用于控制轉(zhuǎn)移指令(CTI)的預(yù)測(cè)目標(biāo)的傳輸與存儲(chǔ)。在某些實(shí)施例中,處理器可以是多線程的并且支持用于多個(gè)線程的預(yù)測(cè)目標(biāo)的存儲(chǔ)。在有些實(shí)施例中,CTI分支目標(biāo)可以由處理器的一個(gè)元件存儲(chǔ)并且標(biāo)簽可以指示所存儲(chǔ)目標(biāo)的位置。標(biāo)簽可以與CTI關(guān)聯(lián),而不是把完整的目標(biāo)地址與CTI關(guān)聯(lián)。當(dāng)CTI到達(dá)處理器的執(zhí)行階段時(shí),標(biāo)簽可以用于檢索預(yù)測(cè)目標(biāo)地址。在利用標(biāo)簽檢索預(yù)測(cè)目標(biāo)的有些實(shí)施例中,來(lái)自不同處理器線程的CTI指令可以在不影響預(yù)測(cè)目標(biāo)檢索的情況下交錯(cuò)。
【專利說(shuō)明】亂序處理器中的分支目標(biāo)存儲(chǔ)與檢索
【技術(shù)領(lǐng)域】
[0001]本公開(kāi)內(nèi)容涉及處理器,并且更具體地說(shuō)涉及在多線程處理器中存儲(chǔ)和檢索(retrieve)分支目標(biāo)地址。
【背景技術(shù)】
[0002]現(xiàn)代超標(biāo)量微處理器通過(guò)并行并且不按程序次序地執(zhí)行多條指令獲得高性能。諸如在程序中非常普遍的分支、調(diào)用和返回之類(lèi)的控制轉(zhuǎn)移指令(CTI)會(huì)造成流水線式微處理器拖延(stall),因?yàn)橐诮o定控制轉(zhuǎn)移指令之后執(zhí)行的指令在執(zhí)行該控制轉(zhuǎn)移指令之前一直是未知的。這些拖延會(huì)導(dǎo)致顯著的性能損失。
[0003]現(xiàn)代微處理器采用分支預(yù)測(cè)技術(shù)來(lái)越過(guò)CTI推測(cè)性地提取(fetch)并執(zhí)行指令。分支預(yù)測(cè)涉及預(yù)測(cè)CTI的方向與目標(biāo)。如果由于方向預(yù)測(cè)或目標(biāo)預(yù)測(cè)不正確而使得CTI預(yù)測(cè)錯(cuò)誤,則越過(guò)CTI推測(cè)性提取出的所有指令都被扔掉(清洗),并且由指令提取單元(IFU)從正確的路徑提取新的指令。并且,一旦檢測(cè)到預(yù)測(cè)錯(cuò)誤的CTI,分支預(yù)測(cè)器一般就利用CTI的實(shí)際結(jié)果來(lái)更新,以確保其未來(lái)預(yù)測(cè)的準(zhǔn)確性。
[0004]現(xiàn)代微處理器通常實(shí)現(xiàn)芯片級(jí)的多線程(CMT),以提高性能。在CMT處理器中,多個(gè)軟件線程在處理器中同時(shí)處于活動(dòng)狀態(tài),并且每個(gè)活動(dòng)的線程都具有存儲(chǔ)其狀態(tài)的專用硬件資源。來(lái)自多個(gè)軟件線程的指令的有效執(zhí)行可能涉及預(yù)測(cè)來(lái)自不同線程的CTI的能力。多個(gè)線程在CMT處理器上的執(zhí)行可能造成來(lái)自不同線程的CMT的執(zhí)行交錯(cuò)。
【發(fā)明內(nèi)容】
[0005]本公開(kāi)內(nèi)容涉及配置為執(zhí)行控制轉(zhuǎn)移指令(CTI)的處理器。在有些實(shí)施例中,公開(kāi)了一種方便用于由處理器執(zhí)行的控制轉(zhuǎn)移指令的預(yù)測(cè)目標(biāo)的有效傳輸和存儲(chǔ)的機(jī)制。在某些實(shí)施例中,處理器可以是多線程的并且該機(jī)制可以支持對(duì)多個(gè)線程的預(yù)測(cè)目標(biāo)的存儲(chǔ)。
[0006]在有些實(shí)施例中,預(yù)測(cè)的CTI目標(biāo)地址可以由處理器的元件存儲(chǔ)并且標(biāo)簽可以指示所存儲(chǔ)的目標(biāo)地址的位置。標(biāo)簽可以與CTI關(guān)聯(lián),而不是把完整的目標(biāo)地址與CTI關(guān)聯(lián)。當(dāng)CTI到達(dá)執(zhí)行階段時(shí),該標(biāo)簽可以用于檢索預(yù)測(cè)目標(biāo)地址。在有些實(shí)施例中,來(lái)自不同處理器線程的CTI指令可以交錯(cuò)并且不同線程可以共享相同的存儲(chǔ)元件。
[0007]在一種示例性實(shí)施例中,分支目標(biāo)陣列(BTA)用于為CTI存儲(chǔ)預(yù)測(cè)目標(biāo)地址。在提取出CTI之后,分支預(yù)測(cè)單元為CTI預(yù)測(cè)目標(biāo)地址和方向。預(yù)測(cè)目標(biāo)地址存儲(chǔ)在BTA中,并且對(duì)應(yīng)于該目標(biāo)地址在BTA中的位置的標(biāo)簽與CTI關(guān)聯(lián)。標(biāo)簽連同CTI 一起通過(guò)執(zhí)行流水線的階段。當(dāng)CTI與標(biāo)簽到達(dá)分支執(zhí)行單元時(shí),分支執(zhí)行單元利用該標(biāo)簽從BTA檢索預(yù)測(cè)目標(biāo)地址。分支執(zhí)行單元還為CTI計(jì)算實(shí)際目標(biāo)地址,并且比較實(shí)際地址與預(yù)測(cè)的地址,以便解析分支目標(biāo)。在有些實(shí)施例中,BTA和標(biāo)簽可以是用于預(yù)測(cè)目標(biāo)的有效存儲(chǔ)與傳輸機(jī)制。在其它實(shí)施例中,其它元件可以執(zhí)行上述示例性實(shí)施例的一個(gè)或多個(gè)功能性。
【專利附圖】
【附圖說(shuō)明】[0008]圖1是多核處理器的一種實(shí)施例的框圖。
[0009]圖2是處理器內(nèi)核的一種實(shí)施例的框圖。
[0010]圖3是包括分支單元在內(nèi)的處理器內(nèi)核的更具體實(shí)施例的框圖。
[0011]圖4是分支目標(biāo)陣列和分支執(zhí)行單元的一種實(shí)施例的框圖。
[0012]圖5是說(shuō)明利用分支目標(biāo)陣列來(lái)存儲(chǔ)CTI預(yù)測(cè)目標(biāo)的一種實(shí)施例的流程圖。
[0013]圖6是說(shuō)明利用分支目標(biāo)陣列來(lái)存儲(chǔ)CTI預(yù)測(cè)目標(biāo)的更具體實(shí)施例的流程圖。
[0014]圖7是說(shuō)明示例性系統(tǒng)實(shí)施例的框圖。
具體實(shí)施例 [0015]本說(shuō)明書(shū)包括對(duì)“一種實(shí)施例”和“一個(gè)實(shí)施例”的引用。短語(yǔ)“在一種實(shí)施例中”或“在一個(gè)實(shí)施例中”的出現(xiàn)不一定指相同的實(shí)施例。特定的特征、結(jié)構(gòu)或特點(diǎn)可以按與本公開(kāi)內(nèi)容一致的任何合適方式組合。
[0016]術(shù)語(yǔ)。以下段落提供了對(duì)本公開(kāi)內(nèi)容(包括所附權(quán)利要求在內(nèi))中可以找到的術(shù)語(yǔ)的定義和/或上下文:
[0017]“包括”。這個(gè)術(shù)語(yǔ)是開(kāi)放式的。如在所附權(quán)利要求中所使用的,這個(gè)術(shù)語(yǔ)不排除附加的結(jié)構(gòu)或步驟??紤]陳述“一種包括一個(gè)或多個(gè)處理器單元的裝置……”的權(quán)利要求。這種權(quán)利要求不排除該裝置包括附加的組件(例如,網(wǎng)絡(luò)接口單元、圖形電路系統(tǒng),等等)。
[0018]“配置為”。各種單元、電路或其它組件可以描述或闡述成“配置為”執(zhí)行一個(gè)任務(wù)或多個(gè)任務(wù)。在這種上下文中,“配置為”用于通過(guò)指示這些單元/電路/組件包括在操作過(guò)程中執(zhí)行那些任務(wù)的結(jié)構(gòu)(例如,電路結(jié)構(gòu))來(lái)暗示結(jié)構(gòu)。照此,即使當(dāng)規(guī)定的單元/電路/組件當(dāng)前不可操作(例如,沒(méi)有開(kāi)啟)時(shí),這些單元/電路/組件也可以被說(shuō)成配置為執(zhí)行任務(wù)。與“配置為”語(yǔ)言一起使用的單元/電路/組件包括硬件——例如,存儲(chǔ)可以為了實(shí)現(xiàn)操作而執(zhí)行的程序指令的電路、存儲(chǔ)器,等等。陳述一個(gè)單元/電路/組件“配置為”執(zhí)行一個(gè)或多個(gè)任務(wù)是明確地玉要對(duì)那個(gè)單元/電路/組件引用美國(guó)法典第35章112條第6段。
[0019]“基于”。如本文所使用的,這個(gè)術(shù)語(yǔ)用于描述影響決定的一個(gè)或多個(gè)因素。這個(gè)術(shù)語(yǔ)不排除可能影響一個(gè)決定的附加因素。即,一個(gè)決定可以僅僅基于那些因素或者至少部分地基于那些因素??紤]短語(yǔ)“基于B確定A”。雖然B可能是影響A的決定的一個(gè)因素,但是這個(gè)短語(yǔ)不排除A的決定還基于C。在其它情況下,A可以僅僅基于B來(lái)確定。
[0020]“執(zhí)行”。這個(gè)術(shù)語(yǔ)具有其在本領(lǐng)域中普通和被接受的意義,并且包括可以由處理器為了實(shí)現(xiàn)指令的完成而執(zhí)行的所有動(dòng)作,包括提取、解碼、發(fā)布及實(shí)際計(jì)算指令的結(jié)果。當(dāng)一個(gè)功能單元在本文中被描述為“執(zhí)行”一條特定指令時(shí),這個(gè)術(shù)語(yǔ)指計(jì)算該特定指令的結(jié)果(例如,計(jì)算兩個(gè)寄存器的內(nèi)容之和)。類(lèi)似地,當(dāng)一條指令被描述為到達(dá)一個(gè)處理器流水線的“執(zhí)行階段”時(shí),這個(gè)術(shù)語(yǔ)指該指令到達(dá)用于計(jì)算該特定指令的結(jié)果的功能單元。
[0021]“線程”。這個(gè)術(shù)語(yǔ)具有其在本領(lǐng)域中普通和被接受的意義,并且包括程序中可以由處理器執(zhí)行的指令集合。例如,術(shù)語(yǔ)“線程”可以指作為“派生(fork)”或其它類(lèi)似操作的結(jié)果在處理器上執(zhí)行的一組指令。本文中描述為“處于”線程“中”的指令是用于一個(gè)線程的指令集合的一部分。
[0022]“并發(fā)存儲(chǔ)/同時(shí)存儲(chǔ)”。如本文所使用的,這些短語(yǔ)指存儲(chǔ)項(xiàng)目(例如,用于不同線程的分支目標(biāo)信息)某個(gè)重疊的周期。應(yīng)當(dāng)指出,這些術(shù)語(yǔ)不一定暗示兩個(gè)并發(fā)存儲(chǔ)的項(xiàng)目的存儲(chǔ)同時(shí)開(kāi)始或者兩個(gè)項(xiàng)目被存儲(chǔ)相同的時(shí)間長(zhǎng)度。
[0023]介紹
[0024]本公開(kāi)內(nèi)容描述了涉及方便控制轉(zhuǎn)移指令的處理的電路系統(tǒng)的各種實(shí)施例。圖1和2給出了其中可以包括這種電路系統(tǒng)的示例性多線程處理器的概述。圖3和4給出了用于分支目標(biāo)存儲(chǔ)的處理器元件的示例性實(shí)施例。圖5和6給出了用于分支目標(biāo)存儲(chǔ)的示例性方法。圖7給出了其中可以使用這種處理器的計(jì)算機(jī)系統(tǒng)的概述。
[0025]處理器概沭
[0026]現(xiàn)在轉(zhuǎn)向圖1,示出了說(shuō)明處理器10的一種實(shí)施例的框圖。在某些實(shí)施例中,處理器10可以是多線程的。在所說(shuō)明的實(shí)施例中,處理器10包括多個(gè)處理器內(nèi)核100a-n,這些處理器內(nèi)核也被指定為“內(nèi)核0”至“內(nèi)核n”。如本文所使用的,術(shù)語(yǔ)處理器可以指具有單個(gè)處理器內(nèi)核的裝置或者包括兩個(gè)或多個(gè)處理器內(nèi)核的裝置。處理器10的各種實(shí)施例可以包括變化數(shù)量的內(nèi)核100,例如8個(gè)、16個(gè)或者任何其它合適的數(shù)量。每個(gè)內(nèi)核100都耦合到對(duì)應(yīng)的L2高速緩存105a-n,L2高速緩存105a_n又經(jīng)交叉開(kāi)關(guān)110耦合到L3高速緩存120。內(nèi)核100a-n和L2高速緩存105a_n可以總起來(lái)或者單獨(dú)地分別一般性地被稱為內(nèi)核100和L2高速緩存105。
[0027]經(jīng)交叉開(kāi)關(guān)110和L3高速緩存120,內(nèi)核100可以耦合到可以位于處理器10外面的各種設(shè)備。在所說(shuō)明的實(shí)施例中,一個(gè)或多個(gè)存儲(chǔ)器接口 130可以配置為耦合到一排或多排系統(tǒng)存儲(chǔ)器(未示出)。一個(gè)或多個(gè)一致性處理器接口 140可以配置為把處理器10耦合到其它處理器(例如,在采用處理器10的多個(gè)單元的多處理器環(huán)境中)。此外,系統(tǒng)互連125把內(nèi)核100耦合到一個(gè)或多個(gè)外圍設(shè)備接口 150和網(wǎng)絡(luò)接口 160。如以下更具體描述的,這些接口可以配置為把處理器10耦合到各種外圍設(shè)備和網(wǎng)絡(luò)。
[0028]內(nèi)核100可以配置為執(zhí)行指令并根據(jù)特定的指令集體系架構(gòu)(ISA)處理數(shù)據(jù)。例如,在一種實(shí)施例中,內(nèi)核100可以配置為實(shí)現(xiàn)SPARC? ISA的一個(gè)版本,諸如SPARC? V9、UltraSPARC 體系架構(gòu) 2005、UltraSPARC 體系架構(gòu) 2007 或者 UltraSPARC體系架構(gòu)2009。但是,例如,在其它實(shí)施例中,預(yù)期可以采用任何期望的ISA,諸如x86 (32位或64位版本)、PowerPC?或MIPS?。
[0029]在所說(shuō)明的實(shí)施例中,每個(gè)內(nèi)核100都可以配置為與其它內(nèi)核獨(dú)立地操作,使得所有內(nèi)核100都可以并行地(S卩,并發(fā)地)操作。此外,如以下結(jié)合圖2的描述所描述的,在有些實(shí)施例中,每個(gè)內(nèi)核100都可以配置為并發(fā)地執(zhí)行多個(gè)線程,其中給定線程可以包括可以與來(lái)自另一個(gè)線程的指令獨(dú)立地執(zhí)行的指令集合。(例如,一個(gè)個(gè)別軟件過(guò)程,諸如應(yīng)用,可以包括一個(gè)或多個(gè)線程,這些線程可以被調(diào)度,以便讓操作系統(tǒng)執(zhí)行。)這種內(nèi)核100也可以被稱為多線程(MT)內(nèi)核。在一種實(shí)施例中,每個(gè)內(nèi)核100可以配置為并發(fā)地執(zhí)行來(lái)自可變數(shù)量線程,至多八個(gè)并發(fā)執(zhí)行的線程,的指令。在16內(nèi)核的實(shí)現(xiàn)中,處理器10因此可以并發(fā)地執(zhí)行至多128個(gè)線程。但是,在其它實(shí)施例中,預(yù)期可以提供其它數(shù)量的內(nèi)核100,并且內(nèi)核100可以并發(fā)地處理不同數(shù)量的線程。
[0030]此外,如以下更具體描述的,在有些實(shí)施例中,每個(gè)內(nèi)核100可以配置為不按程序次序執(zhí)行某些指令,在本文中這也被稱為亂序(out-of-order)執(zhí)行,或者簡(jiǎn)單地說(shuō)是000。作為亂序執(zhí)行的一個(gè)例子,對(duì)于一個(gè)特定的線程,可能存在按程序次序在一條給定指令后面但是不依賴于該給定指令的指令。如果給定指令的執(zhí)行由于某種原因(例如,由于高速緩存未命中)而延遲,則后面的指令可以在該給定指令完成之前執(zhí)行,這可以提高執(zhí)行的線程的整體性能。
[0031]如圖1中所不,在一種實(shí)施例中,每個(gè)內(nèi)核100可以具有專用的對(duì)應(yīng)L2聞速緩存105。在一種實(shí)施例中,L2高速緩存105可以配置為作為完全包括一級(jí)高速緩存狀態(tài)的組相聯(lián)、回寫(xiě)式高速緩存(例如,內(nèi)核100中的指令和數(shù)據(jù)高速緩存)。為了維護(hù)與一級(jí)高速緩存的一致性,L2高速緩存105的實(shí)施例可以實(shí)現(xiàn)維護(hù)一級(jí)高速緩存標(biāo)簽的虛擬拷貝的反向目錄。L2高速緩存105可以實(shí)現(xiàn)一致性協(xié)議(例如,MESI協(xié)議),以便維持與處理器10中其它高速緩存的一致性。在一種實(shí)施例中,L2高速緩存105可以強(qiáng)制實(shí)施執(zhí)行的總存儲(chǔ)排序(TSO)模型,其中來(lái)自相同線程的所有存儲(chǔ)指令都必須按程序次序完成。
[0032]在各種實(shí)施例中,L2高速緩存105可以包括配置為支持高速緩存功能性與性能的各種結(jié)構(gòu)。例如,L2高速緩存105可以包括配置為存儲(chǔ)未命中L2的請(qǐng)求的未命中緩沖區(qū)、配置為臨時(shí)存儲(chǔ)從L3高速緩存120返回的數(shù)據(jù)的填充緩沖區(qū)、配置為臨時(shí)存儲(chǔ)臟的被驅(qū)逐數(shù)據(jù)并探聽(tīng)回拷數(shù)據(jù)的回寫(xiě)緩沖區(qū),和/或配置為存儲(chǔ)從L3高速緩存120接收到的探聽(tīng)請(qǐng)求的探聽(tīng)緩沖區(qū)。在一種實(shí)施例中,L2高速緩存105可以實(shí)現(xiàn)基于歷史的預(yù)提取器,它可以嘗試分析L2未命中行為并且對(duì)應(yīng)地生成對(duì)L3高速緩存120的預(yù)提取請(qǐng)求。
[0033]交叉開(kāi)關(guān)110可以配置為管理L2高速緩存105和共享的L3高速緩存120之間的數(shù)據(jù)流。在一種實(shí)施例中,交叉開(kāi)關(guān)110可以包括允許任何L2高速緩存105訪問(wèn)L3高速緩存120的任何排(bank)并且反過(guò)來(lái)允許數(shù)據(jù)從任何L3排返回到任何L2高速緩存105的邏輯(例如,諸如多路復(fù)用器或開(kāi)關(guān)架構(gòu))。S卩,交叉開(kāi)關(guān)110可以配置為作為允許一般化的點(diǎn)到點(diǎn)通信的M到N交叉開(kāi)關(guān)。但是,在其它實(shí)施例中,在L2高速緩存105與L3高速緩存120之間可以采用其它互連方案。例如,可以利用網(wǎng)格、環(huán)或者其它合適的拓?fù)浣Y(jié)構(gòu)。
[0034]交叉開(kāi)關(guān)110可以配置為并發(fā)地處理從L2高速緩存105到L3高速緩存120的數(shù)據(jù)請(qǐng)求及從L3高速緩存120到L2高速緩存105的數(shù)據(jù)響應(yīng)。在有些實(shí)施例中,交叉開(kāi)關(guān)110可以包括給數(shù)據(jù)請(qǐng)求和/或響應(yīng)排隊(duì)的邏輯,使得請(qǐng)求和響應(yīng)可能不會(huì)在等待服務(wù)的同時(shí)阻塞其它活動(dòng)。此外,在一種實(shí)施例中,交叉開(kāi)關(guān)110可以配置為仲裁在多個(gè)L2高速緩存105嘗試訪問(wèn)L3高速緩存120的單排或者反過(guò)來(lái)的時(shí)候可能發(fā)生的沖突。
[0035]L3高速緩存120可以配置為高速緩存供內(nèi)核100使用的指令和數(shù)據(jù)。在所說(shuō)明的實(shí)施例中,L3高速緩存120可以組織成八個(gè)可單獨(dú)尋址的排,每排都可以被單獨(dú)訪問(wèn),使得,在沒(méi)有沖突的情況下,每排可以并發(fā)地把數(shù)據(jù)返回到對(duì)應(yīng)的L2高速緩存105。在有些實(shí)施例中,每個(gè)個(gè)別排可以利用組相聯(lián)或直接映射技術(shù)實(shí)現(xiàn)。例如,在一種實(shí)施例中,L3高速緩存120可以是8兆字節(jié)(MB)高速緩存,其中每個(gè)IMB的排是具有64字節(jié)行尺寸的16路組相聯(lián)。在有些實(shí)施例中,L3高速緩存120可以實(shí)現(xiàn)為回寫(xiě)式高速緩存,其中寫(xiě)過(guò)的(臟)數(shù)據(jù)在對(duì)應(yīng)的高速緩存行被驅(qū)逐之前可能不能寫(xiě)到系統(tǒng)存儲(chǔ)器。但是,在其它實(shí)施例中,預(yù)期L3高速緩存120可以按任何合適的方式配置。例如,L3高速緩存120可以利用更多或更少的排實(shí)現(xiàn),或者以不采用可獨(dú)立訪問(wèn)的排的方案;它可以采用其它排尺寸或者高速緩存幾何結(jié)構(gòu)(例如,不同的行尺寸或者組相聯(lián)程度);它可以采用直寫(xiě)來(lái)代替回寫(xiě)行為;并且它可以或者可以不對(duì)寫(xiě)未命中進(jìn)行分配。L3高速緩存120配置的其它變體是有可能的和預(yù)期的。
[0036]在有些實(shí)施例中,L3高速緩存120可以實(shí)現(xiàn)用于從交叉開(kāi)關(guān)110到達(dá)的請(qǐng)求和要發(fā)送到其的結(jié)果的隊(duì)列。此外,在有些實(shí)施例中,L3高速緩存120可以實(shí)現(xiàn)配置為存儲(chǔ)從存儲(chǔ)器接口 130到達(dá)的填充數(shù)據(jù)的填充緩沖區(qū)、配置為存儲(chǔ)要寫(xiě)到存儲(chǔ)器的臟的被驅(qū)逐數(shù)據(jù)的回寫(xiě)緩沖區(qū),和/或配置為存儲(chǔ)不能作為單個(gè)高速緩沖命中來(lái)處理的L3高速緩存訪問(wèn)(例如,L3高速緩存未命中、匹配較老未命中的高速緩存訪問(wèn)、諸如可能需要多次高速緩存訪問(wèn)的原子操作的訪問(wèn),等等)的未命中緩沖區(qū)。L3高速緩存120可以不同地實(shí)現(xiàn)為單端口或多端口(即,能夠處理多個(gè)并發(fā)的讀和/或?qū)懺L問(wèn))。在任一情況下,L3高速緩存120都可以實(shí)現(xiàn)在各個(gè)高速緩存讀和寫(xiě)請(qǐng)求當(dāng)中優(yōu)先化高數(shù)緩存訪問(wèn)的仲裁邏輯。
[0037]不是來(lái)自內(nèi)核100的所有外部訪問(wèn)都有必要通過(guò)L3高速緩存120。在所說(shuō)明的實(shí)施例中,不可高速緩存單元(NCU)122可以配置為處理來(lái)自內(nèi)核100的對(duì)不可高速緩存數(shù)據(jù)的請(qǐng)求,不可高速緩存數(shù)據(jù)諸如是以下關(guān)于外圍設(shè)備接口 150和網(wǎng)絡(luò)接口 160所描述的來(lái)自I/O設(shè)備的數(shù)據(jù)。
[0038]存儲(chǔ)器接口 130可以配置為,例如響應(yīng)高速緩存填充請(qǐng)求與數(shù)據(jù)驅(qū)逐,管理L3高速緩存120與系統(tǒng)存儲(chǔ)器之間的數(shù)據(jù)轉(zhuǎn)移。在有些實(shí)施例中,可以實(shí)現(xiàn)存儲(chǔ)器接口 130的多個(gè)實(shí)例,每個(gè)實(shí)例配置為控制系統(tǒng)存儲(chǔ)器的對(duì)應(yīng)排。例如,存儲(chǔ)器接口 130可以配置為接口到任何合適類(lèi)型的系統(tǒng)存儲(chǔ)器,諸如全緩沖雙列直插內(nèi)存模塊(FB-DIMM)、雙數(shù)據(jù)率或雙數(shù)據(jù)率2、3或4同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DDR/DDR2/DDR3/DDR4SDRAM)或者Rambus?
DRAM (RDRAM?)。在有些實(shí)施例中,存儲(chǔ)器接口 130可以配置為支持到多個(gè)不同類(lèi)型的系統(tǒng)存儲(chǔ)器的接口。
[0039]在所說(shuō)明的實(shí)施例中,處理器10還可以配置為從除系統(tǒng)存儲(chǔ)器之外的其它源接收數(shù)據(jù)。系統(tǒng)互連125可以配置為為這種源提供與內(nèi)核100、L2高速緩存105和/或L3高速緩存120交換數(shù)據(jù)的中心接口。在有些實(shí)施例中,系統(tǒng)互連125可以配置為協(xié)調(diào)數(shù)據(jù)到系統(tǒng)存儲(chǔ)器和數(shù)據(jù)從系統(tǒng)存儲(chǔ)器的直接存儲(chǔ)器訪問(wèn)(DMA)傳輸。例如,經(jīng)存儲(chǔ)器接口 130,系統(tǒng)互連125可以協(xié)調(diào)系統(tǒng)存儲(chǔ)器與經(jīng)網(wǎng)絡(luò)接口 160附連的網(wǎng)絡(luò)設(shè)備之間或者系統(tǒng)存儲(chǔ)器與經(jīng)外圍接口 150附連的外圍設(shè)備之間的DMA傳輸。
[0040]處理器10可以配置為在具有處理器10的其它實(shí)例或者其它兼容處理器的多處理器環(huán)境中使用。在所說(shuō)明的實(shí)施例中,以保留各個(gè)處理器之間存儲(chǔ)器一致性的方式(例如,根據(jù)掌管存儲(chǔ)器事務(wù)的一致性協(xié)議),一致性處理器接口 140可以配置為實(shí)現(xiàn)不同處理器之間高帶寬、直接芯片到芯片的通信。
[0041]外圍設(shè)備接口 150可以配置為協(xié)調(diào)處理器10與一個(gè)或多個(gè)外圍設(shè)備之間的數(shù)據(jù)傳輸。例如但不作為限制,這種外圍設(shè)備可以包括存儲(chǔ)設(shè)備(例如,基于磁或光介質(zhì)的存儲(chǔ)設(shè)備,包括硬驅(qū)、帶驅(qū)動(dòng)器、CD驅(qū)動(dòng)器、DVD驅(qū)動(dòng)器等)、顯示設(shè)備(例如,圖形子系統(tǒng))、多媒體設(shè)備(例如,音頻處理子系統(tǒng))或者任何其它合適類(lèi)型的外圍設(shè)備。在一種實(shí)施例中,外圍設(shè)備接口 150可以實(shí)現(xiàn)標(biāo)準(zhǔn)外圍設(shè)備接口的一個(gè)或多個(gè)實(shí)例。例如,利用任何合適數(shù)量的I/0道,外圍設(shè)備接口 150的一個(gè)實(shí)施例可以實(shí)現(xiàn)根據(jù)l.x、2.0、3.0代的快速外圍組件接口(PCI Express?或者PCIe)標(biāo)準(zhǔn)或者那個(gè)標(biāo)準(zhǔn)的其它合適變體。但是,預(yù)期任何合適的接口標(biāo)準(zhǔn)或標(biāo)準(zhǔn)組合都可以采用。例如,在有些實(shí)施例中,除PCI Express?之外或者代替之,外圍設(shè)備接口 150可以配置為實(shí)現(xiàn)通用串行總線(USB)協(xié)議或IEEE1394 ( Firewire? )協(xié)議的一個(gè)版本。
[0042]網(wǎng)絡(luò)接口 160可以配置為協(xié)調(diào)處理器10與經(jīng)網(wǎng)絡(luò)耦合到處理器10的一個(gè)或多個(gè)網(wǎng)絡(luò)設(shè)備(例如,聯(lián)網(wǎng)的計(jì)算機(jī)系統(tǒng)或外圍設(shè)備)之間的數(shù)據(jù)傳輸。在一個(gè)實(shí)施例中,網(wǎng)絡(luò)接口 160可以配置為執(zhí)行實(shí)現(xiàn)以太網(wǎng)(IEEE802.3)聯(lián)網(wǎng)標(biāo)準(zhǔn),諸如像千兆字節(jié)以太網(wǎng)或10千兆字節(jié)以太網(wǎng),所必需的數(shù)據(jù)處理。但是,預(yù)期任何合適的聯(lián)網(wǎng)標(biāo)準(zhǔn)都可以實(shí)現(xiàn),包括諸如即將出現(xiàn)的40千兆以太網(wǎng)和100千兆以太網(wǎng)標(biāo)準(zhǔn)。在有些實(shí)施例中,網(wǎng)絡(luò)接口 160可以配置為實(shí)現(xiàn)其它類(lèi)型的聯(lián)網(wǎng)協(xié)議,諸如光纖通道、經(jīng)以太網(wǎng)的光纖通道(FCoE)、數(shù)據(jù)中心以太網(wǎng)、Infiniband和/或其它合適的聯(lián)網(wǎng)協(xié)議。在有些實(shí)施例中,網(wǎng)絡(luò)接口 160可以配置為實(shí)現(xiàn)多個(gè)離散的網(wǎng)絡(luò)接口端口。
[0043]動(dòng)態(tài)多線程處理器內(nèi)核的概述
[0044]如以上所提到的,在一種實(shí)施例中,每個(gè)內(nèi)核100可以配置為用于多線程的亂序執(zhí)行。更具體地說(shuō),在一種實(shí)施例中,每個(gè)內(nèi)核100可以配置為執(zhí)行動(dòng)態(tài)多線程??偟膩?lái)說(shuō),在動(dòng)態(tài)多線程下,內(nèi)核100的執(zhí)行資源可以配置為有效地處理呈現(xiàn)不同性能特點(diǎn)與資源需求的變化類(lèi)型的計(jì)算工作負(fù)載。這種工作負(fù)載可能跨強(qiáng)調(diào)個(gè)別線程與多線程性能的不同組合的一個(gè)連續(xù)區(qū)域而變化。
[0045]在這個(gè)連續(xù)區(qū)域的一端,計(jì)算工作負(fù)載可以包括多個(gè)獨(dú)立的任務(wù),其中在某個(gè)性能標(biāo)準(zhǔn)內(nèi)完成總的任務(wù)集合(例如,每秒鐘的任務(wù)總數(shù))是系統(tǒng)性能中比任何特定任務(wù)完成的速率更顯著的一個(gè)因素。例如,在某些類(lèi)型的服務(wù)器或事務(wù)處理環(huán)境中,可以有大量個(gè)別的客戶端或消費(fèi)者請(qǐng)求(諸如web頁(yè)面請(qǐng)求或文件系統(tǒng)訪問(wèn))。在這種上下文中,個(gè)別請(qǐng)求對(duì)于處理器性能可能不是特別敏感。例如,請(qǐng)求可以是I/O綁定而不是處理器綁定的-個(gè)別請(qǐng)求的完成可能需要(例如,對(duì)相對(duì)慢的存儲(chǔ)器、網(wǎng)絡(luò)或存儲(chǔ)設(shè)備的)I/O訪問(wèn),相對(duì)于所涉及的處理器工作,這種訪問(wèn)支配完成請(qǐng)求所需的總時(shí)間。因而,能夠并發(fā)地處理許多這種任務(wù)的處理器(例如,就像獨(dú)立地執(zhí)行線程一樣)可能對(duì)這種工作負(fù)載呈現(xiàn)出比只強(qiáng)調(diào)一個(gè)或少量并發(fā)任務(wù)的性能的處理器更好的性能。
[0046]在這個(gè)連續(xù)區(qū)域的另一端,計(jì)算工作負(fù)載可以包括其性能高度處理器敏感的個(gè)別任務(wù)。例如,涉及顯著數(shù)學(xué)分析和/或轉(zhuǎn)換(例如,加密、圖形處理、科學(xué)計(jì)算)的任務(wù)會(huì)比I/O綁定更處理器綁定。這種任務(wù)可能會(huì)得益于強(qiáng)調(diào)單任務(wù)性能的處理器,例如通過(guò)指令級(jí)并行化的推測(cè)執(zhí)行和開(kāi)發(fā)。
[0047]動(dòng)態(tài)多線程代表以靈活地適應(yīng)沿上述連續(xù)區(qū)域變化的工作負(fù)載的方式分配處理器資源的嘗試。在一種實(shí)施例中,內(nèi)核100可以配置為實(shí)現(xiàn)細(xì)粒度的多線程,其中每個(gè)內(nèi)核可以從對(duì)應(yīng)于多個(gè)線程的指令池中選擇要執(zhí)行的指令,使得來(lái)自不同線程的指令可以被調(diào)度成相鄰地執(zhí)行。例如,在采用細(xì)粒度多線程的內(nèi)核100的流水線實(shí)施例中,來(lái)自不同線程的指令可以占用相鄰的流水線階段,使得來(lái)自幾個(gè)線程的指令在一個(gè)給定的內(nèi)核處理循環(huán)中可能處于不同執(zhí)行階段中。通過(guò)細(xì)粒度多線程的使用,內(nèi)核100可以配置為有效地處理依賴并發(fā)線程處理比個(gè)別線程性能更多的工作負(fù)載。
[0048]在一種實(shí)施例中,內(nèi)核100還可以配置為實(shí)現(xiàn)亂序處理、推測(cè)執(zhí)行、寄存器重命名和/或提高依賴處理器的工作負(fù)載的性能的其它特征。并且,內(nèi)核100可以配置為在給定時(shí)間活動(dòng)地執(zhí)行的線程當(dāng)中動(dòng)態(tài)地分配各種硬件資源,使得,如果較少的線程在執(zhí)行,則每個(gè)個(gè)別線程可能能夠利用更大份額的可用硬件資源。這可能導(dǎo)致在較少線程在執(zhí)行的時(shí)候提高的個(gè)別線程性能,同時(shí)保留支持呈現(xiàn)在其性能中更少依賴處理器的更大量線程的工作負(fù)載的靈活性。在各種實(shí)施例中,可以在變化數(shù)量的線程當(dāng)中動(dòng)態(tài)分配的給定內(nèi)核100的資源可以包括分支資源(例如,分支預(yù)測(cè)器結(jié)構(gòu))、負(fù)載/存儲(chǔ)資源(例如,負(fù)載/存儲(chǔ)緩沖區(qū)和隊(duì)列)、指令完成資源(例如,重新排序緩沖區(qū)結(jié)構(gòu)與提交邏輯)、指令發(fā)布資源(例如,指令選擇和調(diào)度結(jié)構(gòu))、寄存器重命名資源(例如,寄存器映射表)和/或存儲(chǔ)器管理單元資源(例如,轉(zhuǎn)譯后備緩沖區(qū)、頁(yè)面移動(dòng)(page walk)資源)。
[0049]配置為執(zhí)行動(dòng)態(tài)多線程的內(nèi)核100的一種實(shí)施例在圖2中說(shuō)明。在所說(shuō)明的實(shí)施例中,內(nèi)核100包括指令提取單元(IFU)200,該IFU200包括指令高速緩存205。IFU200耦合到存儲(chǔ)器管理單元(MMU) 270、L2接口 265和陷阱邏輯單元(TLU) 275。IFU200附加地耦合到以選擇單元210開(kāi)始并且又繼續(xù)通過(guò)解碼單元215、重命名單元220、揀取單元225和發(fā)布單元230的指令處理流水線。發(fā)布單元230耦合成向多個(gè)指令執(zhí)行資源中任意一個(gè)發(fā)布指令,這些指令執(zhí)行資源是:執(zhí)行單元0 (EXUO)235、執(zhí)行單元I (EXU1)240、包括數(shù)據(jù)高速緩存250的負(fù)載存儲(chǔ)單元(LSU)245,和/或浮點(diǎn)/圖形單元(FGU)255。這些指令執(zhí)行資源耦合到工作寄存器文件260。此外,LSU245耦合到L2接口 265和MMU270。
[0050]在以下討論中,描述了所說(shuō)明的內(nèi)核100實(shí)施例的每個(gè)結(jié)構(gòu)的示例性實(shí)施例。但是,應(yīng)當(dāng)指出,所說(shuō)明的資源分區(qū)僅僅是內(nèi)核100可以如何實(shí)現(xiàn)的一個(gè)例子。備用配置和變體是可能的和預(yù)期的。
[0051]指令提取單元200可以配置為向內(nèi)核100的剩余部分提供要執(zhí)行的指令。在一種實(shí)施例中,IFU200可以配置為選擇要提取的線程、從指令高速緩存205為選定的線程提取指令并且為了下游處理而緩沖它們、響應(yīng)于指令高速緩存未命中而從L2高速緩存105請(qǐng)求數(shù)據(jù)并且預(yù)測(cè)控制轉(zhuǎn)移指令的方向與目標(biāo)(例如,分支)。在有些實(shí)施例中,除了指令高速緩存205,IFU200還可以包括多個(gè)數(shù)據(jù)結(jié)構(gòu),諸如指令轉(zhuǎn)譯后備緩沖區(qū)(ITLB)、指令緩沖區(qū)和/或配置為存儲(chǔ)與線程選擇和處理相關(guān)的狀態(tài)的結(jié)構(gòu)。
[0052]在一種實(shí)施例中,在內(nèi)核100的每個(gè)執(zhí)行循環(huán)期間,IFU200可以配置為選擇一個(gè)將進(jìn)入IFU處理流水線的線程。線程選擇可以考慮各種因素與條件,一些特定于線程而其它的特定于IFU。例如,某些指令高速緩存活動(dòng)(例如,高速緩存填充)、ITLB活動(dòng)或者診斷活動(dòng)可能會(huì)抑制線程選擇,如果這些活動(dòng)在給定執(zhí)行循環(huán)期間發(fā)生的話。此外,個(gè)別線程可能處于影響其選擇資格的具體準(zhǔn)備就緒狀態(tài)。例如,對(duì)其存在未完成的指令高速緩存未命中的線程在該未命中被解決之前可能沒(méi)有資格供選擇。在有些實(shí)施例中,有資格參與線程選擇的那些線程可以通過(guò)優(yōu)先級(jí)分成組,例如依賴于線程的狀態(tài)或者IFU流水線處理線程的能力。在這種實(shí)施例中,多級(jí)仲裁可以被用來(lái)執(zhí)行線程選擇:選擇首先通過(guò)組優(yōu)先級(jí),然后在選定的組中根據(jù)合適的仲裁算法(例如,最近最少提取算法)發(fā)生。但是,應(yīng)當(dāng)指出,用于線程選擇的任何合適方案都可以采用,包括比這里提到的那些更復(fù)雜或更簡(jiǎn)單的仲裁方案。
[0053]一旦線程已經(jīng)被IFU200選擇用于提取,就可以為選定的線程實(shí)際提取指令。為了執(zhí)行提取,在一種實(shí)施例中,IFU200可以配置為生成要提供給指令高速緩存205的提取指令。在各種實(shí)施例中,提取地址可以根據(jù)與選定線程關(guān)聯(lián)的程序計(jì)數(shù)器、預(yù)測(cè)分支目標(biāo)地址或者以某種其它方式(例如,通過(guò)測(cè)試或診斷模式)提供的地址生成。然后,所生成的提取地址可以應(yīng)用到指令高速緩存205,以便確定是否存在高速緩存命中。
[0054]在有些實(shí)施例中,訪問(wèn)指令高速緩存205可以包括執(zhí)行提取地址翻譯(例如,在物理加索引和/或加標(biāo)簽的高速緩存的情況下)、訪問(wèn)高速緩存標(biāo)簽陣列并且比較檢索出的高速緩存標(biāo)簽與所請(qǐng)求的標(biāo)簽,以確定高速緩存命中狀態(tài)。如果存在高速緩存命中,則IFU200可以在緩沖區(qū)中存儲(chǔ)檢索出的指令,讓指令流水線的隨后階段使用。如果存在高速緩存未命中,則IFU200可以協(xié)調(diào)從L2高速緩存105對(duì)未命中的高速緩存數(shù)據(jù)的檢索。在有些實(shí)施例中,IFU200還可以配置為在實(shí)際需要提取指令之前把指令預(yù)先提取到指令高速緩存205中。例如,假定跟在后面的地址有可能在不久的將來(lái)要提取,在高速緩存未命中的情況下,IFU200可以配置為針對(duì)所請(qǐng)求的提取地址及順序跟在該所請(qǐng)求的提取地址之后的地址檢索未命中的數(shù)據(jù)。
[0055]在許多ISA中,指令執(zhí)行根據(jù)指令地址順序前進(jìn)(例如,如由一個(gè)或多個(gè)程序計(jì)數(shù)器所反映的)。但是,諸如分支、調(diào)用/返回或其它類(lèi)型指令的控制轉(zhuǎn)移指令(CTI)可能造成執(zhí)行從當(dāng)前提取地址轉(zhuǎn)移到一個(gè)非順序的地址。如以上所提到的,IFU200可以配置為預(yù)測(cè)CTI (或者,在有些實(shí)施例中,為ISA定義的CTI的一個(gè)子集)的方向與目標(biāo),以便減少由于一直等到確切知道CTI的效果所造成的延遲。雖然任何合適類(lèi)型的分支預(yù)測(cè)器都可以采用,但是,在一種實(shí)施例中,IFU200可以配置為實(shí)現(xiàn)基于感知器的動(dòng)態(tài)分支預(yù)測(cè)器。
[0056]為了實(shí)現(xiàn)分支預(yù)測(cè),在各種實(shí)施例中,IFU200可以實(shí)現(xiàn)多種控制和數(shù)據(jù)結(jié)構(gòu),諸如跟蹤先前分支歷史的歷史寄存器、反映預(yù)測(cè)的相對(duì)權(quán)重或強(qiáng)度的權(quán)重表和/或存儲(chǔ)預(yù)測(cè)要成為CTI目標(biāo)的提取地址的目標(biāo)數(shù)據(jù)結(jié)構(gòu)。并且,在有些實(shí)施例中,IFU200可以進(jìn)一步配置為部分解碼(或者預(yù)先解碼)所提取出的指令,以方便分支預(yù)測(cè)。當(dāng)給定線程被IFU200選擇用于提取時(shí),為該給定線程預(yù)測(cè)的提取地址可以用作提取地址。當(dāng)CTI實(shí)際執(zhí)行的時(shí)候(例如,如果CTI是條件指令,或者如果CTI本身在另一個(gè)預(yù)測(cè)CTI的路徑中),預(yù)測(cè)的結(jié)果可以得到驗(yàn)證。如果預(yù)測(cè)不正確,則沿著被提取和發(fā)布的預(yù)測(cè)路徑的指令可以被取消。
[0057]通過(guò)以上討論的操作,IFU200可以配置為從一個(gè)或多個(gè)線程提取并維護(hù)緩沖的指令池,以便饋送到指令流水線的剩余部分中來(lái)執(zhí)行??偟膩?lái)說(shuō),選擇單元210可以配置為選擇并調(diào)度線程來(lái)執(zhí)行。雖然在其它實(shí)施例中可以選擇不同數(shù)量的線程和指令,但是,在一種實(shí)施例中,在內(nèi)核100的任何給定執(zhí)行循環(huán)期間,選擇單元210可以配置為從內(nèi)核100并發(fā)支持的最大數(shù)量線程(例如,8個(gè)線程)中選擇至多一個(gè)準(zhǔn)備就緒的線程,并且可以從選定的線程中選擇至多兩條指令由解碼單元215解碼。在各種實(shí)施例中,不同的條件可能會(huì)影響一個(gè)線程是否準(zhǔn)備好被選擇單元210選擇,諸如分支預(yù)測(cè)失誤、不可用的指令或者其它條件。為了確保線程選擇中的公平性,選擇單元210的有些實(shí)施例可以在準(zhǔn)備就緒的線程當(dāng)中采用仲裁(例如,最近最少使用算法)。
[0058]被選擇單元210選擇進(jìn)行解碼的特定指令可以接受解碼單元215的解碼約束;因而,在任何給定的循環(huán)中,可以選擇比最大可能的指令數(shù)少的指令。此外,在有些實(shí)施例中,選擇單元210可以配置為把內(nèi)核100的某些執(zhí)行資源分配給選定的指令,使得所分配的資源在其被釋放之前將不再用于另一條指令。例如,選擇單元210可以為重新排序緩沖區(qū)、負(fù)載/存儲(chǔ)緩沖區(qū)或者可以在指令執(zhí)行過(guò)程中被利用的其它下游資源的條目分配資源標(biāo)簽。
[0059]總的來(lái)說(shuō),解碼單元215可以配置為準(zhǔn)備由選擇單元210選擇用于進(jìn)一步處理的指令。解碼單元215可以配置為識(shí)別指令的(例如,如由其操作碼所規(guī)定的)特定本質(zhì)并且,如果有的話,確定在指令中編碼的源和接收(即,目的地)寄存器。在有些實(shí)施例中,解碼單元215可以配置為檢測(cè)指令之間的某些依賴性、把體系架構(gòu)寄存器重新映射到扁平寄存器空間和/或把某些復(fù)雜指令轉(zhuǎn)換成兩條或更多條較簡(jiǎn)單的指令來(lái)執(zhí)行。此外,在有些實(shí)施例中,解碼單元215可以配置為把指令指定給時(shí)隙,供后續(xù)調(diào)度。在一種實(shí)施例中,可以定義兩個(gè)時(shí)隙0-1,其中時(shí)隙0包括在負(fù)載/存儲(chǔ)單元245或執(zhí)行單元235-240中可以執(zhí)行的指令,而時(shí)隙I包括在執(zhí)行單元235-240、浮點(diǎn)/圖形單元255中可以執(zhí)行的指令及任何分支指令。但是,在其它實(shí)施例中,可以采用其它數(shù)量的時(shí)隙和時(shí)隙指定類(lèi)型,或者時(shí)隙可以完全被略去。
[0060]寄存器重命名可以方便指令之間某些依賴性(例如,讀后寫(xiě)或者“假”依賴性)的消除,這又會(huì)防止不必要的指令執(zhí)行串行化。在一種實(shí)施例中,重命名單元220可以配置為通過(guò)把由指令規(guī)定的邏輯(即,體系架構(gòu))目的地寄存器映射到物理寄存器空間、在這個(gè)過(guò)程中解決假依賴性,來(lái)重命名它們。在有些實(shí)施例中,重命名單元220可以維護(hù)反映邏輯寄存器和它們所映射到的物理寄存器之間的關(guān)系的映射表。
[0061 ] 一旦被解碼和重命名,指令就準(zhǔn)備好被調(diào)度執(zhí)行了。在所說(shuō)明的實(shí)施例中,揀取單元225可以配置為揀取準(zhǔn)備好執(zhí)行的指令并且把所揀取的指令發(fā)送到發(fā)布單元230。在一種實(shí)施例中,揀取單元225可以配置為維護(hù)存儲(chǔ)多條解碼且重命名的指令及關(guān)于所存儲(chǔ)指令的相對(duì)年齡與狀態(tài)的信息的揀取隊(duì)列。在每個(gè)執(zhí)行循環(huán)期間,揀取單元225的這種實(shí)施例可以每個(gè)時(shí)隙最多揀取一條指令。例如,考慮指令依賴性和年齡信息,對(duì)于給定的時(shí)隙,揀取單元225可以配置為為該給定的時(shí)隙揀取準(zhǔn)備好執(zhí)行的最老指令。
[0062]在有些實(shí)施例中,揀取單元225可以配置為通過(guò)在揀取推測(cè)性負(fù)載/存儲(chǔ)指令(和,在有些情況下,它們的從屬指令)之后保留它們來(lái)支持負(fù)載/存儲(chǔ)推測(cè)。這可以方便在負(fù)載/存儲(chǔ)推測(cè)失誤的情況下指令的重演。此外,在有些實(shí)施例中,揀取單元225可以配置為通過(guò)使用拖延故意把“洞”插入到流水線中,例如,以便管理諸如某些負(fù)載/存儲(chǔ)的同步或長(zhǎng)等待時(shí)間FGU指令的下游流水線危險(xiǎn)因素。
[0063]發(fā)布單元230可以配置為向用于揀取出的指令的各種執(zhí)行單元提供指令源和數(shù)據(jù)。在一種實(shí)施例中,發(fā)布單元230可以配置為從適當(dāng)?shù)脑醋x取源操作數(shù),這可以依賴于流水線的狀態(tài)而變化。例如,如果源操作數(shù)依賴于仍然處于執(zhí)行流水線中的先前指令,則該操作數(shù)可以從適當(dāng)?shù)膱?zhí)行單元結(jié)果總線被直接繞過(guò)。結(jié)果也可以源自代表體系架構(gòu)(即,用戶可見(jiàn)的)及非體系架構(gòu)狀態(tài)的寄存器文件。在所說(shuō)明的實(shí)施例中,內(nèi)核100包括可以配置為存儲(chǔ)還沒(méi)有提交到體系架構(gòu)狀態(tài)并且可以充當(dāng)某些操作數(shù)的源的指令結(jié)果(例如,整數(shù)結(jié)果、浮點(diǎn)結(jié)果和/或條件碼結(jié)果)的工作寄存器文件260。各種執(zhí)行單元還可以維護(hù)操作數(shù)可以源自其中的體系架構(gòu)整數(shù)、浮點(diǎn)和條件碼狀態(tài)。
[0064]從發(fā)布單元230發(fā)布的指令可以前進(jìn)到一個(gè)或多個(gè)所說(shuō)明的執(zhí)行單元來(lái)執(zhí)行。在一種實(shí)施例中,EXU0235和EXU1240中的每一個(gè)都可以類(lèi)似地或者完全相同地配置為執(zhí)行在所實(shí)現(xiàn)的ISA中定義的某些整數(shù)類(lèi)型指令,諸如算術(shù)、邏輯和移位指令。在所說(shuō)明的實(shí)施例中,EXU0235可以配置為執(zhí)行從時(shí)隙0發(fā)布的整數(shù)指令,并且還可以執(zhí)行地址計(jì)算并且用于由LSU245執(zhí)行的負(fù)載/存儲(chǔ)指令。EXU1240可以配置為執(zhí)行從時(shí)隙I發(fā)布的整數(shù)指令,及分支指令。雖然這些指令中的一些實(shí)際上可以在其它功能單元中執(zhí)行,但是,在一種實(shí)施例中,F(xiàn)GU指令和多循環(huán)整數(shù)指令可以作為通過(guò)EXU1240流水線的時(shí)隙I指令來(lái)處理。[0065]在有些實(shí)施例中,體系架構(gòu)與非體系架構(gòu)的寄存器文件可以在執(zhí)行單元235-240中或者其附近物理實(shí)現(xiàn)。在有些實(shí)施例中,預(yù)期內(nèi)核100可以包括多于或少于兩個(gè)的整數(shù)執(zhí)行單元,并且執(zhí)行單元的功能性可以是或者可以不是對(duì)稱的。并且,在有些實(shí)施例中,執(zhí)行單元235-240可以不綁定到具體的發(fā)布時(shí)隙,或者可以與剛剛描述的不同地綁定。
[0066]負(fù)載存儲(chǔ)單元245可以配置為處理數(shù)據(jù)存儲(chǔ)器引用,諸如整數(shù)與浮點(diǎn)負(fù)載和存儲(chǔ)指令及其它類(lèi)型的存儲(chǔ)器引用指令。LSU245可以包括配置為檢測(cè)數(shù)據(jù)高速緩存未命中并且作為響應(yīng)從L2高速緩存105請(qǐng)求數(shù)據(jù)的數(shù)據(jù)高速緩存250及邏輯。在一種實(shí)施例中,數(shù)據(jù)高速緩存250可以配置為組相聯(lián)、直寫(xiě)式高速緩存,其中所有存儲(chǔ)都寫(xiě)到L2高速緩存105,而不管它們是否在數(shù)據(jù)高速緩存250中命中。雖然在其它實(shí)施例中,LSU245可以實(shí)現(xiàn)專用的地址生成邏輯,但是,如以上所指出的,用于負(fù)載/存儲(chǔ)指令的地址的實(shí)際計(jì)算可以在一個(gè)整數(shù)執(zhí)行單元中發(fā)生。在有些實(shí)施例中,LSU245可以實(shí)現(xiàn)配置為預(yù)測(cè)并預(yù)先提取有可能在將來(lái)被使用的數(shù)據(jù)的自適應(yīng)性、依賴歷史的硬件預(yù)提取器,以便增加在需要的時(shí)候這種數(shù)據(jù)將駐留在數(shù)據(jù)高速緩存250中的可能性。
[0067]在各種實(shí)施例中,LSU245可以實(shí)現(xiàn)配置為方便存儲(chǔ)器操作的多種結(jié)構(gòu)。例如,為了一致性探聽(tīng)和依賴性檢查,LSU245可以實(shí)現(xiàn)高速緩存虛擬數(shù)據(jù)地址翻譯的數(shù)據(jù)TLB,及配置為存儲(chǔ)已發(fā)布但還沒(méi)有提交的負(fù)載和存儲(chǔ)指令的負(fù)載和存儲(chǔ)緩沖區(qū)。LSU245可以包括配置為存儲(chǔ)例如由于高速緩存未命中而還不能完成的未完成負(fù)載和存儲(chǔ)的未命中緩沖區(qū)。在一種實(shí)施例中,LSU245可以實(shí)現(xiàn)配置為存儲(chǔ)用于已經(jīng)提交的存儲(chǔ)的地址和數(shù)據(jù)信息的存儲(chǔ)隊(duì)列,以方便負(fù)載依賴性檢查。LSU245還可以包括配置為支持原子負(fù)載-存儲(chǔ)指令、存儲(chǔ)器相關(guān)的異常檢測(cè)及對(duì)專用寄存器(例如,控制寄存器)的讀和寫(xiě)訪問(wèn)的硬件。
[0068]浮點(diǎn)/圖形單元255可以配置為執(zhí)行和提供用于在所實(shí)現(xiàn)的ISA中定義的某些浮點(diǎn)和面向圖形的指令的結(jié)果。例如,在一種實(shí)施例中,F(xiàn)GU255可以實(shí)現(xiàn)與IEEE754-1985浮點(diǎn)標(biāo)準(zhǔn)兼容的單精度和雙精度浮點(diǎn)運(yùn)算指令,諸如加、減、乘、除,以及某些超越功能。并且,在一種實(shí)施例中,F(xiàn)GU255可以實(shí)現(xiàn)由SPARC?視覺(jué)指令集(VISTM)體系架構(gòu)的一個(gè)版本諸如VISTM2.0或VISTM3.0所定義的分區(qū)算術(shù)和面向圖形的指令。在有些實(shí)施例中,F(xiàn)GU255可以實(shí)現(xiàn)融合與不融合的浮點(diǎn)乘-加指令。此外,在一種實(shí)施例中,F(xiàn)GU255可以實(shí)現(xiàn)某些整數(shù)指令,諸如整數(shù)乘、除,以及人口計(jì)數(shù)指令。依賴于FGU255的實(shí)現(xiàn),有些指令(例如,有些超越或者擴(kuò)展精度指令)或者指令操作數(shù)或者結(jié)果場(chǎng)景(例如,某些不正常的操作數(shù)或預(yù)期的結(jié)果)可以被軟件俘獲和處理或者仿真。
[0069]在一種實(shí)施例中,F(xiàn)GU255可以為浮點(diǎn)加/乘、除/平方根以及圖形操作實(shí)現(xiàn)獨(dú)立的執(zhí)行流水線,而在其它實(shí)施例中,F(xiàn)GU255實(shí)現(xiàn)的指令可以不同地分區(qū)。在各種實(shí)施例中,依賴于指令類(lèi)型,F(xiàn)GU255實(shí)現(xiàn)的指令可以完全流水線化(即,F(xiàn)GU255可能能夠每個(gè)執(zhí)行循環(huán)開(kāi)始一條新指令)、部分流水線化或者可以在完成之前一直阻塞發(fā)布。例如,在一種實(shí)施例中,浮點(diǎn)加和乘運(yùn)算可以完全流水線化,而浮點(diǎn)除運(yùn)算可以在完成之前一直阻塞其它除/平方根運(yùn)算。
[0070]FGU255的實(shí)施例還可以配置為實(shí)現(xiàn)硬件加密支持。例如,F(xiàn)GU255可以包括配置為支持加密/解密算法的邏輯,諸如高級(jí)加密標(biāo)準(zhǔn)(AES)、數(shù)據(jù)加密標(biāo)準(zhǔn)/三重?cái)?shù)據(jù)加密標(biāo)準(zhǔn)(DES/3DES)、Kasumi分組密碼算法,和/或Camellia分組密碼算法。FGU255還可以包括實(shí)現(xiàn)哈?;蛐r?yàn)和算法的邏輯,諸如安全哈希算法(SHA-1、SHA-256、SHA-384、SHA-512)或者消息摘要5 (MD5)。FGU255還可以配置為實(shí)現(xiàn)模塊化的算術(shù),諸如模塊化的乘法、減少與冪運(yùn)算,及各種類(lèi)型的伽羅瓦(Galois)域運(yùn)算。在一種實(shí)施例中,F(xiàn)GU255可以配置為利用浮點(diǎn)乘法器陣列用于模塊化乘法。在各種實(shí)施例中,F(xiàn)GU255可以實(shí)現(xiàn)以上提到的算法及未具體描述的其它算法中的幾種。
[0071]對(duì)于不同的實(shí)施例,F(xiàn)GU255提供的各種加密與模塊化算術(shù)運(yùn)算可以按不同的方式被調(diào)用。在一種實(shí)施例中,例如,通過(guò)使用經(jīng)由特殊寄存器或存儲(chǔ)器映射的寄存器的使用來(lái)定義的控制字隊(duì)列,這些特征可以經(jīng)可以間接地通過(guò)軟件編程的離散協(xié)處理器來(lái)實(shí)現(xiàn)。在另一種實(shí)施例中,ISA可以利用可以允許軟件直接執(zhí)行這些運(yùn)算的特殊指令來(lái)擴(kuò)增。
[0072]如前面所描述的,指令和數(shù)據(jù)存儲(chǔ)器訪問(wèn)可能涉及把虛擬地址翻譯成物理地址。在一種實(shí)施例中,這種翻譯可以在頁(yè)面級(jí)粒度發(fā)生,其中某個(gè)數(shù)量的地址位包括到給定地址頁(yè)中的偏移量,并且剩余的地址位包括頁(yè)號(hào)。例如,在采用4MB頁(yè)、64位虛擬地址和40位物理地址的實(shí)施例中,22個(gè)地址位(對(duì)應(yīng)于4MB的地址空間,并且一般是最不顯著的地址位)可以構(gòu)成頁(yè)偏移量。虛擬地址剩余的42位可以對(duì)應(yīng)于那個(gè)地址的虛擬頁(yè)號(hào),并且物理地址剩余的18位可以對(duì)應(yīng)于那個(gè)地址的物理頁(yè)號(hào)。在這種實(shí)施例中,虛擬到物理地址的翻譯可以通過(guò)把虛擬頁(yè)號(hào)映射到特定的物理頁(yè)號(hào)來(lái)發(fā)生,留下頁(yè)偏移量不被修改。
[0073]這種翻譯映射可以存儲(chǔ)在ITLB或DTLB中,用于指令高速緩存205或數(shù)據(jù)高速緩存250的查找過(guò)程期間的虛擬地址的快速翻譯。在用于給定虛擬頁(yè)號(hào)的翻譯在適當(dāng)?shù)腡LB中沒(méi)有找到的情況下,存儲(chǔ)器管理單元270可以配置為提供翻譯。在一種實(shí)施例中,MMU270可以配置為管理存儲(chǔ)在系統(tǒng)存儲(chǔ)器中的一個(gè)或多個(gè)翻譯表并且響應(yīng)于對(duì)地址翻譯的請(qǐng)求,諸如由于ITLB或DTLB未命中,而遍歷這種表(在有些實(shí)施例中,這些表可能是分層組織的)。(這種遍歷也被稱為頁(yè)表移動(dòng)或者硬件表移動(dòng)。)在有些實(shí)施例中,如果MMU270不能導(dǎo)出有效的地址翻譯,例如如果其中一個(gè)包括必需頁(yè)表的存儲(chǔ)器頁(yè)面不駐留在物理存儲(chǔ)器中(即,頁(yè)面未命中),則MMU270可以配置為生成陷阱,以允許存儲(chǔ)器管理軟件例程處理翻譯。在各種實(shí)施例中,預(yù)期可以采用任何期望的頁(yè)面尺寸。另外,在有些實(shí)施例中,可以并發(fā)地支持多個(gè)頁(yè)面尺寸。
[0074]如以上所指出的,所說(shuō)明的內(nèi)核100實(shí)施例中的幾個(gè)功能單元可以配置為生成離核的存儲(chǔ)器請(qǐng)求。例如,IFU200和LSU245每個(gè)都可以響應(yīng)于它們各自的高速緩存未命中而生成對(duì)L2高速緩存105的訪問(wèn)請(qǐng)求。此外,MMU270可以配置為例如在執(zhí)行頁(yè)表移動(dòng)的同時(shí)生成存儲(chǔ)器請(qǐng)求。在所說(shuō)明的實(shí)施例中,L2接口 265可以配置為代表可以生成L2訪問(wèn)的各種功能單元,向與特定內(nèi)核100關(guān)聯(lián)的L2高速緩存105提供一個(gè)集中式接口。在一種實(shí)施例中,L2接口 265可以配置為維護(hù)未決L2請(qǐng)求的隊(duì)列并且在未決請(qǐng)求當(dāng)中進(jìn)行仲裁,以確定哪個(gè)請(qǐng)求或哪些請(qǐng)求可以在給定的執(zhí)行循環(huán)期間傳送到L2高速緩存105。例如,L2接口 265可以實(shí)現(xiàn)最近最少使用或其它算法,以便在L2請(qǐng)求者當(dāng)中進(jìn)行仲裁。在一種實(shí)施例中,L2接口 265還可以配置為接收從L2高速緩存105返回的數(shù)據(jù),并且把這種數(shù)據(jù)指引到適當(dāng)?shù)墓δ軉卧?例如,指引到數(shù)據(jù)高速緩存250,用于由于未命中造成的數(shù)據(jù)高速緩存填充)。
[0075]在內(nèi)核100的有些實(shí)施例的操作過(guò)程中,異常事件可能發(fā)生。例如,來(lái)自由選擇單元210選擇要執(zhí)行的給定線程的指令對(duì)于內(nèi)核100實(shí)現(xiàn)的ISA來(lái)說(shuō)可能不是有效指令(例如,該指令可能具有非法操作碼),浮點(diǎn)指令可能產(chǎn)生需要在軟件中進(jìn)一步處理的結(jié)果,MMU270可能由于頁(yè)面未命中而不能夠完成頁(yè)表移動(dòng),可能檢測(cè)到硬件錯(cuò)誤(諸如高速緩存或寄存器文件中不可糾正的數(shù)據(jù)損壞)或者各種其它可能的體系架構(gòu)定義或特定于實(shí)現(xiàn)的異常事件中的任意一者都有可能發(fā)生。在一種實(shí)施例中,陷阱邏輯單元275可以配置為管理這種事件的處理。例如,TLU275可以配置為接收特定線程執(zhí)行過(guò)程中發(fā)生的異常事件的通知,并且使那個(gè)線程的執(zhí)行控制被引導(dǎo)到對(duì)應(yīng)于所檢測(cè)到的事件的監(jiān)管員模式軟件處理器(即,陷阱處理器)。這種處理器可以包括,例如,配置為向與俘獲線程關(guān)聯(lián)的應(yīng)用返回錯(cuò)誤狀態(tài)指示并且有可能終止該應(yīng)用的非法操作碼陷阱處理器、配置為修復(fù)不精確結(jié)果的浮點(diǎn)陷阱處理器,等等。
[0076]在一種實(shí)施例中,TLU275可以配置為,在不破壞其它非俘獲線程執(zhí)行的情況下,從內(nèi)核100中的任何處理階段清洗來(lái)自俘獲線程的所有指令。在有些實(shí)施例中,當(dāng)來(lái)自給定線程的特定指令造成陷阱時(shí)(相對(duì)于獨(dú)立于指令執(zhí)行的陷阱造成條件,諸如硬件中斷請(qǐng)求),TLU275可以把這種陷阱實(shí)現(xiàn)為精確陷阱。即,TLU275可以確保來(lái)自在俘獲指令之前發(fā)生的給定線程的所有指令(以程序次序)都完成并且更新體系架構(gòu)狀態(tài),同時(shí)沒(méi)有來(lái)自在俘獲指令之后發(fā)生的給定線程的指令(以程序次序)完成或更新體系架構(gòu)狀態(tài)。
[0077]此外,在缺少異?;蛳葳逭?qǐng)求的情況下,TLU275可以配置為啟動(dòng)和監(jiān)視工作結(jié)果向體系架構(gòu)狀態(tài)的提交。例如,TLU275可以包括協(xié)調(diào)推測(cè)結(jié)果到體系架構(gòu)狀態(tài)的轉(zhuǎn)移的重新排序緩沖區(qū)(ROB)。TLU275還可以配置為協(xié)調(diào)由于分支預(yù)測(cè)失誤造成的線程清洗。對(duì)于沒(méi)有由于預(yù)測(cè)失誤或異常而被清洗或以別的方式取消的指令,指令處理可以在指令結(jié)果已被提交的時(shí)候結(jié)束。
[0078]在各種實(shí)施例中,圖2中所說(shuō)明的單元中的任何一個(gè)都可以實(shí)現(xiàn)為一個(gè)或多個(gè)流水線階段,以便形成當(dāng)線程提取在IFU200中發(fā)生時(shí)開(kāi)始并且以TLU275的結(jié)果提交結(jié)束的指令執(zhí)行流水線。依賴于圖2的各種單元的功能性被分區(qū)和實(shí)現(xiàn)的方式,不同的單元可能需要不同數(shù)量的循環(huán)來(lái)完成它們的指令處理部分。在有些情況下,某些單元(例如,F(xiàn)GU255 )可能需要可變數(shù)量的循環(huán)來(lái)完成某些類(lèi)型的操作。
[0079]與在線程或過(guò)程之間切換時(shí)一般需要流水線清洗的以往處理器實(shí)現(xiàn)形成對(duì)比,通過(guò)動(dòng)態(tài)多線程的使用,在有些情況下,內(nèi)核100的指令流水線的每個(gè)階段都有可能保持來(lái)自不同執(zhí)行階段中的不同線程的指令。在有些實(shí)施例中,由于資源沖突或其它調(diào)度危險(xiǎn)因素造成的清洗和拖延可能造成某些流水線階段在給定的循環(huán)中沒(méi)有指令。但是,在所說(shuō)明的內(nèi)核100的實(shí)施例采用的細(xì)粒度多線程處理器實(shí)現(xiàn)中,這種清洗和拖延可以指向流水線中的單個(gè)線程,留下其它線程不被干擾。此外,即使內(nèi)核100處理的一個(gè)線程(例如,由于L2高速緩存未命中)拖延顯著的時(shí)間長(zhǎng)度,來(lái)自另一個(gè)線程的指令也可以已經(jīng)準(zhǔn)備好被選擇發(fā)布,從而增加了整體的線程處理吞吐量。
[0080]但是,如前所述,支持細(xì)粒度多線程執(zhí)行的內(nèi)核100的各種資源也可以被動(dòng)態(tài)地重新分配,以便提高具有更少量線程的工作負(fù)載的性能。在這些情形下,有些線程可以被分配更大的執(zhí)行資源份額,而其它線程被分配相應(yīng)較少的資源。但是,即使當(dāng)較少的線程共享相比而言較大的執(zhí)行資源份額時(shí),內(nèi)核100也仍然呈現(xiàn)出上述靈活的、特定于線程的清洗與拖延行為。
[0081]分支目標(biāo)陣列
[0082]在各種實(shí)施例中,處理器10或處理器內(nèi)核100可以包括為CTI預(yù)測(cè)目標(biāo)的指令提取單元或分支預(yù)測(cè)單元。在有些情況下,指令提取單元或分支預(yù)測(cè)單元有可能在CTI執(zhí)行之前明確地確定實(shí)際的目標(biāo),諸如當(dāng)目標(biāo)不跨越頁(yè)面邊界(例如,8K邊界)的時(shí)候。但是,在其它情況下,預(yù)測(cè)的目標(biāo)可能是不正確的并且實(shí)際的目標(biāo)可能需要在執(zhí)行階段對(duì)照預(yù)測(cè)的目標(biāo)進(jìn)行檢查。在有些實(shí)施例中,提供了分支目標(biāo)陣列,用于在CTI目標(biāo)預(yù)測(cè)和CTI執(zhí)行之間的時(shí)間段期間的預(yù)測(cè)CTI目標(biāo)地址的存儲(chǔ)。
[0083]現(xiàn)在轉(zhuǎn)向圖3,示出了包括分支單元380的內(nèi)核100的實(shí)施例。分支單元380可以部分地位于指令提取單元(IFU)200中。例如,分支預(yù)測(cè)單元385可以位于IFU200中,或者如圖3中所示那樣耦合到IFU200。在其它實(shí)施例中,分支單元380可以位于內(nèi)核100中其它地方。圖3是一種示例性實(shí)施例而不是意味著要限定分支單元380的位置或連接性。在所說(shuō)明的實(shí)施例中,分支單元380包括:分支預(yù)測(cè)單元385、分支目標(biāo)陣列390以及分支執(zhí)行單元395。在其它實(shí)施例中,分支單元380可以包括更多的元件和/或儲(chǔ)存器。在有些實(shí)施例中,處理器10配置為關(guān)于來(lái)自同一線程的其它CTI按順序執(zhí)行CTI,但是配置為跨線程不考慮先提取誰(shuí)的任何次序執(zhí)行CTI。
[0084]在一種實(shí)施例中,分支執(zhí)行單元395確定給定線程中最老CTI的實(shí)際方向與目標(biāo),并且隨后比較該CTI的實(shí)際方向和目標(biāo)與預(yù)測(cè)的方向和目標(biāo),以確定該CTI是否預(yù)測(cè)失誤。如果檢測(cè)到預(yù)測(cè)失誤,則不正確的推測(cè)路徑上該CTI后面所有較年輕的指令都被清洗,指令提取單元被重定向以從正確的目標(biāo)地址提取指令,并且分支預(yù)測(cè)單元385基于CTI的實(shí)際方向和目標(biāo)被更新。應(yīng)當(dāng)指出,在有些實(shí)施例中,預(yù)測(cè)的目標(biāo)可以等效于預(yù)測(cè)的目標(biāo)地址,并且這些術(shù)語(yǔ)可以在本公開(kāi)內(nèi)容中互換使用。
[0085]如以上所指出的,在執(zhí)行時(shí),CTI重定向在有些實(shí)現(xiàn)中會(huì)發(fā)生,或者是因?yàn)轭A(yù)測(cè)的方向不正確或者是因?yàn)轭A(yù)測(cè)的目標(biāo)不正確。關(guān)于這些問(wèn)題中的第二個(gè),分支執(zhí)行需要訪問(wèn)預(yù)測(cè)的目標(biāo),以便與實(shí)際目標(biāo)進(jìn)行比較。(如以上所指出的,CTI可以按與它們被預(yù)測(cè)的次序不同的次序執(zhí)行。)例如,簡(jiǎn)單地把50位目標(biāo)地址附連到沿流水線向下的任何指令是極其昂貴的。另一種方法將是添加線程化的結(jié)構(gòu),其中每個(gè)線程都具有它自己專用的條目。隨著線程個(gè)數(shù)增加(例如,支持多達(dá)八個(gè)線程的處理器),如果每個(gè)線程都保留合理數(shù)量的條目的話,則該結(jié)構(gòu)將增長(zhǎng)得太大,或者它具有太少條目以至于當(dāng)其條目滿了的時(shí)候線程可能饑餓。
[0086]在有些實(shí)施例中,分支目標(biāo)陣列(BTA)390可以用于方便由分支執(zhí)行單元對(duì)CTI預(yù)測(cè)目標(biāo)的訪問(wèn)。BTA390可以位于分支單元380中或者內(nèi)核100中其它地方。出于以下所述的原因,在有些實(shí)施例中,BTA390可以具有2至128個(gè)條目,以方便對(duì)BTA390中條目的訪問(wèn)。在一種特定的實(shí)施例中,BTA有32個(gè)條目。如前面所指出的,在處理器10的有些實(shí)現(xiàn)中,只有某些CTI可能關(guān)于預(yù)測(cè)目標(biāo)是否正確而具有不確定性(例如,其目標(biāo)跨越8K頁(yè)面邊界的那些指令),而其它CTI可能具有可以明確確定的目標(biāo)。換種方式說(shuō),在到達(dá)處理器的執(zhí)行階段之前,被明確確定的CTI目標(biāo)在由分支預(yù)測(cè)器和指令提取單元預(yù)測(cè)時(shí)就知道是正確的。出于各種原因,在其它實(shí)施例中,預(yù)測(cè)目標(biāo)可能或者可能不能明確確定。在有些實(shí)施例中,BTA條目只分配給具有“預(yù)測(cè)”目標(biāo)(即,在預(yù)測(cè)時(shí)不能明確確定的目標(biāo))的那些CTI。在有些情況下,所有CTI都可能具有預(yù)測(cè)的目標(biāo)。
[0087]在有些實(shí)施例中,BTA條目可以動(dòng)態(tài)分配給處理器10上執(zhí)行的多個(gè)線程中的任意一個(gè)。在一種實(shí)施例中,當(dāng)它預(yù)測(cè)CTI時(shí)(即,遇到其目標(biāo)不能明確確定的CTI,諸如當(dāng)存在對(duì)跨8K頁(yè)面邊界的CTI目標(biāo)的預(yù)測(cè)時(shí)),分支預(yù)測(cè)單元385把一個(gè)條目分配到BTA390中。在其它實(shí)施例中,BTA條目可以被分配用于任何CTI指令。當(dāng)分配一個(gè)條目時(shí),標(biāo)簽可以用于識(shí)別該條目(例如,5位的標(biāo)簽可以用于識(shí)別32個(gè)條目的BTA中的一個(gè)條目)。條目數(shù)從2到128變化的BTA需要從I位到7位變化的標(biāo)簽來(lái)唯一地識(shí)別所有BTA條目。在有些實(shí)施例中,可以使用包含范圍在2至128的多個(gè)條目的BTA,以保持標(biāo)簽尺寸相對(duì)于所存儲(chǔ)的目標(biāo)地址的尺寸是小的。對(duì)應(yīng)于所分配條目的標(biāo)簽可以連同CTI 一起通過(guò)處理器流水線傳遞到分支執(zhí)行單元395。管道化標(biāo)簽和指令自動(dòng)地處理線程之間CTI的亂序處理,因?yàn)轭A(yù)測(cè)的目標(biāo)是可以利用標(biāo)簽訪問(wèn)的,而不管CTI的次序如何。在執(zhí)行時(shí),分支執(zhí)行單元395可以使用連同CTI 一起傳遞的標(biāo)簽來(lái)從BTA中指示的條目讀取預(yù)測(cè)的目標(biāo)。然后,分支執(zhí)行單元395配置為比較預(yù)測(cè)目標(biāo)與實(shí)際目標(biāo)。因而,BTA可以提供允許分支執(zhí)行單元訪問(wèn)用于給定CTI的預(yù)測(cè)目標(biāo)的低成本機(jī)制。
[0088]現(xiàn)在轉(zhuǎn)向圖4,示出了 BTA390的具體實(shí)施例。BTA390可以包括用于存儲(chǔ)預(yù)測(cè)目標(biāo)地址的多個(gè)條目412a-412n。分支執(zhí)行單元395可以連同標(biāo)簽430 —起接收CTI425 (標(biāo)簽可能已經(jīng)被分支預(yù)測(cè)單元385或者某個(gè)其它處理器元件與CTI關(guān)聯(lián))。在所說(shuō)明的實(shí)施例中,標(biāo)簽用于索引到BTA390中,以便檢索對(duì)應(yīng)于CTI的所存儲(chǔ)的預(yù)測(cè)目標(biāo)地址。使用標(biāo)簽在BTA中定位條目的其它方法是預(yù)期的。BTA390可以對(duì)每個(gè)條目使用一位或者其它手段來(lái)指示該條目是否可用于分配或者在使用中。當(dāng)從BTA390檢測(cè)到預(yù)測(cè)目標(biāo)地址時(shí),指示器可以變成顯示對(duì)應(yīng)的條目不再被使用,或者可以使用其它手段來(lái)指示可用的條目。在有些實(shí)施例中,BTA條目可以在活動(dòng)的線程當(dāng)中靜態(tài)分配。這種布置考慮到了服務(wù)的質(zhì)量并且防止一個(gè)線程“擾亂” BTA并且因此不利地影響其它線程的性能。
[0089]現(xiàn)在轉(zhuǎn)向圖5,示出了說(shuō)明利用BTA的一種實(shí)施例的方法500的流程圖。用于CTI的預(yù)測(cè)目標(biāo)地址存儲(chǔ)在BTA中(方框510)。對(duì)應(yīng)于該目標(biāo)地址在BTA中的位置的標(biāo)簽被生成,并且與該CTI關(guān)聯(lián)(方框515)。計(jì)算該CTI的實(shí)際目標(biāo)地址(方框520)。利用標(biāo)簽從BTA檢索預(yù)測(cè)的目標(biāo)地址(方框525)。比較預(yù)測(cè)目標(biāo)地址與實(shí)際目標(biāo)地址(方框530)。因?yàn)橹挥袠?biāo)簽的位隨CTI 一起傳遞,所以方法500的使用防止把整個(gè)預(yù)測(cè)目標(biāo)地址都沿著處理器流水線向下傳遞。
[0090]現(xiàn)在轉(zhuǎn)向圖6,示出了方法600的流程圖,方法600是利用BTA的另一種實(shí)施例。預(yù)測(cè)CTI方向與目標(biāo)(方框605)。在各種實(shí)施例中,這種預(yù)測(cè)可以由指令提取單元和/或分支預(yù)測(cè)單元執(zhí)行。如前面所討論的,有些目標(biāo)預(yù)測(cè)可以在執(zhí)行之前被明確確定(相對(duì)于跨頁(yè)面邊界或者在預(yù)測(cè)時(shí)以別的方式依賴于不可用信息或不完整指令的目標(biāo)預(yù)測(cè))。如果目標(biāo)被明確確定(如在決定方框610所確定的),則處理器可以繼續(xù)處理器流水線中指令的執(zhí)行,至少直到確定預(yù)測(cè)方向是否正確。如果預(yù)測(cè)目標(biāo)沒(méi)有明確確定(例如,跨8K頁(yè)面邊界的目標(biāo)),則預(yù)測(cè)目標(biāo)存儲(chǔ)在BTA中(方框615)。對(duì)應(yīng)于該BTA條目的標(biāo)簽與CTI關(guān)聯(lián)(方框620)。這種關(guān)聯(lián)在各種實(shí)施例中可以采取不同的形式。例如,CTI或流水線元件的位可以為標(biāo)簽保留。然后,如前面所描述的那樣,CTI沿指令流水線向下傳遞(這可以包括選擇單元210、解碼單元215、重命名單元220、揀取單元225和/或發(fā)布單元230)。在流水線中的某個(gè)點(diǎn),從BTA檢索預(yù)測(cè)目標(biāo)并且計(jì)算實(shí)際目標(biāo)地址(方框630)。如果實(shí)際目標(biāo)與檢索出的預(yù)測(cè)目標(biāo)匹配,則處理器可以繼續(xù)執(zhí)行流水線中的指令(方框645)。如果預(yù)測(cè)目標(biāo)與實(shí)際目標(biāo)不匹配,則處理器可以清洗流水線中不正確的推測(cè)路徑上該CTI后面所有更年輕的指令(方框640)。更年輕的指令對(duì)應(yīng)于按程序次序跟在該CTI之后(并且在該CTI之后提取)的指令,這些指令可能或者可能不能在亂序處理器中在該CTI之前執(zhí)行。
[0091]在一種實(shí)施例中,BTA可以是統(tǒng)一的,從而允許其有限的資源根據(jù)需要在線程之間動(dòng)態(tài)且并發(fā)地分配。因而,當(dāng)內(nèi)核以單線程模式運(yùn)行時(shí),可以使所有條目都讓那個(gè)線程獲得。在有些體系架構(gòu)中,具有預(yù)測(cè)目標(biāo)的CTI (例如,具有跨8K頁(yè)面邊界的目標(biāo)的那些)可能是非常罕見(jiàn)的,因此對(duì)于在八個(gè)線程上運(yùn)行的大多數(shù)應(yīng)用來(lái)說(shuō),32條目的BTA就足夠了。在其中一個(gè)線程具有不尋常的大量預(yù)測(cè)目標(biāo)的罕見(jiàn)情況下,如果其它線程碰巧具有較少的預(yù)測(cè)目標(biāo),則在多個(gè)線程之間動(dòng)態(tài)分配目標(biāo)陣列條目的能力可以提供更好的性能。在多個(gè)線程可能具有大量預(yù)測(cè)目標(biāo)的實(shí)施例中,BTA可以動(dòng)態(tài)調(diào)整大小,以便包含適當(dāng)數(shù)量的條目。
[0092]示例件系統(tǒng)實(shí)施例
[0093]如上所述,在有些實(shí)施例中,圖1的處理器10可以配置為與多個(gè)外部設(shè)備接口。包括處理器10的系統(tǒng)700的一種實(shí)施例在圖7中說(shuō)明。在所說(shuō)明的實(shí)施例中,系統(tǒng)700包括耦合到系統(tǒng)存儲(chǔ)器710、外圍存儲(chǔ)設(shè)備720和引導(dǎo)設(shè)備730的處理器10的實(shí)例,示為處理器10a。系統(tǒng)700耦合到網(wǎng)絡(luò)740,網(wǎng)絡(luò)740又耦合到另一個(gè)計(jì)算機(jī)系統(tǒng)750。在有些實(shí)施例中,系統(tǒng)700可以包括所示設(shè)備的多于一個(gè)實(shí)例。在各種實(shí)施例中,系統(tǒng)700可以配置為可機(jī)架安裝的服務(wù)器系統(tǒng)、獨(dú)立系統(tǒng)或者以任何其它合適的形式因子。在有些實(shí)施例中,系統(tǒng)700可以配置為客戶端系統(tǒng)而不是服務(wù)器系統(tǒng)。
[0094]在有些實(shí)施例中,系統(tǒng)700可以配置為多處理器系統(tǒng),其中處理器IOa可以可選地耦合到處理器10的一個(gè)或多個(gè)其它實(shí)例,在圖10中示為處理器10b。例如,處理器10a-b可以耦合成經(jīng)它們各自的一致處理器接口 160通信。
[0095]在各種實(shí)施例中,系統(tǒng)存儲(chǔ)器710可以包括如上所述任何合適類(lèi)型的系統(tǒng)存儲(chǔ)器,諸如FB-DIMM、DDR/DDR2/DDR3/DDR4SDRAM、RDRAM?、閃存存儲(chǔ)器及各種類(lèi)型的ROM等。在提供多個(gè)存儲(chǔ)器接口 130的處理器10的實(shí)施例中,系統(tǒng)存儲(chǔ)器710可以包括由離散存儲(chǔ)器接口控制的離散的多排存儲(chǔ)器。并且,在有些實(shí)施例中,系統(tǒng)存儲(chǔ)器710可以包括多種不同類(lèi)型的存儲(chǔ)器。
[0096]在各種實(shí)施例中,外圍存儲(chǔ)設(shè)備720可以包括對(duì)磁、光或固態(tài)存儲(chǔ)介質(zhì)的支持,諸如硬驅(qū)、光盤(pán)、非易失性RAM設(shè)備等。在有些實(shí)施例中,外圍存儲(chǔ)設(shè)備720可以包括更復(fù)雜的存儲(chǔ)設(shè)備,諸如盤(pán)陣列或存儲(chǔ)區(qū)域網(wǎng)絡(luò)(SAN),其中SAN可以經(jīng)標(biāo)準(zhǔn)的小型計(jì)算機(jī)系統(tǒng)接口(scsi)、光纖通道接口、Firewire? (IEEE1394)接口或者另一種合適的接口耦合到處理器10。此外,在其它實(shí)施例中,預(yù)期任何合適的外圍設(shè)備,諸如多媒體設(shè)備、圖形/顯示設(shè)備、標(biāo)準(zhǔn)輸入/輸出設(shè)備等,都可以耦合到處理器10。在一種實(shí)施例中,外圍存儲(chǔ)設(shè)備720可以經(jīng)圖1的外圍設(shè)備接口 150耦合到處理器10。
[0097]如前面所描述的,在一種實(shí)施例中,引導(dǎo)設(shè)備730可以包括配置為,諸如從上電復(fù)位狀態(tài),協(xié)調(diào)處理器10的初始化和引導(dǎo)的設(shè)備,諸如FPGA或ASIC。此外,在有些實(shí)施例中,引導(dǎo)設(shè)備730可以包括配置為允許對(duì)管理功能,諸如處理器10的調(diào)試或測(cè)試模式,進(jìn)行訪問(wèn)的輔助計(jì)算機(jī)系統(tǒng)。
[0098]例如,網(wǎng)絡(luò)740可以包括用于互連計(jì)算機(jī)系統(tǒng)的任何合適的設(shè)備、介質(zhì)和/或協(xié)議,諸如有線或無(wú)線以太網(wǎng)。在各種實(shí)施例中,網(wǎng)絡(luò)740可以包括局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、電信網(wǎng)絡(luò)或者其它合適類(lèi)型的網(wǎng)絡(luò)。在有些實(shí)施例中,計(jì)算機(jī)系統(tǒng)750的配置可以與所說(shuō)明的系統(tǒng)700類(lèi)似或者完全相同,而在其它實(shí)施例中,計(jì)算機(jī)系統(tǒng)750可以基本上不同地配置。例如,計(jì)算機(jī)系統(tǒng)750可以是服務(wù)器系統(tǒng)、基于處理器的客戶端系統(tǒng)、無(wú)狀態(tài)“瘦”客戶端系統(tǒng)、移動(dòng)設(shè)備等。在有些實(shí)施例中,處理器10可以配置為經(jīng)圖1的網(wǎng)絡(luò)接口160與網(wǎng)絡(luò)740通信。
[0099]雖然以上已經(jīng)描述了具體的實(shí)施例,但是,這些實(shí)施例也不是要限定本公開(kāi)內(nèi)容的范圍,即便關(guān)于特定的特征只描述了單個(gè)實(shí)施例。除非另外聲明,否則本公開(kāi)內(nèi)容中提供的特征的例子旨在是說(shuō)明性的而不是約束性的。以上描述旨在覆蓋對(duì)受益于本公開(kāi)內(nèi)容的本領(lǐng)域技術(shù)人員顯而易見(jiàn)的此類(lèi)替換例、修改例和等同例。
[0100]本公開(kāi)內(nèi)容的范圍包括本文所公開(kāi)的任何特征或特征的組合(明確地或者隱含地),或者其任何一般化,不管它是否減輕了本文要解決的問(wèn)題中的任何一個(gè)或全部。相應(yīng)地,對(duì)于特征的任何此類(lèi)組合,可以在本申請(qǐng)(或者要求其優(yōu)先權(quán)的申請(qǐng))審查期間形成新的權(quán)利要求。特別地,參考所附權(quán)利要求,來(lái)自從屬權(quán)利要求的特征可以與獨(dú)立權(quán)利要求的那些特征組合,并且來(lái)自各自獨(dú)立權(quán)利要求的特征可以按任何適當(dāng)?shù)姆绞浇M合而不僅僅是以所附權(quán)利要求中列舉中的具體組合。
【權(quán)利要求】
1.一種裝置,包括: 指令提取單元,配置為提取包括第一控制轉(zhuǎn)移指令(CTI)的指令;及 具有多個(gè)條目的分支目標(biāo)陣列,其中分支目標(biāo)陣列配置為接收用于第一控制轉(zhuǎn)移指令的預(yù)測(cè)目標(biāo)地址,其中分支目標(biāo)陣列配置為在所述多個(gè)條目中的一個(gè)條目中存儲(chǔ)預(yù)測(cè)目標(biāo)地址,并且其中,分支目標(biāo)陣列是可利用與第一控制轉(zhuǎn)移指令的執(zhí)行關(guān)聯(lián)的標(biāo)簽訪問(wèn)以檢索預(yù)測(cè)目標(biāo)地址的。
2.如權(quán)利要求1所述的裝置,其中該裝置配置為生成預(yù)測(cè)目標(biāo)地址,使分支目標(biāo)陣列中的條目被分配,并且將標(biāo)簽與第一控制轉(zhuǎn)移指令關(guān)聯(lián)。
3.如權(quán)利要求1所述的裝置,其中該裝置配置為,當(dāng)在執(zhí)行第二控制轉(zhuǎn)移指令前明確確定了第二控制轉(zhuǎn)移指令的目標(biāo)地址時(shí),不存儲(chǔ)第二控制轉(zhuǎn)移指令的預(yù)測(cè)目標(biāo)地址。
4.如權(quán)利要求1所述的裝置,還包括分支執(zhí)行單元,分支執(zhí)行單元配置為: 計(jì)算第一控制轉(zhuǎn)移指令的實(shí)際目標(biāo)地址; 利用標(biāo)簽從分支目標(biāo)陣列檢索預(yù)測(cè)目標(biāo)地址;及 比較實(shí)際目標(biāo)地址與預(yù)測(cè)目標(biāo)地址,以便確定第一控制轉(zhuǎn)移指令的目標(biāo)地址是否被正確預(yù)測(cè)。
5.如權(quán)利要求1所述的裝置,其中該裝置配置為支持指令的亂序執(zhí)行,并且其中該裝置配置為支持多個(gè)線程。
6.如權(quán)利要求5所述的`裝置,其中該裝置配置為對(duì)所述多個(gè)線程中的任意一個(gè)分配所述多個(gè)條目中的任意一個(gè)。
7.如權(quán)利要求5所述的裝置,其中該裝置配置為對(duì)所述多個(gè)線程中的一個(gè)或多個(gè)靜態(tài)分配所述多個(gè)條目的至少一部分。
8.如權(quán)利要求1所述的裝置,其中預(yù)測(cè)目標(biāo)地址是具有至少32位的虛擬地址,并且其中分支目標(biāo)陣列具有2至128個(gè)條目。
9.如權(quán)利要求1所述的裝置,其中預(yù)測(cè)目標(biāo)地址跨頁(yè)面邊界。
10.一種裝置,包括: 分支執(zhí)行單元,配置為接收控制轉(zhuǎn)移指令和標(biāo)簽,其中標(biāo)簽指示控制轉(zhuǎn)移指令的預(yù)測(cè)目標(biāo)地址的位置;并且 其中分支執(zhí)行單元配置為確定用于控制轉(zhuǎn)移指令的實(shí)際目標(biāo)地址,使用標(biāo)簽來(lái)檢索預(yù)測(cè)目標(biāo)地址,以及比較預(yù)測(cè)目標(biāo)地址與實(shí)際目標(biāo)地址。
11.如權(quán)利要求10所述的裝置,其中分支執(zhí)行單元進(jìn)一步配置為響應(yīng)于確定實(shí)際目標(biāo)地址與預(yù)測(cè)目標(biāo)地址不匹配而清洗不正確的推測(cè)路徑上的更年輕的指令,其中不正確的推測(cè)路徑是由該裝置基于預(yù)測(cè)目標(biāo)地址提取的,其中更年輕的指令按程序次序跟在該控制轉(zhuǎn)移指令后面。
12.如權(quán)利要求10所述的裝置,還包括具有多個(gè)條目的分支目標(biāo)陣列,其中分支目標(biāo)陣列配置為在所述多個(gè)條目中的一個(gè)條目中存儲(chǔ)預(yù)測(cè)目標(biāo)地址。
13.如權(quán)利要求12所述的裝置,還包括配置為生成預(yù)測(cè)目標(biāo)地址并且使預(yù)測(cè)目標(biāo)地址存儲(chǔ)在分支目標(biāo)陣列中的分支預(yù)測(cè)單元。
14.如權(quán)利要求10所述的裝置,還包括具有多個(gè)階段的執(zhí)行流水線,其中,在到達(dá)分支執(zhí)行單元之前,標(biāo)簽連同控制轉(zhuǎn)移指令一起傳遞通過(guò)所述多個(gè)階段。
15.—種方法,包括: 響應(yīng)于接收到控制轉(zhuǎn)移指令的預(yù)測(cè)目標(biāo)地址,處理器在分支目標(biāo)陣列的一個(gè)條目中存儲(chǔ)預(yù)測(cè)目標(biāo)地址,其中分支目標(biāo)陣列包括多個(gè)條目 '及 處理器把標(biāo)簽與控制轉(zhuǎn)移指令關(guān)聯(lián),其中條目是可利用該標(biāo)簽訪問(wèn)的。
16.如權(quán)利要求15所述的方法,還包括: 處理器把標(biāo)簽和控制轉(zhuǎn)移指令一起傳遞通過(guò)處理器的執(zhí)行流水線的多個(gè)階段,直到標(biāo)簽到達(dá)執(zhí)行階段; 處理器為控制轉(zhuǎn)移指令計(jì)算實(shí)際目標(biāo)地址; 處理器利用標(biāo)簽從條目檢索預(yù)測(cè)目標(biāo)地址;及 處理器比較預(yù)測(cè)目標(biāo)地址與實(shí)際目標(biāo)地址。
17.如權(quán)利要求15所述的方法,其中分支目標(biāo)陣列配置為存儲(chǔ)來(lái)自多個(gè)處理器線程的控制轉(zhuǎn)移指令的預(yù)測(cè)目標(biāo)地址。
18.如權(quán)利要求15所述的方法,其中預(yù)測(cè)目標(biāo)地址是虛擬地址,并且所述存儲(chǔ)是響應(yīng)于確定預(yù)測(cè)目標(biāo)地址跨頁(yè)面邊界而執(zhí)行的。
19.如權(quán)利要求15所述的方法,其中標(biāo)簽是條目在分支目標(biāo)陣列中的索引,并且標(biāo)簽的位數(shù)小于預(yù)測(cè)目標(biāo)地址的位數(shù)。
20.如權(quán)利要求15所述的方法,還包括響應(yīng)于確定實(shí)際目標(biāo)地址與預(yù)測(cè)目標(biāo)地址不同而清洗處理器流水線中的一條或多條指令。
【文檔編號(hào)】G06F9/38GK103635877SQ201280031316
【公開(kāi)日】2014年3月12日 申請(qǐng)日期:2012年5月14日 優(yōu)先權(quán)日:2011年5月13日
【發(fā)明者】C·H·奧爾森, M·K·沙 申請(qǐng)人:甲骨文國(guó)際公司