抑制不正確的推測性執(zhí)行路徑上的控制轉(zhuǎn)移指令的制作方法
【專利摘要】公開涉及被配置為執(zhí)行控制轉(zhuǎn)移指令(CTI)的處理器的技術(shù)。在一些實施例中,處理器包含抑制推測性執(zhí)行路徑上的誤預(yù)測的較年輕的CTI的機(jī)制。該機(jī)制允許分支預(yù)測器保持其保真度,并消除管線的偽造的沖洗。在一個實施例中,誤預(yù)測位被用于指示出現(xiàn)了誤預(yù)測,并且,比誤預(yù)測CTI年輕的CTI被抑制。在一些實施例中,處理器可被配置為執(zhí)行來自多個線程的指令流。各線程可包含誤預(yù)測指示。各線程中的CTI可關(guān)于線程的其它CTI以程序次序執(zhí)行,而CTI以外的指令可按程序亂序執(zhí)行。
【專利說明】抑制不正確的推測性執(zhí)行路徑上的控制轉(zhuǎn)移指令
【技術(shù)領(lǐng)域】
[0001]本公開涉及處理器,更特別地,涉及防止亂序處理器中的分支預(yù)測器出錯。
【背景技術(shù)】
[0002]當(dāng)代的超標(biāo)量微處理器通過并行地按程序亂序執(zhí)行多個指令實現(xiàn)較高的性能。在程序中高度盛行的諸如分支、調(diào)用和返回的控制轉(zhuǎn)移指令(CTI)由于要在控制轉(zhuǎn)移指令之后執(zhí)行的指令在控制轉(zhuǎn)移指令被執(zhí)行之前是未知的而可導(dǎo)致流水線微處理器停頓。這些停頓可導(dǎo)致性能的顯著損失。
[0003]當(dāng)代的微處理器使用分支預(yù)測技術(shù)以推測性地取回和執(zhí)行超出CTI的指令。分支預(yù)測包含預(yù)測CTI的方向和目標(biāo)。如果CTI由于方向預(yù)測或目標(biāo)預(yù)測不正確而被誤預(yù)測,那么在CTI以外推測性地取回的所有指令被丟棄(沖洗),并且,由指令取回單元(IFU)從正確的路徑取回新的指令。并且,在檢測到誤預(yù)測CTI時,分支預(yù)測器一般通過使用CTI的實際結(jié)果被更新以提高其將來的預(yù)測精度。在一些微處理器中,通過每個CTI的結(jié)果更新分支預(yù)測器。
[0004]如果CTI被誤預(yù)測,那么在CTI以外推測性地取回的指令可進(jìn)一步是比誤預(yù)測CTI年輕的CTI指令。在沖洗超出CTI的推測性指令之前,處理器必須執(zhí)行比CTI舊的指令。當(dāng)?shù)却龍?zhí)行這種較舊的指令時,來自誤預(yù)測的推測性執(zhí)行路徑的較年輕的CTI如果被允許更新分支預(yù)測器則會使分支預(yù)測器精度劣化。這種較年輕的CTI也可導(dǎo)致偽造的指令沖洗和/或?qū)τ贗FU不正確的更新。
[0005]當(dāng)前的微處理器一般實現(xiàn)芯片級多線程(CT)以提高性能。在CMT處理器中,多個軟件線程在處理器中同時活動,并且,每個活動線程具有專用的硬件資源以存儲其狀態(tài)。來自多個軟件線程的指令的有效執(zhí)行需要預(yù)測來自不同的線程CTI的能力。在CMT處理器上執(zhí)行多個線程可導(dǎo)致來自不同線程的CTI的執(zhí)行被交織。
【發(fā)明內(nèi)容】
[0006]本公開涉及被配置為執(zhí)行控制轉(zhuǎn)移指令(CTI)的處理器。在一些實施例中,公開了抑制誤預(yù)測的推測性執(zhí)行路徑上的較年輕的CTI的結(jié)果的機(jī)制。該機(jī)制允許分支預(yù)測器保持其保真度,消除管線的偽造的沖洗,并防止不正確的指令取回單元(IFU)更新。
[0007]在一些實施例中,該機(jī)制在存在多個處理器線程的情況下工作,并且確保在來自給定線程上的推測性CTI的結(jié)果被抑制時,其它線程上的非推測性CTI繼續(xù)正常執(zhí)行并且能夠更新分支預(yù)測器。并且,其它線程上的誤預(yù)測的非推測性CTI可繼續(xù)沖洗與該線程對應(yīng)的管線階段,并使IFU重定向以取回這些線程的校正的路徑上的指令。
[0008]在一個示例性實施例中,當(dāng)出現(xiàn)CTI誤預(yù)測時,設(shè)定指示誤預(yù)測的位。CTI關(guān)于執(zhí)行線程中的其它CTI按次序被執(zhí)行。已知當(dāng)設(shè)定了誤預(yù)測位時出現(xiàn)的CTI要處于不正確的執(zhí)行路徑上,原因是它們比導(dǎo)致設(shè)定誤預(yù)測位的CTI年輕。不允許這種較年輕的CTI導(dǎo)致管線沖洗,更新IFU或者更新分支預(yù)測器。當(dāng)執(zhí)行線程中的所有較舊的指令(相對于導(dǎo)致設(shè)定誤預(yù)測位的CTI)完成執(zhí)行或者出現(xiàn)陷阱或例外時,誤預(yù)測位被清除,并且,從管線沖洗所有較年輕的指令。在一些實施例中,誤預(yù)測位可抑制誤預(yù)測的執(zhí)行路徑上的CTI的結(jié)果(例如,分支預(yù)測器更新、管線沖洗和IFU更新)。
【專利附圖】
【附圖說明】
[0009]圖1是多核處理器的一個實施例的框圖。
[0010]圖2是處理器核的一個實施例的框圖。
[0011]圖3是包含分支單元的處理器核的一個實施例的框圖。
[0012]圖4是分支單元的一個實施例的框圖。
[0013]圖5是示出設(shè)定和清除誤預(yù)測指示的一個實施例的流程圖。
[0014]圖6是示出分支單元操作的一個實施例的流程圖。
[0015]圖7是示出示例性系統(tǒng)實施例的框圖。
【具體實施方式】
[0016]本說明書包括提到“一個實施例”或“實施例”。短語“在一個實施例中”或“在實施例中”的出現(xiàn)未必指的是同一實施例。可通過與本公開一致的任何適當(dāng)?shù)姆绞浇M合特定的特征、結(jié)構(gòu)或特性。
[0017]術(shù)語。以下的段落提供在本公開(包含所附的權(quán)利要求)中出現(xiàn)的術(shù)語的定義和/
或語境。
[0018]“包含”。該術(shù)語是開放性的。如在所附的權(quán)利要求中使用的那樣,該術(shù)語不排除附加的結(jié)構(gòu)或步驟。考慮記載“包含一個或更多個處理器單元的裝置……”的權(quán)利要求。這種權(quán)利要求不排除裝置包含附加的部件(例如,網(wǎng)絡(luò)接口單元、圖形電路等)。
[0019]“被配置為”。各種單元、電路或其它部件可被描述或要求為“被配置為”執(zhí)行任務(wù)或多項任務(wù)。在這種語境中,“被配置為”被用于通過指示單元/電路/部件包含在操作期間執(zhí)行這些任務(wù)或多項任務(wù)的結(jié)構(gòu)(例如,電路)隱含結(jié)構(gòu)。因而,即使當(dāng)特定的單元/電路/部件當(dāng)前不操作(例如,沒有開)時,也可以說單元/電路/部件被配置為執(zhí)行任務(wù)。與“被配置為”語句一起使用的單元/電路/部件包含硬件一例如,存儲實現(xiàn)操作的可執(zhí)行程序指令的電路、存儲器等。記載單元/電路/部件“被配置為”執(zhí)行一項或更多項任務(wù)明顯不是要對于該單元/電路/部件觸發(fā)35U.S.C.§ 112第6段。
[0020]“第一”、“第二”等。如這里使用的那樣,這些術(shù)語被用作它們的后面的名詞的標(biāo)簽,不意味著任何類型的排序(例如,空間、時間、邏輯等)。例如,在具有兩個分支預(yù)測單元的處理器中,術(shù)語“第一”和“第二”僅是用于指的是這些單元中的任一個的標(biāo)簽。
[0021]“基于”。如這里使用的那樣,該術(shù)語被用于描述影響確定的一個或更多個因素。該術(shù)語不排除可影響確定的附加的因素。即,確定可單獨地基于這些因素,或者至少部分地基于這些因素??紤]短語“基于B確定A”。雖然B可以是影響A的確定的因素,但這種短語不排除A的確定還基于C。在其它的情況下,A可單獨地基于B被確定。
[0022]“執(zhí)行”。該術(shù)語具有其在本領(lǐng)域中通常接受的意思,并且包含可由處理器執(zhí)行以實現(xiàn)指令的完成的所有動作,包含取回、解碼、發(fā)出以及實際計算指令的結(jié)果。當(dāng)功能單元在這里被描述為“執(zhí)行”特定的指令時,該術(shù)語指的是計算特定指令的結(jié)果(例如,計算兩個寄存器的內(nèi)容的和)。
[0023]“線程”。該術(shù)語具有其在本領(lǐng)域中通常接受的意思,并且包含可由處理器執(zhí)行的程序內(nèi)的一組指令。例如,術(shù)語“線程”可指的是作為“分岔(fork)”或其它類似的操作的結(jié)果在處理器上執(zhí)行的一組指令。在這里描述為在線程“中”的指令是線程的一組指令的一部分。
[0024]“同時存儲/同時間存儲”。如這里使用的那樣,這些短語指的是在一些重疊的時段中存儲項目(例如,用于不同線程的誤預(yù)測信息)。注意,這些短語未必意味著兩個同時存儲的項目的存儲同時開始或者兩個項目被存儲持續(xù)相同的時間長度。
[0025]引言
[0026]本公開描述與改善的分支單元有關(guān)的各種實施例。圖1和圖2給出可包含這種分支單元的示例性多線程處理器的概要。圖3和圖4給出用于抑制不正確的推測性執(zhí)行路徑上的CTI的處理器元件的示例性實施例。圖5和圖6分別給出用于設(shè)定誤預(yù)測指示和抑制不正確的推測性執(zhí)行路徑上的CTI的示例性方法。圖7給出可使用這種處理器的計算機(jī)系統(tǒng)的概要。
[0027]多線程處理器的一般概要
[0028]現(xiàn)在轉(zhuǎn)到圖1,表示示出處理器10的一個實施例的框圖。在某些實施例中,處理器10可以是多線程的。在示出的實施例中,處理器10包含也表示為“核O”?“核η”的數(shù)個處理器核IOOa?η。如這里使用的那樣,術(shù)語處理器可指的是具有單個處理器核的裝置或包含兩個或更多個處理器核的裝置。處理器10的各種實施例可包含不同數(shù)量的核100,諸如8個、16個或任何其它適當(dāng)?shù)臄?shù)量。核100中的每一個與相應(yīng)的L2高速緩存105a?η耦合,該相應(yīng)的L2高速緩存105a?η又通過橫條(crossbar) 110與L3高速緩存120耦合。以集體或個別的方式,核IOOa?η和L2高速緩存105a?η分別統(tǒng)稱為核100和L2高速緩存105。
[0029]通過橫條110和L3高速緩存120,核100可與可在位于處理器10外面的各種裝置耦合。在示出的實施例中,一個或更多個存儲器接口 130可被配置為與系統(tǒng)存儲器(未示出)的一個或更多個群組(bank)耦合。一個或更多個相干處理器接口 140可被配置為耦合處理器10與其它的處理器(例如,在使用處理器10的多個單元的多處理器環(huán)境中)。另外,系統(tǒng)互連125耦合核100與一個或更多個外設(shè)接口 150和網(wǎng)絡(luò)接口 160。如以下更詳細(xì)地描述的那樣,這些接口可被配置為耦合處理器10與各種外設(shè)裝置和網(wǎng)絡(luò)。
[0030]核100可被配置為根據(jù)特定的指令集結(jié)構(gòu)(ISA)執(zhí)行指令并處理數(shù)據(jù)。在一個
實施例中,例如,核100可被配置為實現(xiàn)SPARC? ISA的某個版本,諸如SPARC?V9、UltraSPARC Architecture2005>UltraSPARC Architecture2007 或 UltraSPARCArchitecture2009。但是,在其它的實施例中,可以設(shè)想,例如,可以使用任何希望的ISA,諸如 x86 (32 位或 64 位版本)、PowerPC?或MIPS?。
[0031]在示出的實施例中,核100中的每一個可被配置為相互獨立地操作,使得所有核100可并行(S卩,同時)執(zhí)行。另外,如以下結(jié)合圖2的描述描述的那樣,在一些實施例中,核100中的每一個可被配置為同時執(zhí)行多個線程,這里,給定的線程可包含可與另一線程獨立地執(zhí)行指令的一組指令。(例如,諸如應(yīng)用的單個軟件處理可包含可對于被調(diào)度由操作系統(tǒng)執(zhí)行的一個或更多個線程)。這種核100也可被稱為多線程(MT)核。在一個實施例中,核100中的每一個可被配置為同時執(zhí)行來自可變數(shù)量的線程的指令,高達(dá)8個同時執(zhí)行的線程。在16核實現(xiàn)中,處理器10可由此同時執(zhí)行高達(dá)128個線程。但在其它的實施例中,設(shè)想可提供其它數(shù)量的核100,并且,核100可同時處理不同數(shù)量的線程。
[0032]另外,如下面更詳細(xì)地描述的那樣,在一些實施例中,核100中的每一個可被配置為以程序亂序執(zhí)行某些指令,這在這里也可被稱為亂序執(zhí)行,或者簡稱為000。作為亂序執(zhí)行的例子,對于特定的線程,可存在在程序次序中處于給定指令的后面又不依賴于給定指令的指令。如果給定指令的執(zhí)行出于一些原因(例如,由于高速緩存未命中)被延遲,那么后面的指令可在給定的指令完成之前執(zhí)行,這可提高執(zhí)行線程的總體性能。
[0033]如圖1所示,在一個實施例中,每個核100可具有專用的相應(yīng)的L2高速緩存105。在一個實施例中,L2高速緩存105可被配置為完全包含第一級高速緩存狀態(tài)(例如,核100內(nèi)的指令和數(shù)據(jù)高速緩存)的集相聯(lián)回寫高速緩存。為了保持與第一級高速緩存的相干性,L2高速緩存105的實施例可實現(xiàn)保持第一級高速緩存標(biāo)簽的虛擬復(fù)制的反轉(zhuǎn)目錄。L2高速緩存105可實現(xiàn)相干協(xié)議(例如,MESI協(xié)議)以保持與處理器10內(nèi)的其它高速緩存的相干性。在一個實施例中,L2高速緩存105可實施執(zhí)行的全存儲順序(TSO)模型,其中,來自同一線程的所有存儲指令必須按程序次序完成。
[0034]在各種實施例中,L2高速緩存105可包含被配置為支持高速緩存功能和性能的各種結(jié)構(gòu)。例如,L2高速緩存105可包含被配置為存儲未命中L2的請求的未命中緩沖器、被配置為暫時存儲從L3高速緩存120返回的數(shù)據(jù)的填充緩沖器、被配置為暫時存儲臟的逐出數(shù)據(jù)和窺探復(fù)錄數(shù)據(jù)的回寫緩沖器和/或被配置為存儲從L3高速緩存120接收的窺探請求的窺探緩沖器。在一個實施例中,L2高速緩存105可實現(xiàn)可嘗試分析L2未命中行為并相應(yīng)地產(chǎn)生對于L3高速緩存120的預(yù)取回請求的基于歷史的預(yù)取回器。
[0035]橫條110可被配置為管理L2高速緩存105與共享的L3高速緩存120之間的數(shù)據(jù)流動。在一個實施例中,橫條Iio可包含允許任何L2高速緩存105訪問L3高速緩存120的任何群組并且相反地允許數(shù)據(jù)從任何L3群組返回到任何L2高速緩存105的邏輯(例如,諸如多路復(fù)用器或開關(guān)結(jié)構(gòu))。即,橫條110可被配置為允許廣義的點對點通信的M到N橫條。但是,在其它的實施例中,可在L2高速緩存105與L3高速緩存120之間使用其它的互連方案。例如,可以利用網(wǎng)、環(huán)或其它適當(dāng)?shù)耐負(fù)浣Y(jié)構(gòu)。
[0036]橫條110可被配置為同時處理從L2高速緩存105到L3高速緩存120的數(shù)據(jù)請求以及從L3高速緩存120到L2高速緩存105的數(shù)據(jù)響應(yīng)。在一些實施例中,橫條110可包含用于將數(shù)據(jù)請求和/或響應(yīng)排隊的邏輯,使得請求和響應(yīng)在等待服務(wù)的同時不會阻擋其它的活動。另外,在一個實施例中,橫條110可被配置為仲裁當(dāng)多個L2高速緩存105嘗試訪問L3高速緩存120的單個群組時或者在相反的過程中可能出現(xiàn)的沖突。
[0037]L3高速緩存120可被配置為高速緩存供核100使用的指令和數(shù)據(jù)。在示出的實施例中,L3高速緩存120可被組織成可分別被獨立地尋址的8個單獨尋址的群組,使得在不存在沖突的情況下,各群組可同時向各L2高速緩存105返回數(shù)據(jù)。在一些實施例中,可通過使用集相聯(lián)或直接映射技術(shù)實現(xiàn)各單個群組。例如,在一個實施例中,L3高速緩存120可以是8兆字節(jié)(MB)高速緩存,這里,每個IMB群組是具有16字節(jié)線尺寸的16路集相聯(lián)。L3高速緩存120在一些實施例中可實現(xiàn)為回寫高速緩存,在該回寫高速緩存中,在相應(yīng)的高速緩存線被逐出之前寫入的(臟的)數(shù)據(jù)不能向系統(tǒng)存儲器寫入。但是,可以設(shè)想,在其它的實施例中,可通過任何適當(dāng)?shù)姆绞脚渲肔3高速緩存120。例如,可通過更多或更少的群組實現(xiàn)L3高速緩存120,或者,在不使用獨立可訪問的群組的方案中,它可使用其它的群組尺寸或高速緩存幾何(例如,不同線尺寸或集相聯(lián)的程度);它可使用直寫而不是回寫行為;并且,它可以或者可以不在寫入未命中上分配。L3高速緩存120配置的其它變更是可能的并且被設(shè)想。
[0038]在一些實施例中,L3高速緩存120可實現(xiàn)從橫條110到達(dá)的請求和要被發(fā)送到它的結(jié)果的隊列。另外,在一些實施例中,L3高速緩存120可實現(xiàn)被配置為存儲從存儲器接口 130到達(dá)的填充數(shù)據(jù)的填充緩沖器、被配置為存儲要被寫入到存儲器的臟的逐出數(shù)據(jù)的回寫緩沖器和/或被配置為存儲不能處理為簡單的高速緩存命中的L3高速緩存訪問(例如,L3高速緩存未命中、與較舊的未命中匹配的高速緩存訪問、諸如可要求多個高速緩存訪問的原子操作的訪問等)的未命中緩沖器。L3高速緩存120可以各種方式實現(xiàn)為單端口或多端口(即,能夠處理多個同時的讀取和/或?qū)懭朐L問)。在任意的情況下,L3高速緩存120可實現(xiàn)優(yōu)先化各種高速緩存讀取和寫入請求器之中的高速緩存訪問的仲裁邏輯。
[0039]不是所有的來自核100的外部訪問都必須通過L3高速緩存120前進(jìn)。在示出的實施例中,不可高速緩存的單元(NCU)122可被配置為處理來自核100的針對不可高速緩存的數(shù)據(jù)的請求,諸如針對來自后面關(guān)于外設(shè)接口 150和網(wǎng)絡(luò)接口 160描述的I/O裝置的數(shù)據(jù)。
[0040]存儲器接口 130可被配置為例如響應(yīng)高速緩存填充請求和數(shù)據(jù)逐出而管理L3高速緩存120與系統(tǒng)存儲器之間的數(shù)據(jù)傳送。在一些實施例中,可實現(xiàn)存儲器接口 130的多個實例,使得每個實例被配置為控制系統(tǒng)存儲器的相應(yīng)的群組。存儲器接口 130可被配置為與任何適當(dāng)類型的系統(tǒng)存儲器對接,諸如完全緩沖雙列直插存儲器模塊(FB-DIMM)、雙倍數(shù)據(jù)速率或者雙倍數(shù)據(jù)速率2、3或4同步動態(tài)隨機(jī)訪問存儲器(DDR/DDR2/DDR3/DDR4SDRAM)或Rambus? DRAM (RI)RAM?)。在一些實施例中,存儲器接口 130可被配置為支持與多種不同類型的系統(tǒng)存儲器的對接。
[0041]在示出的實施例中,處理器110還可被配置為從系統(tǒng)存儲器以外的源接收數(shù)據(jù)。系統(tǒng)互連125可被配置為提供與這些源的中心接口,以與核100、L2高速緩存105和/或L3高速緩存120交換數(shù)據(jù)。在一些實施例中,系統(tǒng)互連125可被配置為協(xié)調(diào)去往和來自系統(tǒng)存儲器的數(shù)據(jù)的直接存儲器訪問(DMA)轉(zhuǎn)移。例如,通過存儲器接口 130,系統(tǒng)互連125可在系統(tǒng)存儲器與通過網(wǎng)絡(luò)接口 160附接的網(wǎng)絡(luò)裝置之間或者在系統(tǒng)存儲器和通過外設(shè)接口 150附接的外設(shè)裝置之間協(xié)調(diào)DMA轉(zhuǎn)移。
[0042]處理器10可被配置為用于具有處理器10的其它實例或其它兼容的處理器的多處理器環(huán)境中。在示出的實施例中,相干處理器接口 140可被配置為以保留各種處理器之間的存儲器相干性的方式(例如,根據(jù)掌控存儲器事務(wù)的相干性協(xié)議)在不同的處理器之間實現(xiàn)高帶寬、直接芯片到芯片通信。
[0043]外設(shè)接口 150可被配置為在處理器10與一個或更多個外設(shè)裝置之間協(xié)調(diào)數(shù)據(jù)轉(zhuǎn)移。例如,這種外設(shè)裝置可沒有限制地包含存儲裝置(例如,基于磁或光學(xué)介質(zhì)的存儲裝置,包含硬驅(qū)動、帶驅(qū)動、⑶驅(qū)動、DVD驅(qū)動等)、顯示裝置(例如,圖形子系統(tǒng))、多媒體裝置(例如,音頻處理子系統(tǒng))或任何其它適當(dāng)?shù)念愋偷耐庠O(shè)裝置。在一個實施例中,外設(shè)接口 150可實現(xiàn)標(biāo)準(zhǔn)外設(shè)接口的一個或更多個實例。例如,外設(shè)接口 150的一個實施例可通過任意適當(dāng)數(shù)量的I/O通道實現(xiàn)根據(jù)1.χ、2.0、3.0代的外設(shè)部件接口快運(PCI ExpressTM或PCIe)或該標(biāo)準(zhǔn)的另一適當(dāng)?shù)淖兏?。但是,可以設(shè)想,可以使用任何適當(dāng)?shù)慕涌跇?biāo)準(zhǔn)或標(biāo)準(zhǔn)的組合。例如,在一些實施例中,除了 PCI ExpressTM以外或者作為其替代,外設(shè)接口 150可被配置為實現(xiàn)通用串行總線(USB)協(xié)議或IEEE1394 (Firewire?)協(xié)議的某個版本。
[0044]網(wǎng)絡(luò)接口 160可被配置為在處理器10與通過網(wǎng)絡(luò)與處理器10耦合的一個或更多個網(wǎng)絡(luò)裝置(例如,聯(lián)網(wǎng)計算機(jī)系統(tǒng)或外設(shè))之間協(xié)調(diào)數(shù)據(jù)轉(zhuǎn)移。在一個實施例中,網(wǎng)絡(luò)接口160可被配置為執(zhí)行實現(xiàn)諸如千兆以太網(wǎng)或10-千兆以太網(wǎng)的以太網(wǎng)(IEEE802.3)聯(lián)網(wǎng)標(biāo)準(zhǔn)所需要的數(shù)據(jù)處理。但是,可以設(shè)想,可以實現(xiàn)任何適當(dāng)?shù)穆?lián)網(wǎng)標(biāo)準(zhǔn),包含諸如40-千兆以太網(wǎng)和100-千兆以太網(wǎng)的即將來臨的標(biāo)準(zhǔn)。在一些實施例中,網(wǎng)絡(luò)接口 160可被配置為實現(xiàn)其它類型的聯(lián)網(wǎng)協(xié)議,諸如光纖通道、以太網(wǎng)上光纖通道(FCoE)、數(shù)據(jù)中心以太網(wǎng)、Infiniband和/或其它適當(dāng)?shù)穆?lián)網(wǎng)協(xié)議。在一些實施例中,網(wǎng)絡(luò)接口 160可被配置為實現(xiàn)多個不同的網(wǎng)絡(luò)接口端口。
[0045]動態(tài)多線程處理器核的概要
[0046]如上所述,在一個實施例中,核100中的每一個可被配置為用于多線程、亂序執(zhí)行。具體而言,在一個實施例中,核100中的每一個可被配置為執(zhí)行動態(tài)多線程。一般而言,在動態(tài)多線程下,核100的執(zhí)行資源可被配置為有效地處理表現(xiàn)不同的性能特性和資源要求的各種類型的計算工作負(fù)載。這種工作負(fù)載可跨著強(qiáng)調(diào)單線程和多線程性能的不同組合的連續(xù)體改變。
[0047]在連續(xù)體的一端,計算工作負(fù)載可包含數(shù)個獨立的任務(wù),這里,與完成任何特定的任務(wù)的速度相比,在某些性能準(zhǔn)則內(nèi)完成任務(wù)總集(例如,每秒的任務(wù)的總數(shù))在系統(tǒng)性能中是更顯著的因素。例如,在某些類型的服務(wù)器或事務(wù)處理環(huán)境中,可存在大量的單個客戶端或顧客請求(諸如網(wǎng)頁請求或文件系統(tǒng)訪問)。在本語境中,各單個請求可能不對處理器性能特別敏感。例如,相對于包含的處理器努力,請求可以是I/o束縛的而不是處理器束縛的一完成單個請求可要求主導(dǎo)完成請求所需要的總時間的I/o訪問(例如,對于相對較慢的存儲器、網(wǎng)絡(luò)或存儲裝置)。因此,與強(qiáng)調(diào)僅僅一個或少量的同時的任務(wù)的性能的處理器相比,能夠同時處理許多這種任務(wù)(例如,作為獨立執(zhí)行的線程)的處理器可在這種工作負(fù)載上表現(xiàn)更好的性能。
[0048]在連續(xù)體的另一端,計算工作負(fù)載可包含性能高度處理器敏感的各單個任務(wù)。例如,與I/O束縛相比,包含明顯的數(shù)學(xué)分析和/或變換(例如,加密、圖形處理、科學(xué)計算)的任務(wù)可能是更受處理器束縛的。這種任務(wù)可受益于強(qiáng)調(diào)單任務(wù)性能的處理器,例如通過指令級并行的推測性執(zhí)行和開發(fā)。
[0049]動態(tài)多線程代表以靈活地適于沿上述的連續(xù)體改變的工作負(fù)載的方式分配處理器資源的嘗試。在一個實施例中,核100可被配置為實現(xiàn)細(xì)粒多線程,其中,每個核可從與多個線程對應(yīng)的指令池選擇用于執(zhí)行的指令,使得來自不同線程的指令可被調(diào)度為相鄰地執(zhí)行。例如,在使用細(xì)粒多線程的核100的流水線實施例中,來自不同線程的指令可占據(jù)相鄰的管線階段,使得來自幾個線程的指令可在給定核處理循環(huán)中處于各種執(zhí)行階段中。通過使用細(xì)粒多線程,核100可被配置為有效地處理與單線程性能相比更多地依賴于同時線程處理的工作負(fù)載。[0050]在一個實施例中,核100還可被配置為實現(xiàn)亂序處理、推測性執(zhí)行、寄存器重命名和/或提高依賴于處理器的工作負(fù)載的性能的其它特征。并且,核100可被配置為在給定的時間活動執(zhí)行的線程之中動態(tài)分配各種硬件資源,使得,如果正在執(zhí)行更少的線程,那么各單個線程可能能夠利用更多的可用硬件資源的共享。這可在執(zhí)行更少的線程時導(dǎo)致單個線程性能增加,同時保持支持表現(xiàn)在性能上較少依賴于處理器的更多數(shù)量的線程的工作負(fù)載的靈活性。在各種實施例中,可在不同數(shù)量的線程之中動態(tài)分配的給定核100的資源可包含分支資源(例如,分支預(yù)測器結(jié)構(gòu))、加載/存儲資源(例如,加載/存儲緩沖器和隊列)、指令完成資源(例如,重排序緩沖器結(jié)構(gòu)和提交邏輯)、指令發(fā)出資源(例如,指令選擇和調(diào)度結(jié)構(gòu))、寄存器重命名資源(例如,寄存器映射表)和/或存儲器管理單元資源(例如,轉(zhuǎn)換后備緩沖器、頁行走(walk)資源)。
[0051]在圖2中示出被配置為執(zhí)行動態(tài)多線程的核100的一個實施例。在示出的實施例中,核100包括包含指令高速緩存205的指令取回單元(IFU)200。IFU200與存儲器管理單元(MMU) 270、L2接口 265和陷阱邏輯單元(TLU) 275耦合。IFU200另外與從選擇單元210開始并通過解碼單元215、重命名單元220、拾取單元225和發(fā)出單元230依次前進(jìn)的指令處理管線耦合。發(fā)出單元230被耦合以向數(shù)個指令執(zhí)行資源中的任一個的發(fā)出指令:執(zhí)行單元O (EXUO) 235、執(zhí)行單元I (EXUl) 240、包含數(shù)據(jù)高速緩存250的加載存儲單元(LSU)245和/或浮點/圖形單元(FGU)255。這此指令執(zhí)行資源與工作寄存器文件260耦合。另夕卜,LSU245與L2接口 265和MMU270耦合。
[0052]在以下的討論中,描述核100的示出的實施例的結(jié)構(gòu)中的每一個的示例性實施例。但應(yīng)注意,示出的資源的分割僅是可如何實現(xiàn)核100的一個例子。替代性的構(gòu)成和變更是可能的并且被設(shè)想。
[0053]指令取回單元200可被配置為向核100的剩余部分提供指令以供執(zhí)行。在一個實施例中,IFU200可被配置為選擇要取回的線程,對于所選擇的線程從指令高速緩存205取回指令并且對于下游的處理緩沖它們、響應(yīng)指令高速緩存未命中從L2高速緩存105請求數(shù)據(jù)、并且預(yù)測控制轉(zhuǎn)移指令(例如,分支)的方向和目標(biāo)。在一些實施例中,除了指令高速緩存205以外,IFU200可包含數(shù)個數(shù)據(jù)結(jié)構(gòu),諸如指令轉(zhuǎn)換備用緩沖器(ITLB)、指令緩沖器和/或被配置為存儲與線程選擇和處理相關(guān)的狀態(tài)的結(jié)構(gòu)。
[0054]在一個實施例中,在核100的每個執(zhí)行循環(huán)中,IFU200可被配置為選擇將進(jìn)入IFU處理管線的一個線程。線程選擇可考慮各種因素和條件,一些是線程特有的,而其它的是IFU特有的。例如,某些指令高速緩存活動(例如,高速緩存填充)、ITLB活動或診斷活動可禁止線程選擇,如果這些活動是在給定的執(zhí)行循環(huán)中出現(xiàn)的話。另外,各單個線程可處于影響它們的選擇合適性的特定就緒狀態(tài)。例如,存針對其存在未解決的指令高速緩存未命中的線程可能不適于選擇,直到該未命中被解決。在一些實施例中,適于參與線程選擇的這些線程可通過優(yōu)先級被分成多個組,例如,根據(jù)線程的狀態(tài)或IFU管線處理線程的能力。在這些實施例中,可以使用多種級別的仲裁以執(zhí)行線程選擇:選擇可首先以組優(yōu)先級發(fā)生,然后是根據(jù)適當(dāng)?shù)闹俨盟惴?例如,最近最少取回算法)在所選擇的組內(nèi)。但應(yīng)注意,可使用用于線程選擇的任何適當(dāng)?shù)姆桨?,包括比這里提到的方案復(fù)雜或簡單的仲裁方案。
[0055]一旦選擇了通過IFU200取回的線程,就可實際上對于所選擇的線程取回指令。為了執(zhí)行取回,在一個實施例中,IFU200可被配置為產(chǎn)生要供給到指令高速緩存205的取回地址。在各種實施例中,可根據(jù)與所選擇的線程相關(guān)的程序計數(shù)器、預(yù)測的分支目標(biāo)地址或通過一些其它的方式(例如,通過測試或診斷模式)供給的地址,來產(chǎn)生取回地址。產(chǎn)生的取回地址可然后被施加到指令高速緩存205,以確定是否存在高速緩存命中。
[0056]在一些實施例中,訪問指令高速緩存205可包含執(zhí)行取回地址轉(zhuǎn)換(例如,在物理索引和/或標(biāo)簽的高速緩存的情況下)、訪問高速緩存標(biāo)簽陣列和比較檢索的高速緩存標(biāo)簽與請求的標(biāo)簽以確定高速緩存命中狀態(tài)。如果存在高速緩存命中,那么IFU200可在緩沖器中存儲檢索的指令,以供指令管線的以后的階段使用。如果存在高速緩存未命中,那么IFU200可協(xié)調(diào)從L2高速緩存105的未命中高速緩存數(shù)據(jù)的檢索。在一些實施例中,IFU200還可被配置為在實際需要取回指令之前將指令預(yù)先取回到指令高速緩存205中。例如,在高速緩存未命中的情況下,假定以下的地址可能在最近的將來被取回,IFU200可被配置為針對請求的取回地址以及依次跟隨請求的取回地址的地址來檢索未命中數(shù)據(jù)。
[0057]在許多ISA中,指令執(zhí)行根據(jù)指令地址依次前進(jìn)(例如,由一個或更多個程序計數(shù)器反映)。但是,諸如分支、調(diào)用/返回指令或其它類型的指令的控制轉(zhuǎn)移指令(CTI)可導(dǎo)致從當(dāng)前的取回地址到非依次的地址的執(zhí)行轉(zhuǎn)移。如上所述,為了減少在確信地獲知CTI的影響之前減少由等待招致的延遲,IFU200可被配置為預(yù)測CTI (或者,在一些實施例中,是對于ISA限定的CTI的子集)的方向和目標(biāo)。在一個實施例中,IFU200可被配置為實現(xiàn)基于感知器的動態(tài)分支預(yù)測器,但是可以使用任何適當(dāng)類型的分支預(yù)測器。
[0058]為了實現(xiàn)分支預(yù)測,IFU200在各種實施例中可實現(xiàn)各種控制和數(shù)據(jù)結(jié)構(gòu),諸如跟蹤先前的分支歷史的歷史寄存器、反映預(yù)測的相對權(quán)重和強(qiáng)度的權(quán)重表和/或存儲被預(yù)測為CTI的目標(biāo)的取回地址的目標(biāo)數(shù)據(jù)結(jié)構(gòu)。并且,在一些實施例中,為了有利于分支預(yù)測,IFU200可進(jìn)一步被配置為部分地解碼(或者,預(yù)解碼)取回的指令。當(dāng)給定的線程被選擇通過IFU200取回選擇時,可以使用該給定線程的預(yù)測取回地址作為取回地址。當(dāng)CTI實際被執(zhí)行時(例如,如果CTI是條件指令,或者,如果CTI自身處于另一預(yù)測的CTI的路徑中),預(yù)測的結(jié)果可被驗證。如果預(yù)測不正確,那么沿預(yù)測路徑的取回并發(fā)出的指令可被取消。
[0059]通過以上討論的操作,IFU200可被配置為取回和保持來自一個或多個線程的、要被饋送到指令管線的剩余部分以供執(zhí)行的指令的緩沖池。一般而言,選擇單元210可被配置為選擇和調(diào)度用于執(zhí)行的線程。在一個實施例中,在核100的任意給定的執(zhí)行循環(huán)期間,選擇單元210可被配置為選擇核100同時支持的最大數(shù)量的線程(例如,8個線程)中的高達(dá)一個就緒的線程,并且,可從所選擇的線程選擇最多兩個指令供解碼單元215解碼,然而,在其它的實施例中可以使用不同數(shù)量的線程和指令。在各種實施例中,諸如分支誤預(yù)測、不可用的指令或其它條件的不同條件可影響線程是否為選擇單元210的選擇準(zhǔn)備好。為了確保線程選擇的公平,選擇單元210的一些實施例可在就緒的線程之中使用仲裁(例如,最近最少使用的算法)。
[0060]通過選擇單元210選擇的用于解碼的特定的指令可經(jīng)受解碼單元215的解碼限制;因此,在任意給定的循環(huán)中,可以選擇比最大可能數(shù)量的指令少的指令。另外,在一些實施例中,選擇單元210可被配置為向所選擇的指令分配核100的某些執(zhí)行資源,使得在它們被釋放之前,不會出于另一指令的益處而使用所分配的資源。例如,選擇單元210可對于重排序緩沖器、加載/存儲緩沖器的條目或可在指令執(zhí)行中利用的其它下游資源分配資源標(biāo)簽。[0061]一般地,解碼單元215可被配置為使由選擇單元210選擇的指令準(zhǔn)備供進(jìn)一步的處理。解碼單元215可被配置為識別指令的選定的本質(zhì)(例如,由其操作碼規(guī)定)并確定在指令中編碼的源和匯(即,目的地)寄存器,如果有的話。在一些實施例中,解碼單元215可被配置為檢測指令之中的某些依賴性,將結(jié)構(gòu)寄存器再映射到平坦寄存器空間,并且/或者將某些復(fù)雜的指令轉(zhuǎn)換成兩個或更多個更簡單的指令以供執(zhí)行。另外,在一些實施例中,解碼單元215可被配置為向隨后調(diào)度的時隙分配指令。在一個實施例中,可以限定兩個時隙O?1,這里,時隙O包含可在加載/存儲單元245或執(zhí)行單元235?240中執(zhí)行的指令,而時隙I包含可在執(zhí)行單元235?240、浮點/圖形單元255中執(zhí)行的指令,和任何分支指令。但是,在其它的實施例中,可以使用其它數(shù)量的時隙和其它類型的時隙分配,或者,可完全省略時隙。
[0062]寄存器重命名可有利于消除指令之間的某些依賴性(例如,讀后寫或“虛假”依賴性),這又可防止指令執(zhí)行的不必要的串行化。在一個實施例中,重命名單元220可被配置為通過將由指令規(guī)定的邏輯(例如,結(jié)構(gòu))目的地寄存器映射到物理寄存器將其重命名,從而解決在處理中的虛假依賴性。在一些實施例中,重命名單元220可保持反映邏輯寄存器和它們映射到的物理寄存器之間的關(guān)系的映射表。
[0063]一旦被解碼和重命名,指令就可準(zhǔn)備好被調(diào)度以供執(zhí)行。在示出的實施例中,拾取單元225可被配置為拾取準(zhǔn)備好執(zhí)行的指令并將拾取的指令發(fā)送到發(fā)出單元230。在一個實施例中,拾取單元225可被配置為保持存儲數(shù)個解碼和重命名的指令以及關(guān)于存儲的指令的相對年齡和狀態(tài)的信息的拾取隊列。在各執(zhí)行循環(huán)中,拾取單元225的本實施例可對于每個時隙拾取最多一個指令。例如,考慮指令依賴性和年齡信息,對于給定的時隙,拾取單元225可被配置為給定的時隙拾取準(zhǔn)備好執(zhí)行的最舊的指令。
[0064]在一些實施例中,拾取單元225可被配置為通過在推測性加載/存儲指令(例如,在一些情況下,連同它們的依賴性指令)被拾取之后保持它們而支持加載/存儲推測。這可有利于在加載/存儲誤推測的情況下重新播放指令。另外,在一些實施例中,例如,為了管理諸如某些加載/存儲或長延時FGU指令的同步化的下游管線危險,拾取單元225可被配置為通過使用停頓(stalI)有意地將“孔”插入管線中。
[0065]發(fā)出單元230可被配置為針對拾取的指令向各種執(zhí)行單元提供指令源和數(shù)據(jù)。在一個實施例中,發(fā)出單元230可被配置為從適當(dāng)?shù)脑醋x取源操作數(shù),這些源操作數(shù)可根據(jù)管線的狀態(tài)改變。例如,如果源操作數(shù)依賴于仍處于執(zhí)行管線中的先前的指令,那么可直接從適當(dāng)?shù)膱?zhí)行單元結(jié)果總線繞過操作數(shù)。結(jié)果還可源自代表結(jié)構(gòu)(例如,用戶可見)以及非結(jié)構(gòu)狀態(tài)的寄存器文件。在示出的實施例中,核100包含可被配置為存儲還沒有提交給結(jié)構(gòu)狀態(tài)的指令結(jié)果(例如,整數(shù)結(jié)果、浮點結(jié)果和/或條件代碼結(jié)果)并且可用作某些操作數(shù)的源的工作寄存器文件260。各種執(zhí)行單元還可保持可發(fā)源操作數(shù)的結(jié)構(gòu)整數(shù)、浮點和條件代碼狀態(tài)。
[0066]從發(fā)出單元230發(fā)出的指令可前進(jìn)到示出的執(zhí)行單元中的一個或更多個以供執(zhí)行。在一個實施例中,EXU0235和EXU1240中的每一個可類似地或者同樣地被配置為執(zhí)行在實現(xiàn)的ISA中限定的某些整數(shù)類型的指令,諸如運算、邏輯和偏移指令。在示出的實施例中,EXU0235可被配置為執(zhí)行從時隙O發(fā)出的整數(shù)指令,并且還可執(zhí)行地址計算并用于由LSU245執(zhí)行的加載/存儲指令。EXU1240可被配置為執(zhí)行從時隙I發(fā)出的整數(shù)指令以及分支指令。在一個實施例中,F(xiàn)GU指令和多循環(huán)整數(shù)指令可作為穿過EXU1240管線的時隙I指令被處理,雖然這些指令中的一些實際上可在其它功能單元中執(zhí)行。
[0067]在一些實施例中,可在執(zhí)行單元235?240內(nèi)或附近物理實現(xiàn)結(jié)構(gòu)和非結(jié)構(gòu)寄存器文件??梢栽O(shè)想,在一些實施例中,核100可包含比兩個多或少的執(zhí)行單元,并且,執(zhí)行單元可以或者可以不在功能上對稱。并且,在一些實施例中,執(zhí)行單元235?240可以不限于特定的發(fā)出時隙,或者可通過與剛剛描述的方式不同的方式被限定。
[0068]加載存儲單元245可被配置為處理諸如整數(shù)和浮點加載和存儲指令的數(shù)據(jù)存儲器基準(zhǔn),以及其它類型的存儲器基準(zhǔn)指令。LSU245可包含數(shù)據(jù)高速緩存250以及被配置為檢測數(shù)據(jù)高速緩存未命中并響應(yīng)性地從L2高速緩存105請求數(shù)據(jù)的邏輯。在一個實施例中,數(shù)據(jù)高速緩存250可被配置為所有的存儲不管是否命中數(shù)據(jù)高速緩存250都被寫入到L2高速緩存105的集相聯(lián)、直寫高速緩存。如上所述,加載/存儲指令的地址的實際計算可在整數(shù)執(zhí)行單元中的一個內(nèi)發(fā)生,但在其它的實施例中,LSU245可實現(xiàn)專用的地址產(chǎn)生邏輯。在一些實施例中,LSU245可實現(xiàn)被配置為預(yù)測和預(yù)取回可能在將來使用的數(shù)據(jù)數(shù)據(jù)的自適應(yīng)、歷史依賴硬件預(yù)取回器,以便增加在被需要時這種數(shù)據(jù)駐留于數(shù)據(jù)高速緩存250中的可能性。
[0069]在各種實施例中,LSU245可實現(xiàn)被配置為有利于存儲器操作的各種結(jié)構(gòu)。例如,LSU245可實現(xiàn)數(shù)據(jù)TLB以高速緩存虛擬數(shù)據(jù)地址轉(zhuǎn)換,以及被配置為出于一致性窺探和依賴性檢查的目的而存儲被發(fā)出但還沒有提交的加載和存儲指令的加載和存儲緩沖器。LSU245可包含被配置為存儲例如由于高速緩存未命中還不能完成的未決的加載和存儲的未命中緩沖器。在一個實施例中,LSU245可實現(xiàn)被配置為針對提交的存儲而存儲地址和數(shù)據(jù)信息的存儲隊列,以便有利于加載依賴性檢查。LSU245還可包含被配置為支持原子加載存儲指令、存儲器有關(guān)例外檢測和對于特殊用途寄存器(例如,控制寄存器)的讀寫訪問的硬件。
[0070]浮點/圖形單元255可被配置為執(zhí)行并提供在實現(xiàn)的ISA中限定的某個浮點和圖形取向指令的結(jié)果。例如,在一個實施例中,F(xiàn)GU255可實現(xiàn)符合IEEE754-1985浮點標(biāo)準(zhǔn)的單精度和雙精度浮點運算指令,諸如加法、減法、乘法、除法和某些先驗(transcendental)函數(shù)。并且,在一個實施例中,F(xiàn)GU255可實現(xiàn)由諸如VISTM2.0或VISTM3.0的SPARC?Visual Instruction Set (VISTM)結(jié)構(gòu)的某個版本限定的分割運算和圖形取向指令。在一些實施例中,F(xiàn)GU255可實現(xiàn)融合和未融合浮點乘法-加法指令。另外,在一個實施例中,F(xiàn)GU255可實現(xiàn)諸如整數(shù)乘法、除法和總體計數(shù)指令的某些整數(shù)指令。根據(jù)FGU255的實現(xiàn),可由軟件陷阱并操作或模仿一些指令(例如,一些先驗或擴(kuò)展精度指令)或指令操作數(shù)或結(jié)果情景(例如,某些反常操作數(shù)或期望的結(jié)果)。
[0071]在一個實施例中,F(xiàn)GU255可實現(xiàn)用于浮點加法/乘法、除法/平方根和圖形運算的單獨的執(zhí)行管線,而在其它的實施例中,可按不同的方式分割由FGU255實現(xiàn)的指令。在各種實施例中,根據(jù)指令類型,由FGU255實現(xiàn)的指令可被完全管線化(即,F(xiàn)GU255可能能夠?qū)τ诿總€執(zhí)行循環(huán)開始一個新的指令)、被部分管線化,或者可阻擋發(fā)出,直到完成。例如,在一個實施例中,浮點加法和乘法運算可被完全管線化,而浮點除法運算可阻擋其它的除法/平方根運算,直到完成。
[0072]FGU255的實施例還可被配置為實現(xiàn)硬件加密支持。例如,F(xiàn)GU255可包含被配置為支撐諸如先進(jìn)加密標(biāo)準(zhǔn)(AES )、數(shù)據(jù)加密標(biāo)準(zhǔn)/三重數(shù)據(jù)加密標(biāo)準(zhǔn)(DES/3DES )、Kasumi塊密碼算法、和/或Camellia塊密碼算法的加密/解碼運算的邏輯。FGU255還可包含實現(xiàn)諸如安全散列算法(SHA-1、SHA-256、SHA-384、SHA-512)或消息摘要5 (MD5)的散列或檢驗和算法的邏輯。FGU255還可被配置為實現(xiàn)諸如模乘法、減法和取冪的模運算以及各種類型的Galois域運算。在一個實施例中,F(xiàn)GU255可被配置為對于模乘法利用浮點乘數(shù)陣列。在各種實施例中,F(xiàn)GU255可實現(xiàn)上述的算法中的幾個以及沒有具體描述的其它算法。
[0073]對于不同的實施例,可通過不同的方式調(diào)用由FGU255提供的各種密碼和模運算。在一個實施例中,例如,可通過使用通過使用特殊寄存器或存儲器映射寄存器限定的控制字隊列,通過可間接地通過軟件編碼的離散的協(xié)處理器實現(xiàn)這些特征。在另一實施例中,可通過可允許軟件直接執(zhí)行這些操作的特定指令來增強(qiáng)ISA。
[0074]如上所述,指令和數(shù)據(jù)存儲器訪問可包含將虛擬地址轉(zhuǎn)換成物理地址。在一個實施例中,這種轉(zhuǎn)換可在頁級的粒度上出現(xiàn),這里,一定數(shù)量的地址位包含給定的地址頁中的偏移,并且,剩余的地址位包含頁號。例如,在使用4M頁的實施例中,64位虛擬地址和40位物理地址的實施例中,22個地址位(與4MB的地址空間對應(yīng),并且一般是最低有效地址位)可構(gòu)成頁偏移。虛擬地址的剩余42個位可與該地址的虛擬頁號對應(yīng),并且,物理地址的剩余的18個位可與該地址的物理頁號對應(yīng)。在這種實施例中,可通過將虛擬頁號轉(zhuǎn)換成特定的物理頁號同時保持頁偏移不被修改,而進(jìn)行虛擬地址到物理地址的轉(zhuǎn)換。
[0075]這種轉(zhuǎn)換映射可存儲于ITLB或DTLB中,以便在指令高速緩存205或數(shù)據(jù)高速緩存250的查找中迅速地轉(zhuǎn)換虛擬地址。在沒有在適當(dāng)?shù)腡LB中發(fā)現(xiàn)給定虛擬頁號的轉(zhuǎn)換的情況下,存儲器管理單元270可被配置為提供轉(zhuǎn)換。在一個實施例中,MMU270可被配置為管理存儲于系統(tǒng)存儲器中的一個或更多個轉(zhuǎn)換表并且響應(yīng)諸如來自ITLB或DTLB未命中的地址轉(zhuǎn)換的請求而遍歷這些表(在一些實施例中可被分層組織)。(這種遍歷也可被稱為頁表行走或硬件表行走)。在一些實施例中,如果MMU270不能導(dǎo)出有效的地址轉(zhuǎn)換,例如,如果包含必要的頁表的存儲器頁中的一個不駐留于物理存儲器中(即,頁未命中),那么MMU270可被配置為產(chǎn)生陷阱以允許存儲器管理軟件例程操作轉(zhuǎn)換。可以設(shè)想,在各種實施例中,可使用任何希望的頁尺寸。并且,在一些實施例中,可同時支持多個頁尺寸。
[0076]如上所述,核100的示出的實施例中的幾個功能單元可被配置為產(chǎn)生離核存儲器請求。例如,IFU200和LSU245可分別響應(yīng)它們各自的高速緩存未命中產(chǎn)生對于L2高速緩存105的訪問請求。另外,MMU270可被配置為例如在執(zhí)行頁表行走時產(chǎn)生存儲器請求。在示出的實施例中,L2接口 265可被配置為代表可產(chǎn)生L2訪問的各種功能單元提供向與特定的核100相關(guān)的L2高速緩存105中心化的接口。在一個實施例中,L2接口 265可被配置為保持待決的L2請求的隊列并在待決的請求之中仲裁以確定哪個或哪些請求可在給定的執(zhí)行循環(huán)中被傳輸?shù)絃2高速緩存105。例如,L2接口 265可實現(xiàn)最近最少使用或其它算法以在L2請求器之中進(jìn)行仲裁。在一個實施例中,L2接口 265還可被配置為接收從L2高速緩存105返回的數(shù)據(jù),并將這種數(shù)據(jù)引入適當(dāng)?shù)墓δ軉卧?例如,由于未命中而引向數(shù)據(jù)高速緩存250以用于數(shù)據(jù)高速緩存填充)。
[0077]在核100的一些實施例的操作過程中,可出現(xiàn)例外事件。例如,來自通過選擇單元210選擇的供執(zhí)行的給定線程的指令可能不是由核100實現(xiàn)的ISA的有效指令(例如,指令可具有不合法的操作碼),浮點指令可產(chǎn)生需要在軟件中進(jìn)一步處理的結(jié)果,MMU270可能由于頁未命中而不能完成頁表行走,可能檢測到硬件錯誤(諸如高速緩存或寄存器文件中的不可校正的數(shù)據(jù)出錯),或者,各種其它的可能的結(jié)構(gòu)限定或?qū)崿F(xiàn)特有的例外事件可能出現(xiàn)。在一個實施例中,陷阱邏輯單元275可被配置為管理這些事件的操作。例如,TLU275可被配置為接收在特定線程的執(zhí)行期間出現(xiàn)的例外事件的通知,并導(dǎo)致該線程的執(zhí)行控制被指引(vector)至與檢測的事件對應(yīng)的管理模式軟件操作器(B卩,陷阱操作器)。這種操作器可包含例如被配置為使錯誤狀態(tài)指示返回與陷阱線程相關(guān)的應(yīng)用并且可能終止應(yīng)用的非法操作碼陷阱操作器、被配置為修理不正確的結(jié)果的浮點陷阱操作器等。
[0078]在一個實施例中,TLU275可被配置為從核100內(nèi)的處理的任意處理階段沖洗來自陷阱線程的所有指令,而不擾亂其它非陷阱線程的執(zhí)行。在一些實施例中,當(dāng)來自給定線程的特定指令導(dǎo)致陷阱(與諸如硬件中斷請求的與指令執(zhí)行無關(guān)的陷阱導(dǎo)致條件相對)時,TLU275可實現(xiàn)這種陷阱作為精確的陷阱。即,TLU275可確保來自給定線程的在陷阱指令之前出現(xiàn)(以程序次序)的所有指令完成和更新結(jié)構(gòu)狀態(tài),而沒有來自給定線程的在陷阱指令次序之后出現(xiàn)(在程序中)的指令完成或更新結(jié)構(gòu)狀態(tài)。
[0079]另外,在不存在例外或陷阱請求的情況下,TLU275可被配置為啟動和監(jiān)視工作結(jié)果向結(jié)構(gòu)狀態(tài)的提交。例如,TLU275可包含協(xié)調(diào)將推測性結(jié)果轉(zhuǎn)移到結(jié)構(gòu)狀態(tài)中的重排序緩沖器(ROB)。TLU275還可被配置為協(xié)調(diào)源自分析誤預(yù)測的線程沖洗。對于沒有由于誤預(yù)測或例外而被沖洗或者另外消除的指令,指令處理可在指令結(jié)果被提交時結(jié)束。
[0080]在各種實施例中,圖2所示的單元中的任一個可實現(xiàn)一個或更多個管線段,以形成當(dāng)在IFU200中出現(xiàn)線程取回時開始并以TLU275的結(jié)果提交結(jié)束的指令執(zhí)行管線。根據(jù)分割和實現(xiàn)圖2的各種單元的功能的方式,不同的單元可需要不同數(shù)量的循環(huán)以完成它們的指令處理的部分。在一些情況下,某些單元(例如,F(xiàn)GU255)可需要可變數(shù)量的循環(huán)以完成某些類型的操作。
[0081]通過使用動態(tài)多線程,在一些情況下,與當(dāng)在線程或處理之間切換時一般需要管線沖洗的常規(guī)處理器實現(xiàn)相反,能夠使得核100的指令管線的各階段在執(zhí)行的不同階段保持來自不同線程的指令。在一些實施例中,由于資源沖突或其它的調(diào)度危險導(dǎo)致的沖洗和停頓會導(dǎo)致一些管線階段在給定的循環(huán)中沒有指令。但是,在由核100的示出的實施例使用的細(xì)粒多線程處理器實現(xiàn)中,這種沖洗和停頓會被引向管線中的單個線程,從而使得其它的線程不被干擾。另外,即使由核100處理的一個線程在明顯的時間長度上停頓(例如,由于L2高速緩存未命中),也可很容易地選擇來自另一線程的指令用于發(fā)出,由此增加總線程處理吞吐量。
[0082]但是,如上所述,支持細(xì)粒多線程執(zhí)行的核100的各種資源也可被動態(tài)重新分配,以提高具有更少數(shù)量的線程的工作負(fù)載的性能。在這些情況下,一些線程可被分配執(zhí)行資源的更大的份額,而其它的線程相應(yīng)地被分配更少的資源。但是,即使當(dāng)更少的線程分享比較大的份額的執(zhí)行資源時,核100仍可表現(xiàn)上述的靈活、線程特定的沖洗和停頓行為。
[0083]分支單元
[0084]在各種實施例中,處理器10或處理器核100可包含分支單元,該分支單元可包含與控制轉(zhuǎn)移指令的處理相關(guān)的一個或更多個電路。例如,在各種實施例中,這種分支單元可包含分支預(yù)測單元、分支執(zhí)行單元、與分支信息有關(guān)的存儲元件等。在這些實施例中的某個實施例中,分支執(zhí)行單元通過執(zhí)行CTI并然后比較CTI的實際方向和目標(biāo)與預(yù)測的方向和預(yù)測的目標(biāo)以確定CTI是否被誤預(yù)測,來確定給定線程中的最舊CTI的實際方向和目標(biāo)。如果誤預(yù)測被檢測到,那么不正確的推測性路徑上的CTI后面的所有較年輕的指令被沖洗,并且,指令取回單元被重新指引以從校正的目標(biāo)地址取回指令?;谧钆f的CTI的實際方向和目標(biāo),來更新分支預(yù)測器。
[0085]現(xiàn)在轉(zhuǎn)到圖3,表示處理器核100的一個實施例。在本實施例中,處理器核100包含分支單元380,該分支單元380又包含存儲裝置390、分支預(yù)測單元385和分支執(zhí)行單元395。分支單元380與指令取回單元200耦合,以便接收用于分支預(yù)測的CTI指令并更新指令取回單元200 (例如,在誤預(yù)測之后從校正的執(zhí)行路徑取回)。在本實施例中,分支單元380還與發(fā)出單元230和工作寄存器文件260耦合。
[0086]在亂序處理器的某些實施例中,當(dāng)CTI由執(zhí)行單元執(zhí)行時,它不是管線中的最舊指令,原因是可能存在還沒有執(zhí)行的更舊的指令。在典型的處理器實現(xiàn)中,從程序正確性觀點看,不希望在檢測到這些情景中的誤預(yù)測時沖洗管線,原因是較舊的指令仍需要在沖洗之前被執(zhí)行。因此,應(yīng)允許執(zhí)行比被誤預(yù)測CTI舊的所有指令。
[0087]并且,在亂序機(jī)器中,伴隨較舊的指令,可能存在將要在沖洗管線之前執(zhí)行的在不正確的推測性路徑上的較年輕的指令。推測性路徑上的較年輕的指令可包含CTI,這些CTI自身可導(dǎo)致誤預(yù)測。由于較年輕的指令處于推測性路徑上,因此,它們的結(jié)果是不可靠的。通過使用推測性路徑上的指令的結(jié)果更新分支預(yù)測器可導(dǎo)致分支預(yù)測器的精度降低。并且,由于推測性路徑上的誤預(yù)測CTI而沖洗管線和更新IFU是不希望的,原因是它將導(dǎo)致取回不正確的指令和損失性能。以下描述誤預(yù)測的推測性路徑上的CTI被抑制并且不允許影響分支預(yù)測、管線沖洗和指令取回的實施例。
[0088]在允許亂序執(zhí)行的多線程處理器的一個實施例中,關(guān)于來自同一線程的其它的CTI依次執(zhí)行CTI。但是,關(guān)于來自該線程的其它的指令則亂序執(zhí)行CTI。在執(zhí)行時,由于預(yù)測的方向錯誤或者由于預(yù)測的目標(biāo)錯誤,CTI誤預(yù)測被檢測到。在任意的情況下,CTI后面的指令流然后被確定為“錯誤”路徑。在這種誤預(yù)測中,在一些處理器實現(xiàn)中應(yīng)發(fā)生以下的事件:
[0089]1.CTI誤預(yù)測后面的較年輕指令處于不正確的推測性路徑上;它們應(yīng)被沖洗并且不允許更新機(jī)器的任何結(jié)構(gòu)狀態(tài)。
[0090]2.取回單元應(yīng)被重定向以在CTI之后從正確的路徑取回。
[0091]3.分支預(yù)測器應(yīng)基于誤預(yù)測CTI的結(jié)果被更新。
[0092]如上所述,在執(zhí)行比分支舊的所有指令之前,處理器不能被重定向和沖洗。這存在兩種原因。首先,在被執(zhí)行之前,還沒有出現(xiàn)由這些指令導(dǎo)致的對于機(jī)器狀態(tài)(諸如整數(shù)寄存器文件和條件代碼)的更新。第二,這些指令中的一個能夠由于例外、陷阱等重定向機(jī)器。
[0093]現(xiàn)在轉(zhuǎn)到圖4,表示分支單元380的一個實施例。在圖4的實施例中,分支執(zhí)行單元395包含對于各線程包含指示該線程的誤預(yù)測狀態(tài)的誤預(yù)測位(元件402a?402η)。在其它的實施例中,作為誤預(yù)測位的替代,或者,除了誤預(yù)測位,可以使用其它的誤預(yù)測指示。在一些實施例中,一旦來自線程的第一 CTI被檢測為被誤預(yù)測,就對于線程設(shè)定誤預(yù)測位(在各種實施例中,可稱為邏輯O或I)。
[0094]在一個實施例中,一旦CTI到達(dá)分支執(zhí)行單元395,方向和目標(biāo)計算邏輯406就計算CTI指令的實際方向和目標(biāo),并且比較邏輯408比較這些值與由分支預(yù)測單元385預(yù)測的方向和目標(biāo)。預(yù)測的方向和目標(biāo)可存儲于可位于分支單元或其它位置的存儲裝置390中,或者可另外沿執(zhí)行管線轉(zhuǎn)送到分支執(zhí)行單元395。如果比較邏輯408發(fā)現(xiàn)實際和預(yù)測方向或目標(biāo)不匹配,那么對于該CTI出現(xiàn)了誤預(yù)測,并且,設(shè)定與CTI的線程對應(yīng)的誤預(yù)測位。指令取回單元(IFU)可被指示一檢測到誤預(yù)測就開始從校正的路徑取回(基于CTI的實際目標(biāo))。在一個實施例中,通過誤預(yù)測CTI的實際方向和/或目標(biāo)更新分支預(yù)測單元385。另外,如上所述,需要從執(zhí)行管線沖洗比CTI年輕的指令,但應(yīng)允許比CTI舊的指令完成執(zhí)行。
[0095]由于對于給定的線程依次執(zhí)行所有CTI,因此在線程中不存在比執(zhí)行CTI舊的任何CTI。但是,在等待比誤預(yù)測CTI舊的所有指令執(zhí)行時,可在不正確的路徑上存在執(zhí)行的較年輕的CTI。為了處理這些CTI同時保持處理器性能,在一個實施例中,在對于給定CTI的線程設(shè)定誤預(yù)測位的同時執(zhí)行的任何給定CTI將不影響沖洗管線、將處理器重定向到新的執(zhí)行路徑或者更新分支預(yù)測器。在某些實施例中,可簡單地沖洗或忽略在設(shè)定誤預(yù)測位時執(zhí)行的任何CTI。
[0096]一旦比誤預(yù)測CTI (導(dǎo)致誤預(yù)測位被設(shè)定)舊的所有指令完成執(zhí)行,就可沖洗執(zhí)行管線,并且,誤預(yù)測位可被清除或復(fù)位。在一個實施例中,如果比誤預(yù)測CTI舊的任何指令導(dǎo)致例外、陷阱或一些其它類似的控制流程改變,那么誤預(yù)測位也被復(fù)位。
[0097]在上述的實施例中,誤預(yù)測執(zhí)行路徑上的較年輕的CTI指令將不使分支預(yù)測單元385的精度劣化,或者導(dǎo)致IFU的不正確的沖洗或更新。圖4的實施例是要例示分支單元的一個可能的實現(xiàn)特別是使用誤預(yù)測指示(例如,誤預(yù)測位402a?402η)以防止分支預(yù)測器污染。但是,圖4的特定的元件和連接被用于更好地解釋一個實施例,但決不意味著以任何方式限制其它實施例。
[0098]現(xiàn)在轉(zhuǎn)圖5,表示示出用于設(shè)定和清除誤預(yù)測指示的方法500和550的流程圖。響應(yīng)指令流中的CTI的誤預(yù)測(事件510),對于指令流設(shè)定誤預(yù)測指示(塊520)。響應(yīng)基于指令流中的至少一個較舊的指令(相對于誤預(yù)測CTI)的復(fù)位事件(事件560),清除誤預(yù)測指示(塊570)。塊560的事件可以是由指令流中的較舊的指令導(dǎo)致的陷阱或例外或指令流中的所有較舊指令的完成。指令的完成可指的是指令的結(jié)果提交給處理器的結(jié)構(gòu)狀態(tài)或者指令的執(zhí)行的完成。圖4的誤預(yù)測位402a?402η是誤預(yù)測指示的例子。由于在指令流中關(guān)于其它的CTI以程序次序出現(xiàn)CTI,因此,如果當(dāng)在給定的指令流中設(shè)定誤預(yù)測指示時出現(xiàn)CTI,那么獲知它處于不正確的執(zhí)行路徑上,并且其結(jié)果將如前面描述的那樣被抑制。
[0099]現(xiàn)在轉(zhuǎn)到圖6,表示示出分支單元的操作的一個實施例的流程圖600。在管線的執(zhí)行階段,例如,在分支執(zhí)行單元處接收CTI (事件602)。檢查誤預(yù)測指示(決定塊604)。如果誤預(yù)測指示被設(shè)定,那么已知CTI是比誤預(yù)測CTI年輕的CTI,并因此處于不正確的推測性執(zhí)行路徑上并被沖洗(塊626)。在其它的實施例中,這種CTI可被忽略或阻擋而不是被沖洗。
[0100]如果誤預(yù)測指示不被設(shè)定,那么分支的實際方向和目標(biāo)被計算(塊606)。實際的方向和目標(biāo)與例如由分支預(yù)測單元預(yù)測的CTI的預(yù)測的方向和目標(biāo)相比較(塊608)。如果CTI不被誤預(yù)測(在決定塊610中確定),那么分支預(yù)測器可通過CTI的結(jié)果被更新(塊622),并且,指令將繼續(xù)在管線中執(zhí)行(624)。在一些實施例中,由于分支預(yù)測器僅在誤預(yù)測上被更新并且另外被假定為正確,因此,不實現(xiàn)塊622。[0101]如果出現(xiàn)誤預(yù)測(在決定塊610中確定),那么誤預(yù)測指示被設(shè)定(塊612)。分支預(yù)測器通過CTI的結(jié)果被更新(塊614)。IFU被更新以從校正的執(zhí)行路徑取回(塊616)。注意,在示出的實施例中,在誤預(yù)測CTI的提交之前出現(xiàn)分支預(yù)測器的更新和IFU的更新。在一些實施例中,這允許在誤預(yù)測CTI的提交之前,IFU開始沿正確的執(zhí)行路徑取回指令并且分支預(yù)測器使用更新的CTI結(jié)果。在該點上,CTI執(zhí)行停頓,直到比CTI舊的所有指令完成執(zhí)行或者出現(xiàn)陷阱或例外(由決定塊618和626周圍的循環(huán)指示)。一旦比誤預(yù)測CTI舊的所有指令完成執(zhí)行或者出現(xiàn)陷阱或例外,管線就被沖洗(沖洗比CTI年輕的所有指令),并且,誤預(yù)測指示被清除(塊620)。在某些實施例中,一旦誤預(yù)測CTI提交其結(jié)果,就可沖洗管線。
[0102] 圖6示出分支單元操作的特定實施例,并且不意味著限制其它的實施例,而是解釋抑制不正確的推測性執(zhí)行路徑上的CTI的結(jié)果的分支單元操作的特定例子。注意,圖6的流程圖表示僅僅單個處理器線程和指令流的操作,但是,如上所述,也可被應(yīng)用于幾個線程。在多線程實施例中,用于給定的線程的誤預(yù)測指示不會影響給定線程以外的線程。在圖6的實施例中,一旦誤預(yù)測被確定(而不是等待CTI完成執(zhí)行或提交結(jié)果),緩沖器預(yù)測器就通過誤預(yù)測CTI的結(jié)果被更新(塊614)。由于在給定線程中關(guān)于其它的CTI以程序次序執(zhí)行CTI,因此,在可在該點上執(zhí)行分支預(yù)測器更新。因此,當(dāng)不設(shè)定誤預(yù)測指示時出現(xiàn)的CTI已知與分支預(yù)測器有關(guān),而不等待來自任何其它指令的信息。
[0103]示例性系統(tǒng)實施例
[0104]如上所述,在一些實施例中,圖1的處理器10可被配置為與數(shù)個外部裝置連接。在圖7中示出包括處理器10的系統(tǒng)700。在示出的實施例中,系統(tǒng)700包含與系統(tǒng)存儲器710、外設(shè)存儲裝置720和引導(dǎo)裝置730耦合的示為處理器IOa的處理器10的實例。系統(tǒng)700與網(wǎng)絡(luò)740耦合,該網(wǎng)絡(luò)740又與另一計算機(jī)系統(tǒng)750耦合。在一些實施例中,系統(tǒng)700可包含表示的裝置多于一個的實例。在各種實施例中,系統(tǒng)700可被配置為可支架安裝的服務(wù)器系統(tǒng)、獨立系統(tǒng),或者可通過任何其它適當(dāng)?shù)男问揭蛩乇慌渲?。在一些實施例中,系統(tǒng)700可被配置為客戶端系統(tǒng)而不是服務(wù)器系統(tǒng)。
[0105]在一些實施例中,系統(tǒng)700可被配置為多處理器系統(tǒng),其中,處理器IOa可任選地與處理器10的一個或更多個其它的實例耦合,這實例在圖10中示為處理器10b。例如,處理器IOa~b可被耦合以通過它們相應(yīng)的相干處理器接口 160通信。
[0106]在各種實施例中,系統(tǒng)存儲器710可包含上述的任意適當(dāng)類型的系統(tǒng)存儲器,諸如 FB-DIMM、DDR/DDR2/DDR3/DDR4SDRAM、RDRAM?、快擦寫存儲器和各種類型的 ROM等。在提供多個存儲器接口 130的處理器10的實施例中,系統(tǒng)存儲器710可包含由分離的存儲器接口控制的存儲器的多個分離的群組。并且,在一些實施例中,系統(tǒng)存儲器710可包含多個不同類型的存儲器。
[0107]在各種實施例中,外設(shè)存儲裝置720可包含對于磁、光或固態(tài)存儲介質(zhì)的支持,諸如硬驅(qū)動、光盤、非易失性RAM裝置等。在一些實施例中,外設(shè)存儲裝置720可包含更多的復(fù)雜的存儲裝置,諸如盤陣列或可通過標(biāo)準(zhǔn)的小型計算機(jī)系統(tǒng)接口(SCSI)、光纖信道接口、Firewire? (IEEE1394)接口或另一適當(dāng)?shù)慕涌谂c處理器?ο耦合的存儲區(qū)域網(wǎng)絡(luò)(san)。另外,可以設(shè)想,在其它的實施例中,諸如多媒體裝置、圖形/顯示裝置、標(biāo)準(zhǔn)輸入/輸出裝置等的任何其它適當(dāng)?shù)耐庠O(shè)裝置可與處理器10耦合。在一個實施例中,外設(shè)存儲裝置720可通過圖1的外設(shè)接口 150與處理器10耦合。[0108]如上所述,在一個實施例中,引導(dǎo)裝置730可包含被配置為諸如從通電復(fù)位狀態(tài)協(xié)調(diào)處理器10的初始化和引導(dǎo)的FPGA或ASIC的裝置。另外,在一些實施例中,引導(dǎo)裝置730可包含被配置為允許訪問諸如處理器10的調(diào)試或測試模式的管理功能的次級計算機(jī)系統(tǒng)。
[0109]例如,網(wǎng)絡(luò)740可包含用于互連計算機(jī)系統(tǒng)的任何適當(dāng)?shù)难b置、介質(zhì)或協(xié)議,諸如有線或無線以太網(wǎng)。在各種實施例中,網(wǎng)絡(luò)740可包含局域網(wǎng)絡(luò)(LAN)、廣域網(wǎng)絡(luò)(WAN)、電信網(wǎng)絡(luò)或其它適當(dāng)類型的網(wǎng)絡(luò)。在一些實施例中,計算機(jī)系統(tǒng)750可在配置上與示出的系統(tǒng)700類似或相同,而在其它的實施例中,計算機(jī)系統(tǒng)750可基本上以不同的方式被配置。例如,計算機(jī)系統(tǒng)750可以是服務(wù)器系統(tǒng)、基于處理器的客戶端系統(tǒng)、無狀態(tài)“薄”客戶端系統(tǒng)、移動裝置等。在一些實施例中,處理器10可被配置為通過圖1的網(wǎng)絡(luò)接口 160與網(wǎng)絡(luò)740通信。
[0110]雖然以上描述了特定的實施例,但這些實施例不是要限制本公開的范圍,甚至在關(guān)于特定的特征描述單個實施例的情況下也是如此。除非另外陳述,否則,在本公開中提供的特征的例子是解釋性的,不是限制性的。以上的描述要覆蓋對于本領(lǐng)域技術(shù)人員來說十分明顯的受益于本公開的所有這些替代方案、修改和等同。
[0111]本公開的范圍包含這里公開的任何特征或特征的組合(明確地或者隱含地)或者其任何歸納,不管它是否解決這里提到的問題中的任一個或全部。因此,可在對于特征的任何這種組合訴求本申請(或者要求其優(yōu)先權(quán)的申請)時構(gòu)想新的權(quán)利要求。特別地,參照所附的權(quán)利要求,獨立權(quán)利要求的特征可與從屬權(quán)利要求的特征組合,并且,各獨立的權(quán)利要求的特征可通過任何適當(dāng)?shù)姆绞浇M合,并且不僅僅是在所附的權(quán)利要求中列舉的特定組
口 O
【權(quán)利要求】
1.一種裝置,包括: 被配置為以程序次序執(zhí)行指令流內(nèi)的控制轉(zhuǎn)移指令(CTI)的處理元件,其中,所述處理元件包含: 被配置為響應(yīng)所述指令流中的控制轉(zhuǎn)移指令(CTI)的誤預(yù)測而設(shè)定誤預(yù)測指示的分支單元,其中,所述分支單元被配置為響應(yīng)基于所述指令流中的比誤預(yù)測CTI舊的至少一個指令的復(fù)位事件而將所述誤預(yù)測指示復(fù)位。
2.根據(jù)權(quán)利要求1的裝置,其中,所述指令流中的CTI以外的指令以程序亂序被執(zhí)行。
3.根據(jù)權(quán)利要求1的裝置,其中,所述復(fù)位事件包含完成所述指令流中的比誤預(yù)測CTI舊的所有未完成的指令。
4.根據(jù)權(quán)利要求1的裝置,其中,所述復(fù)位事件包含由所述指令流中的比誤預(yù)測CTI舊的指令導(dǎo)致的例外或陷阱。
5.根據(jù)權(quán)利要求1的裝置,其中,所述處理元件包含執(zhí)行管線,其中,所述裝置被配置為響應(yīng)當(dāng)不設(shè)定所述誤預(yù)測指示時出現(xiàn)的CTI誤預(yù)測而沖洗所述執(zhí)行管線中的指令,并且其中所述裝置被配置為響應(yīng)當(dāng)設(shè)定了所述誤預(yù)測指示時出現(xiàn)的CTI誤預(yù)測而不沖洗所述執(zhí)行管線中的指令。
6.根據(jù)權(quán)利要求1的裝置,其中,所述處理元件被配置為響應(yīng)當(dāng)不設(shè)定所述誤預(yù)測指示時出現(xiàn)的CTI誤預(yù)測而從更新的執(zhí)行路徑取回指令,并且其中所述裝置被配置為響應(yīng)當(dāng)設(shè)定了所述誤預(yù)測指示時出現(xiàn)的CTI誤預(yù)測而不從更新的執(zhí)行路徑取回指令。
7.根據(jù)權(quán)利要求1的裝置,其中,所述處理元件被配置為響應(yīng)當(dāng)不設(shè)定所述誤預(yù)測指示時出現(xiàn)的CTI而更新分支預(yù)測器,并且其中所述裝置被配置為響應(yīng)當(dāng)設(shè)定了所述誤預(yù)測指示時出現(xiàn)的CTI而不更新所述分支預(yù)測器。
8.根據(jù)權(quán)利要求1的裝置,其中,所述處理元件被配置為使得當(dāng)設(shè)定了所述誤預(yù)測指示時出現(xiàn)的CTI誤預(yù)測不導(dǎo)致管線沖洗、從更新的執(zhí)行路徑的指令取回或?qū)τ诜种ьA(yù)測器的更新。
9.根據(jù)權(quán)利要求1的裝置,其中,所述處理元件被配置為執(zhí)行來自多個線程的指令流,并且其中所述裝置被配置為對于多個線程中的每個線程同時存儲誤預(yù)測指示。
10.一種處理器,包括: 被配置為響應(yīng)指令流中的控制轉(zhuǎn)移指令(CTI)的誤預(yù)測而設(shè)定誤預(yù)測指示的分支單元,其中,所述分支單元被配置為存儲可用于做出由所述處理器取回的CTI的預(yù)測的分支預(yù)測信息; 其中,所述分支單元被配置為當(dāng)不設(shè)定所述誤預(yù)測指示時對于到達(dá)處理器的執(zhí)行階段的CTI更新分支預(yù)測信息,但當(dāng)設(shè)定了誤預(yù)測指示時對于到達(dá)執(zhí)行階段的CTI則不更新分支預(yù)測信息。
11.根據(jù)權(quán)利要求10的處理器,其中,所述處理器被配置為在確定CTI是否被誤預(yù)測之后但在提交CTI的結(jié)果之前更新所述分支預(yù)測信息。
12.根據(jù)權(quán)利要求10的處理器,其中,所述處理器被配置為使得當(dāng)設(shè)定了所述誤預(yù)測指示時在所述指令流中出現(xiàn)的CTI誤預(yù)測不導(dǎo)致管線沖洗或從更新的執(zhí)行路徑的指令取回。
13.根據(jù)權(quán)利要求10的處理器,其中,所述處理器被配置為響應(yīng)基于所述指令流中的比誤預(yù)測CTI舊的至少一個指令的復(fù)位事件將所述誤預(yù)測指示復(fù)位;并且 其中所述處理器被配置為推遲響應(yīng)誤預(yù)測CTI延遲而沖洗所述處理器的管線到出現(xiàn)復(fù)位事件之后。
14.根據(jù)權(quán)利要求10的處理器,其中,所述處理器被配置為執(zhí)行來自多個線程的指令流,其中所述處理器被配置為同時存儲多個誤預(yù)測指示,每個誤預(yù)測指示與所述多個線程中的一個線程對應(yīng)。
15.根據(jù)權(quán)利要求14的處理器,其中,所述多個誤預(yù)測指示的每個誤預(yù)測指示不影響與其對應(yīng)的線程以外的線程的執(zhí)行。
16.—種方法,包括: 處理器響應(yīng)指令流中的第一控制轉(zhuǎn)移指令(CTI)的誤預(yù)測而設(shè)定誤預(yù)測指示,其中,所述設(shè)定包含基于第一 CTI的誤預(yù)測而更新在所述處理器中的分支單元的分支預(yù)測信息,其中,所述更新在第一 CTI的提交之前被執(zhí)行, 當(dāng)設(shè)定了所述誤預(yù)測指示時,響應(yīng)所述指令流中的第二 CTI到達(dá)處理器的管線的執(zhí)行階段,所述處理器防止基于第二 CTI更新所述分支預(yù)測信息。
17.根據(jù)權(quán)利要求16的方法,還包括: 所述處理器基于所述指令流中的比第一 CTI舊的至少一個指令來清除所述誤預(yù)測指示; 當(dāng)清除了所述誤預(yù)測指示時,響應(yīng)所述指令流中的第三CTI到達(dá)所述處理器的管線的執(zhí)行階段,所述處理器基于第三CTI更新分支預(yù)測信息。
18.根據(jù)權(quán)利要求16的方法,其中,當(dāng)設(shè)定了所述誤預(yù)測指示時出現(xiàn)的CTI誤預(yù)測不導(dǎo)致管線沖洗或從更新的執(zhí)行路徑的指令取回。
19.根據(jù)權(quán)利要求16的方法,其中,當(dāng)清除了誤預(yù)測指示時出現(xiàn)的CTI誤預(yù)測導(dǎo)致所述誤預(yù)測指示被設(shè)定、從校正的執(zhí) 行路徑取回指令、對分支預(yù)測器的更新和對指令流中的指令的沖洗。
20.根據(jù)權(quán)利要求16的方法,其中,所述處理器被配置為執(zhí)行來自多個線程的指令,并且其中所述多個線程的每個特定線程的CTI關(guān)于所述特定線程中的其它CTI以程序次序被執(zhí)行。
【文檔編號】G06F9/38GK103620555SQ201280031310
【公開日】2014年3月5日 申請日期:2012年5月14日 優(yōu)先權(quán)日:2011年5月13日
【發(fā)明者】C·H·奧爾森, M·K·沙 申請人:甲骨文國際公司