專利名稱:用于改進(jìn)處理器中分支預(yù)測(cè)的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本申請(qǐng)一般涉及數(shù)據(jù)處理,并且特別地,涉及編譯源代碼以生成可執(zhí) 行代碼。更特別地,本申請(qǐng)涉及一種編譯方法,用于改進(jìn)無硬件分支預(yù)測(cè) 但卻支持分支提示指令的處理器中的分支預(yù)測(cè)。
背景技術(shù):
在單元處理器(cell processor)體系結(jié)構(gòu)中,協(xié)同處理器(synergistic processor)元件被嚴(yán)重流水線化并且分支誤預(yù)測(cè)損失高,更明確地說是18 個(gè)循環(huán)(cycles),另外,硬件的分支預(yù)測(cè)策略是簡(jiǎn)單假設(shè)所有的分支,包 括無條件分支,均不被采納。換句話說,僅在流水線的后期才檢測(cè)分支, 此時(shí)在行進(jìn)中(inflight)已經(jīng)存在多個(gè)落空(fall through )指令,這種設(shè) 計(jì)的目的是為了獲得降低的硬件復(fù)雜度、較快的時(shí)鐘周期,以及增加的可 預(yù)測(cè)性,這對(duì)于多媒體應(yīng)用來說是重要的。
由于執(zhí)行采納分支(taken branch)比落空路徑昂貴得多,因此編譯 器首先試圖通過本領(lǐng)域技術(shù)人員已知的多種技術(shù)來消除采納分支。 zy^/^"-e/w (如果-那么-否則)構(gòu)造的一種有效方法是通過使用選擇指 令的"if-conversions (如果-轉(zhuǎn)換)"。另 一種方法是確定程序中分支的 可能結(jié)果(通過編譯器分析或經(jīng)由用戶指示的方式),以及執(zhí)行代碼重構(gòu) 技術(shù)來從落空路徑中移出冷路徑(cold path)。
然而,實(shí)際上^艮多采納分支在諸如函數(shù)調(diào)用、函數(shù)返回、循環(huán)閉合分 支,以及一些無條件分支的情況下是不能夠被消除的.為了促進(jìn)這種可預(yù) 測(cè)采納分支的執(zhí)行,協(xié)同處理器元件提供了分支提示指令,稱為"對(duì)分支 的提示(Hint for Branch)"或A6r。該指令指定了分支的位置以及代碼執(zhí) 行中給定的被提示分支所期望的目標(biāo)地址,當(dāng)足夠早地調(diào)度分支指令提示
時(shí)(至少在目標(biāo)分支前的11個(gè)循環(huán)),^儲(chǔ)器預(yù)取來自被提示分支目標(biāo) 的指令,并且將其插入到緊接在被提示分支之后的指令流中。當(dāng)正確提示
分支時(shí),分支延遲實(shí)際上是一個(gè)循環(huán);否則,正常的分支誤預(yù)測(cè)損失適用。 所期望的分支結(jié)果可以通過分支仿形(profiling)來測(cè)量、通過直觀 推斷集合來靜態(tài)地估計(jì),或者通過狄,"內(nèi)置(built-ins)或狄ecj^《范 型(paradigms )由用戶來提供。開發(fā)者或編輯者然后可以在高于給定閾的、 已知或靜態(tài)預(yù)測(cè)的采納概率的情況下為分支插入分支提示。無條件分支也 是分支提示指令的良好候選。在函數(shù)返回、經(jīng)由指示器的函數(shù)調(diào)用,以及 產(chǎn)生間接分支的所有其它情況前使用分支提示指令的間接形式。
對(duì)于循環(huán)閉合分支,編譯器可以將分支提示指令移到該循環(huán)外來消除 提示指令的重復(fù)執(zhí)行。循環(huán)是當(dāng)條件為真時(shí)被重復(fù)執(zhí)行的一組指令。該類 型的優(yōu)化是有可能的,因?yàn)槊看沃辉试S一個(gè)顯著的(outstanding)分支提 示,并且該提示在被另一提示替換之前保持有效.由于分支提示指令通過 相關(guān)的、8位帶符號(hào)的立即字段(immediate field)來指示其所提示的分支 的地址,因此分支提示指令及其分支指令必須在彼此的256個(gè)指令內(nèi)。
因而,只可以將分支提示指令從小循環(huán)移出到中等大小的循環(huán)。此外, 僅在循環(huán)不含控制流或其它被提示分支時(shí),才可以將提示移到循環(huán)外,因 為每次至多只可以有一個(gè)顯著的提示。盡管循環(huán)閉合分支是用于提示的固 有候選,然而循環(huán)外的分支隨后將總是蒙受分支誤預(yù)測(cè)損失。
發(fā)明內(nèi)容
文中所描述的示例性實(shí)施例認(rèn)識(shí)到了現(xiàn)有技術(shù)的缺點(diǎn)并且在編譯器中 提供了一種機(jī)制,用于改進(jìn)支持分支提示指令的處理器中的分支預(yù)測(cè)。所 述編譯器接收指令序列,其中所述指令序列包括循環(huán)。所述編譯器插入寄 存器形式(register form)分支提示指令,所述分支提示指令標(biāo)識(shí)循環(huán)閉 合分支語句及其所期望的目標(biāo)地址.所述編譯器插入比較和選擇指令序列, 其在分支采納的目標(biāo)地址與落空的目標(biāo)地址之間進(jìn)行邏輯選擇.所述選擇 指令提供所選擇的值作為分支目標(biāo)地址。在執(zhí)行時(shí),對(duì)分支的提示或A6r將使用所選擇的值來標(biāo)識(shí)實(shí)際的目標(biāo)地址。
在所附權(quán)利要求中闡述了認(rèn)為是本發(fā)明特色的新穎性特征。然而,結(jié) 合附圖閱讀時(shí),通過參照下文的詳細(xì)描述,將最好地理解示例性實(shí)施例以
及使用的優(yōu)選模式,及其其它目的和優(yōu)點(diǎn),其中
圖l是其中可以實(shí)現(xiàn)示例性實(shí)施例的方面的數(shù)據(jù)處理系統(tǒng)的框圖; 圖2描繪了其中可以實(shí)現(xiàn)說明性實(shí)施例的方面的Cell (單元)BE芯片
的示例圖3是依照示例性實(shí)施例說明了協(xié)同處理器元件中的指令處理的例子 的框圖4A-1、 4A-2、 4B-1、 4B-2、 4C-1和4C-2是依照說明性實(shí)施例說明 了用于循環(huán)的代碼的示圖;以及
圖5是依照示例性實(shí)施例說明了用于改進(jìn)支持分支提示指令的處理器 中分支預(yù)測(cè)的編譯器的操作的流程圖。
具體實(shí)施例方式
提供圖1-5作為其中可以實(shí)現(xiàn)示例性實(shí)施例的方面的數(shù)據(jù)處理環(huán)境的 示例圖。應(yīng)當(dāng)理解,圖l-5僅僅是示例性的且并不旨在斷言或隱含關(guān)于其 中可以實(shí)現(xiàn)特征或?qū)嵤├沫h(huán)境的任何限制。在不背離說明性實(shí)施例的精 神和范圍的情況下,可以對(duì)所描述的環(huán)境進(jìn)行很多修改。
現(xiàn)參照附圖,圖l是其中可以實(shí)現(xiàn)示例性實(shí)施例的方面的數(shù)據(jù)處理系 統(tǒng)的框圖。數(shù)據(jù)處理系統(tǒng)100是其中可以置有實(shí)現(xiàn)示例性實(shí)施例的過程的 代碼或指令的計(jì)算機(jī)的例子。在所描述的例子中,數(shù)據(jù)處理系統(tǒng)100采用 包括I/O橋接器104的集線器體系結(jié)構(gòu)。處理器106直接連接至主存儲(chǔ)器 108,同時(shí)處理器106還連接至I/O橋接器104。
在所描述的例子中,視頻適配器110、局域網(wǎng)(LAN)適配器112、 音頻適配器116、只讀存儲(chǔ)器(ROM) 124、硬盤驅(qū)動(dòng)器(HDD) 126、
DVD-ROM驅(qū)動(dòng)器130、通用串行總線(USB)端口和其它通信端口 132 可以連接至I/0橋接器104,舉例來說,ROM124可以是閃速二進(jìn)制輸入 /輸出系統(tǒng)(BIOS)。硬盤驅(qū)動(dòng)器126和DVD-ROM驅(qū)動(dòng)器130可以使用 例如集成驅(qū)動(dòng)器電子電路(IDE)或串行高級(jí)才支術(shù)配件(SATA)接口。
操作系統(tǒng)或?qū)iT化程序可以在處理器106上運(yùn)行并且用于協(xié)調(diào)和提供 對(duì)圖1中數(shù)據(jù)處理系統(tǒng)100內(nèi)的各種組件的控制。用于操作系統(tǒng)或?qū)iT化 程序的指令位于諸如硬盤驅(qū)動(dòng)器126的存^i殳備上,并且可以被裝栽到主 存儲(chǔ)器108中由處理器106執(zhí)行。使用計(jì)算機(jī)實(shí)現(xiàn)的指令,可以由處理器 106來執(zhí)行示例性實(shí)施例的過程,舉例來說,該指令可以位于諸如主存儲(chǔ) 器108、存儲(chǔ)器124的存儲(chǔ)器中,或者位于諸如硬盤驅(qū)動(dòng)器126或 DVD-ROM驅(qū)動(dòng)器130的一個(gè)或多個(gè)外圍設(shè)備中。
本領(lǐng)域的普通技術(shù)人員可以理解,圖1中的硬件可以取決于實(shí)現(xiàn)而變 化。除了圖l所描述的硬件或者代替圖l所描述的硬件,可以使用其它的 內(nèi)部硬件或外圍設(shè)備,例如閃速存儲(chǔ)器、等效非易失性存儲(chǔ)器或光盤驅(qū)動(dòng) 器等。再者,本發(fā)明的過程可以應(yīng)用于多處理器數(shù)據(jù)處理系統(tǒng)。
例如,數(shù)據(jù)處理系統(tǒng)100可以是通用計(jì)算機(jī)、視頻游戲控制臺(tái)或其它
娛樂設(shè)備,或者服務(wù)器數(shù)據(jù)處理系統(tǒng)。圖1中所描述的例子以;sui述例子
并不意味著暗示體系結(jié)構(gòu)的限制.例如,數(shù)據(jù)處理系統(tǒng)100還可以是個(gè)人 數(shù)字助理(PDA)、平板計(jì)算機(jī)、膝上型計(jì)算機(jī)或電話設(shè)備。
圖2描述了其中可以實(shí)現(xiàn)說明性實(shí)施例的方面的Cell寬帶引擎
(Broadband Engine, BE)芯片的示例圖。Cell BE芯片200是朝分布式 處理定向的單片多處理器實(shí)現(xiàn),該分布式處理的目標(biāo)是多媒體應(yīng)用,例如 游戲控制臺(tái)、桌面系統(tǒng)和服務(wù)器。
Cell BE芯片200可以在邏輯上分成以下功能組件Power PC⑧處理 器元件(PPE) 201、協(xié)同處理器單元(SPU) 210、 211和212,以及存儲(chǔ) 流控制器(MFC) 205、 206和207。盡管通過舉例示出了協(xié)同處理器元件
(SPE) 202、 203和204以及PPE 201,然而還可以支持任何類型的處理 器元件。示例性Cell BE芯片200實(shí)現(xiàn)包括一個(gè)PPE 201和八個(gè)SPE,盡
管圖2僅示出了三個(gè)SPE 202、 203和204。 CELL處理器的SPE是設(shè)計(jì) 用于加速介質(zhì)和數(shù)據(jù)流工作負(fù)荷的新處理器體系結(jié)構(gòu)的第一實(shí)現(xiàn)。
Cell BE芯片200可以是單芯片系統(tǒng),以便可以在單個(gè)微處理器芯片上 提供圖2中所描述的每一個(gè)元件。此外,Cell BE芯片200是不同種類的處 理環(huán)境,其中SPU 210、 211和212中的每一個(gè)均可以接收來自系統(tǒng)中每 一個(gè)其它的SPU的不同指令。此外,用于SPU 210、 211和212的指令集 不同于Power PC⑧處理器單元(PPU) 208的指令集,例如,當(dāng)SPU 210、 211和212執(zhí)行向量化指令時(shí),PPU 208可以在PowerTM體系結(jié)構(gòu)中執(zhí)行 基于精簡(jiǎn)指令集計(jì)算機(jī)(RISC)的指令。
每個(gè)SPE包括具有其自己的本地存儲(chǔ)(LS)區(qū)域213、 214或215的 一個(gè)SPU 210、 211或212,以及具有關(guān)聯(lián)的存儲(chǔ)管理單元(MMU) 216、 217或218的專用MFC 205、 206或207,以使J^和處理存儲(chǔ)保護(hù)并且訪 問許可信息。再次,盡管通過舉例示出了 SPU,還可以支持任何類型的處 理器單元。另外,CellBE芯片200實(shí)現(xiàn)元件互連總線(EIB) 219和其它 的I/O結(jié)構(gòu)以促進(jìn)片內(nèi)(on-chip)和外部數(shù)據(jù)流。
EIB219充當(dāng)PPE210和SPE202、 203和204的主片內(nèi)總線。另外, EIB219連接至專用于片外(off-chip)訪問的其它片內(nèi)接口控制器。片內(nèi) 接口控制器包括提供兩個(gè)極限數(shù)據(jù)速率I/O (XIO)存儲(chǔ)信道221和222 的存儲(chǔ)接口控制器(MIC) 220,以及為Cell BE 200提供兩個(gè)高速外部I/O 信道和內(nèi)部中斷控制的CellBE接口單元(BEI) 223。將BEI223實(shí)現(xiàn)為 總線接口控制器(BIC,標(biāo)記為BIC0&BIC1) 224和225以及I/O接口控 制器(IOC) 226。兩個(gè)高速外部I/O信道連接至Redwood Rambus Asic Cell (RRAC)接口的兩極(polarity),其為Cell BE 200提供了靈活的輸 入和輸出(FlexIO_0&FlexIO_l) 253。
每個(gè)SPU 210、 211或212均具有對(duì)應(yīng)的LS區(qū)域213、 214或215以 及協(xié)同執(zhí)行單元(SXU) 254、 255或256。每個(gè)單獨(dú)的SPU 210、 211或 212可以僅執(zhí)行來自其關(guān)聯(lián)的LS區(qū)域213、 214或215內(nèi)的指令(包括數(shù) 據(jù)裝載和存儲(chǔ)操作),為此,經(jīng)由SPU 210、 211和212的專用MFC 205、
206和207, MFC直接存儲(chǔ)器訪問(DMA)操作進(jìn)行向系統(tǒng)中其它地方的 存儲(chǔ)器傳送所有所需的數(shù)據(jù)或者從系統(tǒng)中其它地方的存儲(chǔ)器傳送所有所需 的數(shù)據(jù).
使用LS地址,運(yùn)行在SPU 210、 211或212上的程序僅訪問其自己的 LS區(qū)域213、 214或215。然而,還向每個(gè)SPU的LS區(qū)域213、 214或 215分派了整個(gè)系統(tǒng)的存儲(chǔ)器映射(memory map)內(nèi)的實(shí)地址(RA)。 RA是設(shè)備將為之響應(yīng)的地址。在Power PC⑧中,應(yīng)用通過有效地址(EA) 訪問存儲(chǔ)位置(或設(shè)備),然后該有效地址被映射到存儲(chǔ)位置(或設(shè)備) 的虛擬地址(VA),其隨后被映射到RA。 EA是由訪問存儲(chǔ)器和/或設(shè)備 的應(yīng)用使用的地址。該映射允許操作系統(tǒng)分配比系統(tǒng)中在物理上更多的存 儲(chǔ)器(即,通過VA訪問的虛擬存儲(chǔ)器項(xiàng)(the term virtual memory ))。 存儲(chǔ)器映射是系統(tǒng)中所有設(shè)備(包括存儲(chǔ)器)及其對(duì)應(yīng)RA的列表。存儲(chǔ) 器映射是標(biāo)識(shí)設(shè)備或存儲(chǔ)器將為之響應(yīng)的RA的實(shí)地址空間的映射。
這允許特權(quán)軟件將LS區(qū)域映射到這樣的過程的EA,即該過程促進(jìn)一 個(gè)SPU的LS與另一 SPU的LS區(qū)域之間進(jìn)行直接存儲(chǔ)器訪問傳送。PPE 201還可以使用EA直接訪問任何SUP的LS區(qū)域'在Power PC⑧中存在 三種狀態(tài)(問題(problem)、特權(quán)(privileged)和管理體(hypervisor))。 特權(quán)軟件是以特權(quán)或管理體狀態(tài)運(yùn)行的軟件.這些狀態(tài)具有不同的訪問特 權(quán)。例如,特權(quán)軟件可以對(duì)用于將實(shí)存儲(chǔ)器映射到應(yīng)用的EA的數(shù)據(jù)結(jié)構(gòu) 寄存器進(jìn)行訪問。問題狀態(tài)是當(dāng)運(yùn)行應(yīng)用時(shí)處理器通常所處的狀態(tài),并且 處理器通常被禁止訪問系統(tǒng)管理資源(例如用于映射實(shí)存儲(chǔ)器的數(shù)據(jù)結(jié) 構(gòu)),
MFC DMA數(shù)據(jù)命令總是包括一個(gè)LS地址和一個(gè)EA。 DMA命令將 存儲(chǔ)器從一個(gè)位置復(fù)制到另 一位置。在這種情況下,MFC DMA命令在EA 與LS地址之間復(fù)制數(shù)據(jù)。LS地址直接尋址對(duì)應(yīng)于該MFC命令隊(duì)列的關(guān) 聯(lián)SPU 210、 211或212的LS區(qū)域213、 214或215,命令隊(duì)列是MFC命 令的隊(duì)列,存在M來自SPU的命令的一個(gè)隊(duì)列以及保存來自PXU或其 它設(shè)備的命令的一個(gè)隊(duì)列。然而,可以安排或映射EA來訪問系統(tǒng)中任何
其它的存儲(chǔ)器存儲(chǔ)區(qū)域,包括其它SPE202、 203和204的LS區(qū)域213、 214和215。
在諸如圖2所示系統(tǒng)的系統(tǒng)中,由PPU308、 PPE201、 SPE202、 203 和204,以及I/O設(shè)備(未示出)共享主存儲(chǔ)器(未示出)。保存在主存 儲(chǔ)器中的所有信息對(duì)于系統(tǒng)中所有的處理器和i殳備來說是可視的。程序使 用EA訪問主存儲(chǔ)器。由于MFC代理命令隊(duì)列、控制和狀態(tài)設(shè)施具有RA 并且使用EA來映射該RA,因此使用主存儲(chǔ)器與關(guān)聯(lián)的SPE 202、 203和 204的本地存儲(chǔ)器之間的EA,動(dòng)力處理器(powerprocessor)元件有可能 啟動(dòng)DMA操作。
例如,當(dāng)在SPU210、 211或212上運(yùn)行的程序需要訪問主存儲(chǔ)器時(shí), SPU程序生成具有適當(dāng)EA和LS地址的DMA命令并且將其置于其MFC 205、 206或207命令隊(duì)列中。在由SPU程序?qū)⒚钪糜陉?duì)列中之后,MFC 205、 206或207執(zhí)行命令并且在LS區(qū)域與主存儲(chǔ)器之間傳送所需要的數(shù) 據(jù)。MFC 205、 206或207為其它i殳備(例如PPE 201)所生成的命令提 供第二代理命令隊(duì)列.MFC代理命令隊(duì)列通常用于在啟動(dòng)SPU之前將程 序存儲(chǔ)在本地存儲(chǔ)器中。MFC代理命令還可以用于上下文存儲(chǔ)操作.
EA地址提供具有可以通過MMU轉(zhuǎn)換成RA的地址的MFC。轉(zhuǎn)換過 程允許對(duì)系統(tǒng)存儲(chǔ)器進(jìn)行虛擬化以及對(duì)實(shí)地址空間中的存儲(chǔ)器和設(shè)備進(jìn)行 訪問保護(hù)。由于LS區(qū)域被映射到實(shí)地址空間,因此EA還可以訪問所有 的SPU LS區(qū)域。
Cell BE芯片200上的PPE 201包括64位PPU 208以及Power PC 存儲(chǔ)子系統(tǒng)(PPSS) 209。 PPU 208含有處理器執(zhí)行單元(PXU) 229、 1 級(jí)(LI )高速緩存230、 MMU 231和替換管理表(RMT ) 232。 PPSS 209 包括可高速緩存接口單元(CIU) 233、不可高速緩存單元(NCU) 234、 2 級(jí)(L2)高速緩存228、 RMT235和總線接口單元(BIU) 227, BIU 227 將PPSS 209連接到EIB 219。
SPU 210、 211或212以及MFC 205、 206和207通過具有容量的單向 信道彼此通信。信道實(shí)際上是FIFO,使用34個(gè)SPU指令之一來對(duì)其進(jìn)行
訪問;讀信道(RDCH)、寫信道(WRCH),以及讀信道記數(shù)(RDCHCNT)。 RDCHCNT返回信道中的信息量。該容量是FIFO的深度。信道從MFC 205、 206和207向SPU 210、 211和212傳輸數(shù)據(jù)以及從SPU 210、 211 和212向MFC 205 、206和207傳輸數(shù)據(jù)。BIU 239 、240和241將MFC 205、 206和207連接到EIB 219。
MFC 205、 206和207為SPU 210、 211和212提供了兩個(gè)主要功能。 MFC 205、 206和207在SPU 210、 211或212、 LS區(qū)域213、 214或215 以及主存儲(chǔ)器之間移動(dòng)數(shù)據(jù)。另外,MFC 205、 206和207在SPU 210、 211和212以及系統(tǒng)中的其它設(shè)備之間提供同步設(shè)施。
MFC 205、 206和207實(shí)現(xiàn)具有四個(gè)功能單元直接存儲(chǔ)器訪問控制 器(DMAC) 236、 237和238、 MMU216、 217和218、原子單元(ATO) 242、 243和244、 RMT 245、 246和247,以及BIU 239、 240和241。 DMAC 236、 237和238維持和處理MFC命令隊(duì)列(MFC CMDQ)(未示出), 其包括MFCSPU命令隊(duì)列(MFCSPUQ)和MFC代理命令隊(duì)列(MFC PrxyQ)。十六入口的MFC SPUQ處理從SPU信道接口接收的MFC命 令。八入口的MFC PrxyQ通過映射到輸入和輸出(MMIO)裝栽和存儲(chǔ) 操作的存儲(chǔ)器來處理來自其它設(shè)備(例如PPE 201或SPE 202、 203和204) 的MFC命令。典型的直接存儲(chǔ)器訪問命令在LS區(qū)域213、 214或215與 主存儲(chǔ)器之間移動(dòng)lt據(jù)。MFC DMA命令的EA M用于尋址主存^f^&備, 包括主存儲(chǔ)器、本地存儲(chǔ)器,以及具有RA的所有設(shè)備。MFC DMA命令 的本地存儲(chǔ)器參數(shù)用于尋址關(guān)聯(lián)的本地存儲(chǔ)器。
在虛擬模式中,MMU216、 217和218提供地址轉(zhuǎn)換和存儲(chǔ)保護(hù)設(shè)施 來處理來自DMAC 236、 237和238的EA轉(zhuǎn)換請(qǐng)求并且發(fā)送回經(jīng)轉(zhuǎn)換的 地址。每個(gè)SPE的MMU均維護(hù)段旁視緩沖器(segment lookaside buffer, SLB)和轉(zhuǎn)換旁視緩沖器(translation lookaside buffer, TLB) 。 SLB將 EA轉(zhuǎn)換為VA,并且TLB將出自SLB的VA轉(zhuǎn)換為RA。 EA由應(yīng)用使用 并且通常是32或64位地址。不同的應(yīng)用或應(yīng)用的多個(gè)副本可以使用相同 的EA來訪問不同的存儲(chǔ)位置(例如,各自使用相同EA的、應(yīng)用的兩個(gè)
副本將需要兩個(gè)不同的物理存儲(chǔ)位置)。為了達(dá)到該目的,EA首先被轉(zhuǎn) 換成對(duì)于在操作系統(tǒng)下運(yùn)行的所有應(yīng)用是公用的、大得多的VA空間。EA 到VA的轉(zhuǎn)換是由SLB來實(shí)現(xiàn)的。然后使用TLB將VA轉(zhuǎn)換成RA,該 TLB是含有VA到RA映射的頁(yè)表或映射表的高速緩存。該表由操作系統(tǒng) 維護(hù)。
ATO 242、 243和244提供與系統(tǒng)中的其它處理單元保持同步所必需
的數(shù)據(jù)高速緩存級(jí)別。原子直接存儲(chǔ)器訪問命令為協(xié)同處理器元件提供實(shí) 現(xiàn)與其它單元同步的裝置。
BIU 239、 240和241的主要功能是為SPE 202、 203和204提供到EIB 的接口。 EIB219在CellBE芯片200上的所有處理器核心與附于EIB 219 的外部接口控制器之間提供通信路徑。
MIC 220在EIB 219以及XIO 221和222中的一個(gè)或兩個(gè)之間提供接 口 。極限數(shù)據(jù)速率(XDRTM )動(dòng)態(tài)隨機(jī)訪問存儲(chǔ)器(DRAM )是由Rambus 提供的一種高速、高串行存儲(chǔ)器。由Rambus提供的宏對(duì)極限數(shù)據(jù)速率動(dòng) 態(tài)隨機(jī)訪問存儲(chǔ)器(在本文獻(xiàn)中被稱為XIO 221和222 )進(jìn)行訪問。
MIC220只是位于EIB219上的從屬裝置(slave)。對(duì)應(yīng)于所支持的 集線器中的存儲(chǔ)器,MIC 220確i/v其所配置的地址范圍內(nèi)的命令。
BIC 224和225管理從EIB 219到兩個(gè)外部設(shè)備中任意一個(gè)的片內(nèi)和 片外數(shù)據(jù)傳送。BIC 224和225可以與1/0設(shè)備交換非相干通信量,或者 其可以將EIB219擴(kuò)展至另一設(shè)備,該設(shè)備甚至可以是另一CellBE芯片。 當(dāng)被用于擴(kuò)展EIB 219時(shí),總線協(xié)議維護(hù)Cell BE芯片200中的高速緩存 與所附外部設(shè)備中的高速緩存的一致性,其中,所附外部設(shè)備可以是另一 Cell BE芯片。
IOC 226處理源自1/0接口設(shè)備并且被指定到相干EIB 219的命令。 I/O接口設(shè)備可以是附于諸如I/O橋接器芯片的I/O接口的任何設(shè)備,該 I/O橋接器芯片連接多個(gè)I/O設(shè)備或者連接以非相干方式訪問的另一 Cell BE芯片200。 IOC 226還截取指定到存儲(chǔ)器映射的寄存器的、EIB 219上 的訪問,并且將它們路由至適當(dāng)?shù)模?0接口,其中,存儲(chǔ)器映射的寄存器
駐留于I/O橋接器芯片或非相干Cell BE芯片200之中或之后。IOC 226 還包括內(nèi)部中斷控制器(IIC) 249和1/0地址轉(zhuǎn)換單元(I/O Trans) 250。
滲透式邏輯(pervasive logic) 251是為Cell BE芯片200提供時(shí)鐘管 理、測(cè)試特征和通電序列的控制器。滲透式邏輯可以為處理器提供熱管理 系統(tǒng)。滲透式邏輯含有通過聯(lián)合測(cè)試行動(dòng)小組(JTAG)或串行外圍接口 (SPI)接口通往系統(tǒng)中其它設(shè)備的連接,這在本領(lǐng)域中是爿^的。
盡管已經(jīng)拔:供了可如何實(shí)現(xiàn)不同組件的具體例子,然而這并不意味著 對(duì)其中可以使用說明性實(shí)施例的方面的體系結(jié)構(gòu)進(jìn)行限制。說明性實(shí)施例 的方面可以隨任何多核處理器系統(tǒng)一起使用。
圖3是依照示例性實(shí)施例說明了協(xié)同處理器元件中指令處理的例子的 框圖。SPE 300在本地存儲(chǔ)器320中存儲(chǔ)將要執(zhí)行的指令。雙向指令發(fā)布 330將指令發(fā)布至奇管道(odd pipe) 340和偶管道(even pipe) 350。處 理器中的管道是用于處理指令的一組階段(stage)。管道中的每一階段可 以實(shí)現(xiàn)不同的功能。例如,管道可以具有取階段、解碼階段、執(zhí)行階段和 寫階段。
在這些例子中,奇管道340對(duì)來自寄存器堆(register file) 310的數(shù) 據(jù)進(jìn)行裝載操作、存儲(chǔ)操作、字節(jié)操作和分支操作。如圖3中的例子所示, 寄存器堆310包括長(zhǎng)度為128位的128個(gè)寄存器.字節(jié)操作包括正移 (shuffle)字節(jié)操作和移位/循環(huán)移位字節(jié)操作。分支操作包括采納分支的 操作和提示分支操作。
偶管道350對(duì)來自所描述的例子中的寄存器堆310的數(shù)據(jù)進(jìn)行浮點(diǎn)操 作、邏輯操作、算術(shù)邏輯單元(ALU)操作和字節(jié)操作,在所描述的例子 中,浮點(diǎn)^Mt包括四向浮點(diǎn)(128位寄存器上的四個(gè)32位操作)和雙向雙 精度(DP)浮點(diǎn)(128位寄存器上的兩個(gè)64位操作)。邏輯操作包括128 位邏輯操作和選擇位操作。ALU操作包括對(duì)128位寄存器的四個(gè)數(shù)據(jù)部分 上的32位操作以及對(duì)128位寄存器的8個(gè)數(shù)據(jù)部分上的16位操作。對(duì)偶 管道350的字節(jié)操作包括移位/循環(huán)移位操作以及絕對(duì)差求和操作。
協(xié)同處理器元件被嚴(yán)重流水線化并且其分支誤預(yù)測(cè)損失高。另外,硬
件的分支預(yù)測(cè)策略是簡(jiǎn)單假設(shè)所有的分支,包括無條件分支,均不被采納。 換句話說,僅在流水線的后期才檢測(cè)分支,此時(shí)在行進(jìn)中已經(jīng)存在多個(gè)落 空指令。這種設(shè)計(jì)獲得了降低的硬件復(fù)雜度、較快的時(shí)鐘周期,以及增加 的可預(yù)測(cè)性,這對(duì)于多媒體應(yīng)用來說是重要的。
盡管就不同種類的多處理器中的協(xié)同處理器描述了說明性實(shí)施例中的 例子,然而實(shí)施例可以應(yīng)用于其中不存在硬件分支預(yù)測(cè)并且提供分支提示 指令的任何處理器。
然而,實(shí)際上很多采納分支在諸如函數(shù)調(diào)用、函數(shù)返回、循環(huán)閉合分 支,以及一些無條件分支的情況下不能夠被消除。為了促進(jìn)這種可預(yù)測(cè)采 納分支的執(zhí)行,協(xié)同處理器元件提供了分支提示指令,稱為對(duì)分支的提示
或Mr。該指令指定了分支的位置及其可能的目標(biāo)地址。在這些例子中, 當(dāng)足夠早地調(diào)度Mr指令時(shí)(至少在分支之前的11個(gè)周期),協(xié)同處理元 件從存儲(chǔ)器預(yù)取來自被提示分支目標(biāo)的指令,并且將其插入到緊接在被提
示分支之后的指令流中。當(dāng)提示正確時(shí),分支延遲實(shí)際上是一個(gè)循環(huán);否
則,正常的分支損失適用。
對(duì)于某些類型的分支,編譯器可以在統(tǒng)計(jì)上預(yù)測(cè)超過50%的時(shí)間將要 采納它們,并且適當(dāng)?shù)夭迦胩崾局噶睢?一類這樣的分支是到達(dá)循環(huán)頂部的 分支,或者循環(huán)閉合分支。循環(huán)閉合分支也稱為循環(huán)閉合分支語句。在說 明性實(shí)施例中,這種類型的語句可以隨這樣的指令序列一起使用,即使用 位于該指令序列開始的標(biāo)記以及位于該指令序列結(jié)尾到達(dá)該標(biāo)記的分支, 該指令序列被執(zhí)行多次。在該方式下,執(zhí)行到達(dá)標(biāo)記的分支的次數(shù)可以通 過循環(huán)閉合分支語句來控制。分支的目標(biāo)(要么到達(dá)循環(huán)的頂部,要么退 出循環(huán))由比較指令(稱為循環(huán)條件)來控制。
依照示例性實(shí)施例,編譯器標(biāo)識(shí)程序中可以被重寫為計(jì)數(shù)循環(huán) (counted loop)的循環(huán)。編譯器將循環(huán)條件和循環(huán)閉合分支轉(zhuǎn)換成取決于 將計(jì)數(shù)器減少到零的形式。當(dāng)計(jì)數(shù)器的值達(dá)到零時(shí),循環(huán)終止。在這種方 式下,當(dāng)循環(huán)將要終止對(duì),編譯器可以確定計(jì)數(shù)器的值。
在這些例子中,在選擇指令中使用計(jì)數(shù)值來如下確定被提示分支的目
標(biāo)比較語句或指令用于比較給定值與零,并且根據(jù)比較結(jié)果設(shè)置目標(biāo)寄 存器中的值。編譯器然后插入選擇指令,該選擇指4H^吏用比較結(jié)果以便在 落空的分支目標(biāo)地址與采納的目標(biāo)地址之間進(jìn)行選擇。這是下文提到的所 選擇的值,并且其是由選擇指令產(chǎn)生的。在這些例子中,比較和選擇指令 序列含有兩個(gè)指令。在這些說明性例子中,該序列是由比較指令和選擇指 令形成的。
編譯器然后插入分支提示指令,該分支提示指令使用所選擇的值作為 目標(biāo)字段輸入。因而,分支提示指令導(dǎo)致預(yù)取采納分支直到計(jì)數(shù)值為零, 此時(shí),分支提示指令導(dǎo)致預(yù)取落空路徑.在這些例子中,每重復(fù)一次循環(huán), 計(jì)數(shù)值就減少一。當(dāng)計(jì)數(shù)值大于零時(shí),預(yù)取采納分支的指令(從分支目標(biāo) 地址開始)用于執(zhí)行。
現(xiàn)在轉(zhuǎn)至圖4A-1、 4A-2、 4B-1、 4B-2、 4C-1和4C-2,依照說明性實(shí) 施例,描述了說明用于循環(huán)的代碼的示圖。首先轉(zhuǎn)至圖4A-l和4A-2,代 碼400是用于以下源代碼的循環(huán)的中間碼的例子
<formula>formula see original document page 15</formula>代碼400中的402和404行說明設(shè)置用于對(duì)循環(huán)從1到1000計(jì)數(shù)的指 在該例中,將寄存器127初始化為1并且在循環(huán)體中將其增加直到值
等于循環(huán)上界.在該例中,循環(huán)上界是1000,其是存儲(chǔ)在寄存器126中的 值。盡管在這些例子中使用了寄存器126和127,然而取決于特定的實(shí)現(xiàn) 也可以使用處理器中的任何寄存器。代碼400中的循環(huán)頂部由406行中所 示的CL.3來標(biāo)識(shí)。408行用于增加寄存器127。
410行含有將寄存器127與寄存器126的內(nèi)容進(jìn)行比較的指令,且結(jié) 果存儲(chǔ)在寄存器6中。代碼400中的412行是提示414行中的分支的分支 提示指令,該分支所期望的目標(biāo)是406行中的標(biāo)記CL.3。期望目標(biāo)的地址 稱為期望目標(biāo)地址。在這些例子中,該地址用于循環(huán)的開始。該標(biāo)記標(biāo)志 該循環(huán)的頂部并且將在下文詳細(xì)討論。414行是到達(dá)406行中循環(huán)的頂部 的分支,并且取決于寄存器6的值而出現(xiàn),在該例中,計(jì)數(shù)循環(huán)的主體位 于406行與414行之間。
現(xiàn)在轉(zhuǎn)至圖4B-1和4B-2,代碼420說明了在代碼400被重造為計(jì)數(shù) 循環(huán)之后代碼400的形式。該圖說明了計(jì)數(shù)循環(huán)的例子。在執(zhí)行停止循環(huán) 回到循環(huán)頂部之前,該過程按所選次數(shù)循環(huán)回到循環(huán)的頂部。如所說明的, 422行含有用于將寄存器126初始化到循環(huán)上界的指令。在該例中該值是 1000。在該例中,424行示出了標(biāo)記CL.3的指令,標(biāo)記CL.3表示循環(huán)的 頂部。代碼420中的426行是遞減寄存器126的指令,指示循環(huán)的當(dāng)前上 界。在該例中,寄存器逐一遞減。428行是示出分支提示指令的間接形式 的指令.該指令將424行中的標(biāo)記CL,3示為430行中所示的分支指令的 目標(biāo).
在430行中,說明了不同形式的分支指令.在該例中,430行是這樣 的分支指令,即如果寄存器126中的值不是零,該分支指令基本上進(jìn)行轉(zhuǎn) 移(branching).該分支到達(dá)循環(huán)的頂部。這種類型的分支指令提供了以 計(jì)數(shù)形式重造循環(huán)的例子。這種形式使用較少的指令并且提供了使用寄存 器126中的值的機(jī)會(huì)。
現(xiàn)在轉(zhuǎn)至圖4C-1和4C-2,在該例中,代碼460示出了在重造為計(jì)數(shù) 循環(huán)并且使用對(duì)分支指令的寄存器形式的提示之后來自代碼420的代碼序 列.
更明確地,代碼460說明了相同的代碼序列,但卻加入代碼來動(dòng)態(tài)修 改A&指令的目標(biāo)。
462、 464和466行中的指令用于初始化計(jì)數(shù)循環(huán)以及設(shè)置比較和選擇 指令序列,如468、 470和472行所示。468行含有用于遞減寄存器126中 的計(jì)數(shù)值的指令'在該例中,470行含有比較指令,并且472行含有選擇 指令。這些指令比較遞減的循環(huán)計(jì)數(shù)并且在選擇指令中使用結(jié)果。所選擇 的指令使用該值來在目標(biāo)與落空值之間進(jìn)行選擇,以使放置于選擇指令的 結(jié)果寄存器中。在該例中,在474行中的標(biāo)記CL.3與476行中的CL.4之 間找到循環(huán)的主體。478行含有具有寄存器形式的分支提示指令。這一特 定的分支提示指令使用來自474行中的SELB指令的結(jié)果值作為分支提示 指令的目標(biāo)值。
圖5是依照本發(fā)明的示例性實(shí)施例說明了編譯器的操作的流程圖,該 編譯器的操作用于改進(jìn)支持分支提示指令的處理器中的分支預(yù)測(cè).應(yīng)當(dāng)理 解,流程圖說明中的每一塊,以及流程圖說明中塊的組合,都可以由計(jì)算 M序指令來實(shí)現(xiàn)??梢詫⑦@些計(jì)算機(jī)程序指令提供給處理器或其它可編 程數(shù)據(jù)處理設(shè)備來產(chǎn)生一種機(jī)器,從而^f吏得在處理器或其它可編程數(shù)據(jù)處 理設(shè)備上執(zhí)行的指令創(chuàng)建用于實(shí)現(xiàn)流程圖塊中所指定的功能的裝置.
這些計(jì)算機(jī)程序指令還可以存儲(chǔ)在能夠指導(dǎo)處理器或其它可編程數(shù)據(jù) 處理^殳備以特定方式運(yùn)行的計(jì)算機(jī)可讀存儲(chǔ)器、傳輸介質(zhì)或存儲(chǔ)介質(zhì)中, 從而4吏得存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)器、傳輸介質(zhì)或存儲(chǔ)介質(zhì)中的指令產(chǎn)生一 種制品,其包括實(shí)現(xiàn)流程圖塊中所指定的功能的指令裝置.
因此,流程圖說明中的塊支持用于實(shí)現(xiàn)指定功能的裝置的組合、用于 實(shí)現(xiàn)指定功能的步驟的組合,以及用于實(shí)現(xiàn)指定功能的計(jì)算機(jī)可用程序代 碼,還應(yīng)當(dāng)理解,流程圖說明中的每一塊,以及流程圖說明中塊的組合, 都可以由實(shí)現(xiàn)指定功能或步驟的專用基于硬件的計(jì)算機(jī)系統(tǒng)來實(shí)現(xiàn),或者 由專用硬件和計(jì)算機(jī)指令的組合來實(shí)現(xiàn)。更特別地,流程圖說明中的塊可 以在用于編譯執(zhí)行的代碼的編譯器中實(shí)現(xiàn)。
具體參照?qǐng)D5,操作開始并且編譯器接收程序代碼(塊502)。該程序
代碼是從諸如含有源代碼的文件這樣的源接收的。編譯器然后掃描源代碼
以標(biāo)識(shí)具有鎖存分支指令(latching branch instruction )的循環(huán)(步驟504 )。 編譯器對(duì)關(guān)于是否找到循環(huán)進(jìn)行確定(步驟506)。如果找到循環(huán),則編 譯器確定該循環(huán)是否可以被重寫為計(jì)數(shù)循環(huán)(步驟508)。如果該循環(huán)可 以被重寫為計(jì)數(shù)循環(huán),則編譯器修改該循環(huán)以便倒計(jì)數(shù)到零(塊510), 并且插入對(duì)分支指令的寄存器形式的提示(塊512)。
編譯器標(biāo)識(shí)采納的目標(biāo)地址和落空的目標(biāo)地址的偏移值(塊514)。
然后,編譯器插入選擇指令,該選擇指令對(duì)鎖存分支指令的計(jì)數(shù)值(其倒 計(jì)數(shù)到零)進(jìn)行邏輯選擇,以便在分支采納的目標(biāo)地址偏移與落空的目標(biāo) 地址偏移之間進(jìn)行選擇(塊516),并且該過程返回到如上文所述的步驟 504。分支采納的目標(biāo)地址是當(dāng)分支出現(xiàn)在指令的執(zhí)行中時(shí)執(zhí)行在此處繼續(xù) 的地址。在這些例子中,該地址是位于分支的標(biāo)記處或位于寄存器中的指 令。落空的目標(biāo)地址是正在執(zhí)行的指令中下一順序指令的地址。將選擇的 結(jié)果置于/^f指令的寄存器字段中,并且此后,作為該選擇的結(jié)果,將取 回在含于力6,指令的分支目標(biāo)寄存器中的地址處的指令。
分支指令通常包括目標(biāo)地址。如果采納了分支,則該地址是執(zhí)行在此 處繼續(xù)的地址。如果不采納分支,則執(zhí)行繼續(xù)指令集中的下一順序指令。 執(zhí)行分支指令的結(jié)果導(dǎo)致要么執(zhí)行下一順序指令要么執(zhí)行位于標(biāo)記處或在 含于寄存器中的地址處的指令。前者稱為落空的目標(biāo)地址,而后者稱為分 支采納的目標(biāo)地址。
再次參照步驟506,如果未找到具有鎖存分支指令的循環(huán),則編譯器 終止處理用于這些類型的循環(huán)的代碼。
轉(zhuǎn)回至步驟508,如果循環(huán)不可以被重寫成計(jì)數(shù)循環(huán),則該過程返回 到如上所述的步驟504來確定代碼中是否存在具有鎖存分支指令的附加循 環(huán)。
因而,無論何時(shí)使用分支提示指令,示例性實(shí)施例都通過消除在循環(huán) 退出分支(loop exit branch)上所蒙受的分支誤預(yù)測(cè)損失來解決現(xiàn)有技術(shù) 的缺點(diǎn)。分支提示指令在循環(huán)期間選擇分支采納的地址,并且在退出循環(huán)
時(shí)仍未蒙受到分支誤預(yù)測(cè)損失。盡管使用不同種類的多核處理器說明了所 描述的例子,然而實(shí)施例可以應(yīng)用于任何類型的處理器,包括同類的多核 處理器乃至單核處理器。實(shí)施例可應(yīng)用于其中給出了循環(huán)以及循環(huán)分支的 任何處理器單元,并且該處理器單元支持分支提示指令。
示例性實(shí)施例可以采取全硬件實(shí)施例、全軟件實(shí)施例或者既含有硬件 元素又含有軟件元素的實(shí)施例的形式。可以以軟件實(shí)現(xiàn)示例性實(shí)施例,其 包括但不限于固件、常駐軟件、微碼等。
此外,示例性實(shí)施例可以采取可訪問于計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì) 的計(jì)算機(jī)程序產(chǎn)品的形式,該計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)提供由計(jì)算機(jī) 或任何指令執(zhí)行系統(tǒng)使用的或者與計(jì)算機(jī)或任何指令執(zhí)行系統(tǒng)結(jié)合使用的 程序代碼。對(duì)于該描述來說,計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)可以是能夠容 納、存儲(chǔ)、通信、傳播或傳送由指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用的或者與 指令執(zhí)行系統(tǒng)、裝置或設(shè)備結(jié)合使用的程序的任何有形裝置。
介質(zhì)可以是電子、磁性、光學(xué)、電磁、紅外或半導(dǎo)體系統(tǒng)(或裝置或 設(shè)備)或者傳*質(zhì)。計(jì)算機(jī)可讀介質(zhì)的例子包括半導(dǎo)體或固態(tài)存儲(chǔ)器、
磁帶、可裝卸計(jì)算M盤、隨機(jī)訪問存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、 硬磁盤和光盤。光盤的當(dāng)前的例子包括壓縮磁盤-只讀存儲(chǔ)器(CD-ROM)、 壓縮磁盤-讀/寫(CD-R/W)和DVD。
適于存儲(chǔ)和/或執(zhí)行程序代碼的數(shù)據(jù)處理系統(tǒng)可以包括通過系統(tǒng)總線 直接地或間接地耦合于存儲(chǔ)元件的至少一個(gè)處理器。存儲(chǔ)元件可以包括在 程序代碼的實(shí)際執(zhí)行期間所使用的局部存儲(chǔ)器、大容量存儲(chǔ)器,以及為了 減少在執(zhí)行期間必須從大容量存儲(chǔ)器檢索代碼的次數(shù)而提供對(duì)至少一些程 序代碼的臨時(shí)存儲(chǔ)的高速緩沖存儲(chǔ)器。
輸^/輸出或I/0設(shè)備(包括但不限于鍵盤、顯示器、指點(diǎn)設(shè)備等)可 以直接地或者通過插入I/O控制器間接地耦合于系統(tǒng)。
網(wǎng)絡(luò)適配器也可以耦合于系統(tǒng),以便使數(shù)據(jù)處理系統(tǒng)能夠適于通過介
l器、電纜調(diào)制解調(diào)器和以太網(wǎng)卡正是幾種當(dāng)前可用類型的網(wǎng)絡(luò)適
配器。
已經(jīng)出于說明和描述的目的給出了對(duì)示例性實(shí)施例的描述,并且不旨 在窮舉或?qū)⒈景l(fā)明限制于所公開的形式。各種修改和變型對(duì)于本領(lǐng)域的普 通技術(shù)人員將是顯而易見的。選擇和描述實(shí)施例是為了最好地解釋本發(fā)明 的原理、實(shí)際應(yīng)用,以及使本領(lǐng)域的普通技術(shù)人員能夠針對(duì)適于所設(shè)想的 特定用途的各種實(shí)施例及各種修改來理解本發(fā)明。
權(quán)利要求
1.一種用于改進(jìn)處理器中分支預(yù)測(cè)的計(jì)算機(jī)實(shí)現(xiàn)的方法,所述處理器支持分支提示指令,所述計(jì)算機(jī)實(shí)現(xiàn)的方法包括由編譯器接收指令序列,其中所述指令序列包括循環(huán);在所述指令序列中插入比較和選擇指令序列,其在正在執(zhí)行的指令中下一順序指令的分支采納的目標(biāo)地址與落空的目標(biāo)地址之間進(jìn)行選擇,其中所述比較和選擇指令序列中的選擇指令提供所選擇的值,用于預(yù)取所述分支采納的目標(biāo)地址和所述落空的目標(biāo)地址中的一個(gè);以及在所述指令序列中插入分支提示指令,所述分支提示指令基于所選擇的值標(biāo)識(shí)循環(huán)閉合分支語句和所期望的目標(biāo)地址。
2. 根據(jù)權(quán)利要求l的計(jì)算機(jī)實(shí)現(xiàn)的方法,其進(jìn)一步包括 將所述循環(huán)重造為倒計(jì)數(shù)到零的計(jì)數(shù)循環(huán)。
3. 根據(jù)權(quán)利要求2的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中所述循環(huán)閉合分支語句 基于倒計(jì)數(shù)到零的計(jì)數(shù)值進(jìn)行轉(zhuǎn)移。
4. 根據(jù)權(quán)利要求2的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中如果所述計(jì)數(shù)值不是零, 則所述選擇指4^擇所述分支采納的目標(biāo)地址,并且其中,如果所述計(jì)數(shù) 值是零,則所述選擇指令選擇所述落空的目標(biāo)地址。
5. 根據(jù)權(quán)利要求l的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中所述分支提示指令使得 所述處理器從由所選擇的值表示的地址起始的存儲(chǔ)器預(yù)取指令。
6. 根據(jù)權(quán)利要求1的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中所述處理器是單元處理 器體系結(jié)構(gòu)內(nèi)的協(xié)同處理器元件。
7. —種用于改進(jìn)處理器中分支預(yù)測(cè)的裝置,所述處理器支持分支提示 指令,所述裝置包括處理器;將要在所述處理器上執(zhí)行的指令序列,其中所述指令序列包括循環(huán); 以及編譯器,其中所述編譯器接收所述指令序列;在所述指令序列中插入 比較和選擇指令序列,其在正在執(zhí)行的指令中下一順序指令的分支采納的 目標(biāo)地址與落空的目標(biāo)地址之間進(jìn)行選擇,其中所述比較和選擇指令序列 中的選擇指令提供所選擇的值,用于預(yù)取所迷分支采納的目標(biāo)地址和所述落空的目標(biāo)地址中的一個(gè);以及在所述指令序列中插入分支提示指令,所 述分支提示指令基于所選擇的值標(biāo)識(shí)循環(huán)閉合分支語句和所期望的目標(biāo)地 址。
8. 根據(jù)權(quán)利要求7的裝置,其中所述編譯器將所述循環(huán)重造為倒計(jì)數(shù)到零的計(jì)數(shù)循環(huán),
9. 根據(jù)權(quán)利要求8的裝置,其中所述循環(huán)閉合分支語句被配置以基于 倒計(jì)數(shù)到零的計(jì)數(shù)值進(jìn)行轉(zhuǎn)移。
10. 根據(jù)權(quán)利要求8的裝置,其中如果所述計(jì)數(shù)值不是零,則所述選 擇指令被配置以選擇所述分支采納的目標(biāo)地址,并且其中,如果所述計(jì)數(shù) 值是零,則所述選擇指令被配置以選擇所述落空的目標(biāo)地址。
11. 根據(jù)權(quán)利要求7的裝置,其中所述分支提示指令被配置以使得所 述處理器從由所選擇的值表示的地址起始的存儲(chǔ)器預(yù)取指令.
12. 根據(jù)權(quán)利要求7的裝置,其中所述處理器是單元處理器體系結(jié)構(gòu) 內(nèi)的協(xié)同處理器元件。
全文摘要
一種編譯器,其包括用于改進(jìn)在支持分支提示指令的處理器中的分支預(yù)測(cè)的機(jī)制。所述編譯器接收指令序列,其中所述指令序列包括循環(huán)。該循環(huán)序列采用hbr指令來避免通往每個(gè)循環(huán)迭代上的循環(huán)起始的采納分支的誤預(yù)測(cè)損失。然而,在退出所述循環(huán)時(shí),不管怎樣都將蒙受該損失。所述編譯器插入比較和選擇指令序列,其動(dòng)態(tài)地將輸入改變成所述hbr指令,由此在離開所述循環(huán)時(shí)避免該損失。
文檔編號(hào)G06F9/38GK101101544SQ20071012813
公開日2008年1月9日 申請(qǐng)日期2007年7月6日 優(yōu)先權(quán)日2006年7月7日
發(fā)明者J·K·P·奧布賴恩, K·M·奧布賴恩 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司