優(yōu)先權(quán)申請案
本申請案主張2014年12月12日申請且標(biāo)題為“在亂序(ooo)處理器中提供早期指令執(zhí)行,以及相關(guān)設(shè)備、方法和計(jì)算機(jī)可讀媒體”的第14/568,637號美國專利申請案的優(yōu)先權(quán),所述專利申請案以全文引用的方式并入本文中。
本發(fā)明的技術(shù)大體上涉及通過亂序(ooo)處理器來執(zhí)行指令。
背景技術(shù):
亂序(ooo)處理器是能夠以由每一指令的輸入操作數(shù)的可用性確定的次序執(zhí)行計(jì)算機(jī)程序指令,而不管所述指令在計(jì)算機(jī)程序中的出現(xiàn)次序如何的計(jì)算機(jī)處理器。通過亂序執(zhí)行指令,ooo處理器可能夠充分利用在ooo處理器等待數(shù)據(jù)存取操作完成時(shí),原本將變?yōu)閺U棄的處理器時(shí)鐘循環(huán)。舉例來說,代替于在為較舊的程序指令檢索輸入數(shù)據(jù)時(shí)必須“停止”(即,有意引入處理延遲),ooo處理器可繼續(xù)執(zhí)行能夠立刻執(zhí)行的最近取到的指令。以此方式,ooo處理器可較有成效地利用處理器時(shí)鐘循環(huán),從而產(chǎn)生ooo處理器每處理器時(shí)鐘循環(huán)能夠處理的指令的數(shù)目的增加。
然而,每時(shí)鐘循環(huán)處理的指令的數(shù)目增加的程度可受指令之間的相依性的存在限制。舉例來說,考慮以下指令序列:
i1:movr1,0x0000;將值0x0000加載到寄存器r1中。
i2:movtr1,0x1000;將值0x10000000加載到寄存器r1中。
i3:r3=r1+r1;將r1的值與其本身相加,并存儲(chǔ)在寄存器r3中。
i4:r4=存儲(chǔ)器[r3];將值存儲(chǔ)在寄存器r4中的存儲(chǔ)器地址r3處。
在上述指令序列中,歸因于指令i3接收來自寄存器r1的值作為輸入操作數(shù)的事實(shí),指令i3與指令i1之間,以及指令i3與i2之間存在相依性。因此,指令i3無法執(zhí)行,直到指令i1和i2兩者均已完成為止。類似地,指令i4無法執(zhí)行,直到已通過指令i3計(jì)算了寄存器r3的值之后為止。
一些常規(guī)計(jì)算機(jī)微架構(gòu)嘗試通過提供專用結(jié)構(gòu)來高速緩存特定寄存器值而不等待指令產(chǎn)生寄存器值來執(zhí)行,來解決指令相依性的問題。一種此類結(jié)構(gòu)是常數(shù)高速緩沖存儲(chǔ)器,其可維持最近已經(jīng)加載有立即值的一組寄存器。類似地,其它微架構(gòu)可提供所述因特爾堆棧引擎的結(jié)構(gòu),其可實(shí)現(xiàn)特定寄存器的早期執(zhí)行(例如用于堆棧指針更新)。然而,在這兩個(gè)實(shí)例中,高速緩存的寄存器值限于非常受限一組指令所產(chǎn)生的寄存器更新值。
技術(shù)實(shí)現(xiàn)要素:
詳細(xì)描述中所揭示的方面包含在亂序(ooo)處理器中提供早期指令執(zhí)行。還揭示相關(guān)設(shè)備、方法和計(jì)算機(jī)可讀媒體。在這點(diǎn)上,在一個(gè)方面中,提供一種包括早期執(zhí)行引擎的設(shè)備。所述早期執(zhí)行引擎包含早期寄存器高速緩沖存儲(chǔ)器,其在一些方面中是用于高速緩存存儲(chǔ)在寄存器中的非推測性立即值的專用結(jié)構(gòu)。在一些方面,所述早期執(zhí)行引擎還包含早期執(zhí)行單元,其可用于實(shí)施指令的早期執(zhí)行。所述早期執(zhí)行引擎接收來自ooo處理器的前端指令管線的傳入指令,且確定所述傳入指令的輸入操作數(shù)是否存在于早期寄存器高速緩沖存儲(chǔ)器中的條目中。如果是,那么所述早期執(zhí)行引擎用高速緩存在早期寄存器高速緩沖存儲(chǔ)器的條目中的非推測性立即值來取代傳入指令的輸入操作數(shù)。以此方式,可用高速緩存的立即值來代替輸入操作數(shù),從而允許執(zhí)行所述傳入指令,而不需要寄存器存取。在一些方面,所述早期執(zhí)行引擎可進(jìn)一步確定所述傳入指令是否為有早期執(zhí)行資格的指令(例如早期執(zhí)行單元所支持的相對簡單的算術(shù)、邏輯或移位運(yùn)算)。如果傳入指令是有早期執(zhí)行資格的指令,那么早期執(zhí)行引擎可使用早期執(zhí)行單元來執(zhí)行所述傳入指令。所述早期執(zhí)行引擎接著可將由傳入指令的早期執(zhí)行產(chǎn)生的輸出值寫入到早期寄存器高速緩沖存儲(chǔ)器。在一些方面,接著可用提供到ooo處理器的后端指令管線的傳出指令來代替所述傳入指令。
在另一方面,提供一種包括早期執(zhí)行引擎的設(shè)備。早期執(zhí)行引擎以通信方式耦合到ooo處理器的前端指令管線和后端指令管線。早期執(zhí)行引擎包括早期執(zhí)行單元和早期寄存器高速緩沖存儲(chǔ)器。早期執(zhí)行引擎經(jīng)配置以接收來自前端指令管線的傳入指令。早期執(zhí)行引擎進(jìn)一步經(jīng)配置以確定傳入指令的一或多個(gè)輸入操作數(shù)的輸入操作數(shù)是否存在于早期寄存器高速緩沖存儲(chǔ)器中的一或多個(gè)條目的對應(yīng)條目中。所述早期執(zhí)行引擎還經(jīng)配置以響應(yīng)于確定所述輸入操作數(shù)存在于所述對應(yīng)條目中,用存儲(chǔ)在所述對應(yīng)條目中的非推測性立即值來取代所述輸入操作數(shù)。
在另一方面,提供一種包括ooo處理器的早期執(zhí)行引擎的設(shè)備。早期執(zhí)行引擎包括用于接收來自ooo處理器的前端指令管線的傳入指令的裝置。早期執(zhí)行引擎進(jìn)一步包括用于確定傳入指令的一或多個(gè)輸入操作數(shù)中的輸入操作數(shù)是否存在于早期執(zhí)行引擎的早期寄存器高速緩沖存儲(chǔ)器中的一或多個(gè)條目的對應(yīng)條目中。早期執(zhí)行引擎還包括用于響應(yīng)于確定所述輸入操作數(shù)存在于對應(yīng)條目中而用存儲(chǔ)在所述對應(yīng)條目中的非推測性立即值來取代所述輸入操作數(shù)的裝置。
在另一方面,提供一種提供早期指令執(zhí)行的方法。所述方法包括通過ooo處理器的早期執(zhí)行引擎,接收來自ooo處理器的前端指令管線的傳入指令。所述方法進(jìn)一步包括確定傳入指令的一或多個(gè)輸入操作數(shù)中的輸入操作數(shù)是否存在于早期執(zhí)行引擎的早期寄存器高速緩沖存儲(chǔ)器中的一或多個(gè)條目的對應(yīng)條目中。所述方法還包括響應(yīng)于確定所述輸入操作數(shù)存在于對應(yīng)條目中,用存儲(chǔ)在所述對應(yīng)條目中的非推測性立即值來取代所述輸入操作數(shù)。
在另一方面,提供一種上面存儲(chǔ)有計(jì)算機(jī)可執(zhí)行指令的非暫時(shí)性計(jì)算機(jī)可讀媒體。在由處理器執(zhí)行時(shí),計(jì)算機(jī)可執(zhí)行指令致使所述處理器接收來自處理器的前端指令管線的傳入指令。所述計(jì)算機(jī)可執(zhí)行指令進(jìn)一步致使所述處理器確定傳入指令的一或多個(gè)輸入操作數(shù)中的輸入操作數(shù)是否存在于早期執(zhí)行引擎的早期寄存器高速緩沖存儲(chǔ)器中的一或多個(gè)條目的對應(yīng)條目中。所述計(jì)算機(jī)可執(zhí)行指令還致使所述處理器響應(yīng)于確定所述輸入操作數(shù)存在于對應(yīng)條目中,用存儲(chǔ)在所述對應(yīng)條目中的非推測性立即值來取代所述輸入操作數(shù)。
附圖說明
圖1是包含用于提供早期指令執(zhí)行的早期執(zhí)行引擎的示范性亂序(ooo)處理器的框圖;
圖2是說明圖1的早期執(zhí)行引擎的示范性早期寄存器高速緩沖存儲(chǔ)器的內(nèi)容的框圖;
圖3a到3c是說明圖1的早期執(zhí)行引擎檢測和替換輸入操作數(shù)并提供傳入有早期執(zhí)行資格的指令的早期執(zhí)行的示范性通信流的圖;
圖4a到4c是說明圖1的早期執(zhí)行引擎檢測和替換對其不支持早期執(zhí)行的傳入指令的輸入操作數(shù),且接收對早期寄存器高速緩沖存儲(chǔ)器的更新的示范性通信流的圖;
圖5a到5c是說明圖1的早期執(zhí)行引擎檢測和處置操作數(shù)對其不可用的傳入指令且接收對早期寄存器高速緩沖存儲(chǔ)器的更新的示范性通信流的圖;
圖6是說明圖1的早期執(zhí)行引擎檢測管線沖洗和從管線沖洗恢復(fù)的示范性通信流的圖;
圖7a到7b是說明圖1的早期執(zhí)行引擎提供早期指令執(zhí)行的示范性過程的流程圖;
圖8是說明基于接收到的架構(gòu)寄存器值來更新早期寄存器高速緩沖存儲(chǔ)器的額外示范性操作的流程圖;
圖9是說明用于檢測管線沖洗和從管線沖洗恢復(fù)的額外示范性操作的流程圖;以及
圖10是可包含圖1的早期執(zhí)行引擎的示范性基于處理器的系統(tǒng)的框圖。
具體實(shí)施方式
現(xiàn)參考各圖,描述本發(fā)明的若干示范性方面。詞語“示范性”在本文中用于表示“充當(dāng)實(shí)例、例子或說明”。本文中描述為“示例性”的任何方面未必理解為比其它方面優(yōu)選或有利。
詳細(xì)描述中所揭示的方面包含在亂序(ooo)處理器中提供早期指令執(zhí)行。還揭示相關(guān)設(shè)備、方法和計(jì)算機(jī)可讀媒體。在這點(diǎn)上,在一個(gè)方面中,提供一種包括早期執(zhí)行引擎的設(shè)備。所述早期執(zhí)行引擎包含早期寄存器高速緩沖存儲(chǔ)器,其在一些方面中是用于高速緩存存儲(chǔ)在寄存器中的非推測性立即值的專用結(jié)構(gòu)。在一些方面,所述早期執(zhí)行引擎還包含早期執(zhí)行單元,其可用于實(shí)施指令的早期執(zhí)行。所述早期執(zhí)行引擎接收來自ooo處理器的前端指令管線的傳入指令,且確定所述傳入指令的輸入操作數(shù)是否存在于早期寄存器高速緩沖存儲(chǔ)器中的條目中。如果是,那么所述早期執(zhí)行引擎用高速緩存在早期寄存器高速緩沖存儲(chǔ)器的條目中的非推測性立即值來取代傳入指令的輸入操作數(shù)。以此方式,可用高速緩存的立即值來代替輸入操作數(shù),從而允許執(zhí)行所述傳入指令,而不需要寄存器存取。在一些方面,所述早期執(zhí)行引擎可進(jìn)一步確定所述傳入指令是否為有早期執(zhí)行資格的指令(例如早期執(zhí)行單元所支持的相對簡單的算術(shù)、邏輯或移位運(yùn)算)。如果傳入指令是有早期執(zhí)行資格的指令,那么早期執(zhí)行引擎可使用早期執(zhí)行單元來執(zhí)行所述傳入指令。所述早期執(zhí)行引擎接著可將由傳入指令的早期執(zhí)行產(chǎn)生的輸出值寫入到早期寄存器高速緩沖存儲(chǔ)器。在一些方面,接著可用提供到ooo處理器的后端指令管線的傳出指令來代替所述傳入指令。
在這點(diǎn)上,圖1是包含提供早期指令執(zhí)行的早期執(zhí)行引擎102的示范性ooo處理器100的框圖,如本文所揭示。ooo處理器100包含輸入/輸出電路104、指令高速緩沖存儲(chǔ)器106和數(shù)據(jù)高速緩沖存儲(chǔ)器108。ooo處理器100可包含已知數(shù)字邏輯元件、半導(dǎo)體電路、處理核心和/或存儲(chǔ)器結(jié)構(gòu),以及其它元件或其組合中的任一者。本文中所描述的各方面并不限于任何特定元件布置,且所揭示技術(shù)可容易地延伸到半導(dǎo)體裸片或封裝上的各種結(jié)構(gòu)和布局。
ooo處理器100進(jìn)一步包括執(zhí)行管線110,其可細(xì)分為前端指令管線112和后端指令管線114。如本文所使用,“前端指令管線112”可指按照慣例位于執(zhí)行管線110的“開頭”且提供獲取、解碼和/或指令隊(duì)列功能性的管線級。在這點(diǎn)上,圖1的前端指令管線112包含一或多個(gè)獲取/解碼管線級116和一或多個(gè)指令隊(duì)列級118。作為非限制性實(shí)例,一或多個(gè)獲取/解碼管線級116可包含f1、f2和/或f3獲取/解碼級(未圖示)?!昂蠖酥噶罟芫€114”在本文是指執(zhí)行管線110的用于發(fā)出指令以供執(zhí)行,用于實(shí)現(xiàn)指令的實(shí)際執(zhí)行,和/或用于加載和/或存儲(chǔ)指令執(zhí)行所需或所產(chǎn)生的數(shù)據(jù)的后續(xù)管線級。在圖1的實(shí)例中,后端指令管線114包括重命名級120、寄存器存取級122、保留級124、一或多個(gè)調(diào)度級126以及一或多個(gè)執(zhí)行單元128。應(yīng)理解,前端指令管線112的級116、118以及圖1中示出的后端指令管線114的級120、122、124、126、128僅出于說明性目的而提供,且ooo處理器100的其它方面可含有額外的或比本文所說明的管線級少的管線級。
ooo處理器100另外包含寄存器堆130,其為多個(gè)寄存器132(0)到132(x)提供物理存儲(chǔ)。在一些方面,寄存器132(0)到132(x)可包括一或多個(gè)通用寄存器(gpr)、程序計(jì)數(shù)器(未圖示),和/或鏈接寄存器(未圖示)。在ooo處理器100執(zhí)行計(jì)算機(jī)程序期間,可使用寄存器映射表136將寄存器132(0)到132(x)映射到一或多個(gè)架構(gòu)寄存器134。
在示范性操作中,執(zhí)行管線110的前端指令管線112從指令高速緩沖存儲(chǔ)器106獲取指令(未圖示),所述指令高速緩沖存儲(chǔ)器在一些方面中可為芯片上1階(l1)高速緩沖存儲(chǔ)器,作為非限制性實(shí)例。前端指令管線112的一或多個(gè)獲取/解碼管線級116可進(jìn)一步解碼指令,并在向后端指令管線114發(fā)出之前,將其傳遞到一或多個(gè)指令隊(duì)列級118。在向后端指令管線114發(fā)出所述指令之后,后端指令管線114的級(例如執(zhí)行單元128)接著執(zhí)行所發(fā)出的指令,并收回被執(zhí)行的指令。
如上文所論述,ooo處理器100可提供指令的亂序(ooo)處理,以增加指令處理并行度。然而,如上所述,指令之間的相依性的存在可不利地影響ooo處理性能。舉例來說,將先前指令所產(chǎn)生的值作為輸入的指令的處理可由ooo處理器100延遲,直到所述先前指令已完成且輸入值已產(chǎn)生為止。
在這點(diǎn)上,ooo處理器100包含早期執(zhí)行引擎102來提供早期指令執(zhí)行。雖然為清楚起見,將早期執(zhí)行引擎102說明為與前端指令管線112和后端指令管線114不同的元件,但應(yīng)理解,早期執(zhí)行引擎102可集成到前端指令管線112的級116、118中的一或多者中。早期執(zhí)行引擎102包括早期寄存器高速緩沖存儲(chǔ)器138,其含有用于高速緩存所產(chǎn)生的并存儲(chǔ)在對應(yīng)于寄存器132(0)到132(x)的架構(gòu)寄存器134中的立即值的一或多個(gè)條目(未圖示)。早期執(zhí)行引擎102還可包括早期執(zhí)行單元140,其可使指令能夠在到達(dá)后端指令管線114之前被執(zhí)行。作為非限制性實(shí)例,早期執(zhí)行單元140可包括一或多個(gè)算術(shù)邏輯單元(alu)或浮點(diǎn)單元(未圖示)。以此方式,可在執(zhí)行管線110內(nèi)的早得多的級解決指令之間的相依性,從而產(chǎn)生改進(jìn)的ooo處理性能。
在示范性操作中,早期執(zhí)行引擎102接收來自前端指令管線112的傳入指令(未圖示),并檢查所述傳入指令的輸入操作數(shù)(未圖示),以確定所述指令的輸入操作數(shù)是否存儲(chǔ)在早期寄存器高速緩沖存儲(chǔ)器138的條目中。如果在早期寄存器高速緩沖存儲(chǔ)器138中找到對應(yīng)于輸入操作數(shù)的有效條目,那么早期執(zhí)行引擎102用來自所述對應(yīng)條目的高速緩存的非推測性立即值來取代所述傳入指令的輸入操作數(shù)。因此,如由早期執(zhí)行引擎102修改的傳入指令可包含立即值作為輸入,而不需要一或多個(gè)寄存器存取操作來檢索輸入值。
在早期執(zhí)行引擎102的一些方面中,可將指令的子集表示為具有早期執(zhí)行資格(即,在到達(dá)執(zhí)行管線110的后端指令管線114之前執(zhí)行)。舉例來說,具有相對較低等級的復(fù)雜性的指令(例如算術(shù)、邏輯或移位運(yùn)算)可被指定為具早期執(zhí)行資格的指令。具早期執(zhí)行資格的指令可由早期執(zhí)行引擎102的早期執(zhí)行單元140執(zhí)行,其中來自早期執(zhí)行單元140的輸出值(如果存在)寫入到早期寄存器高速緩沖存儲(chǔ)器138。下文相對于圖3a到3c更詳細(xì)地論述早期執(zhí)行引擎102在處理具早期執(zhí)行資格的指令中的示范性方面的操作。
如果早期執(zhí)行引擎102所觀察到傳入指令無法處理(即,因?yàn)樵缙诩拇嫫鞲咚倬彌_存儲(chǔ)器138不含有所述指令的所有輸入操作數(shù)的高速緩存的立即值,或因?yàn)橹噶畈槐硎緸橛性缙趫?zhí)行資格的指令),那么早期執(zhí)行引擎102將對應(yīng)于傳入指令的輸出操作數(shù)的任何條目在早期寄存器高速緩沖存儲(chǔ)器138中標(biāo)記為無效。接著將傳入指令傳遞到后端指令管線114以進(jìn)行常規(guī)處理。早期執(zhí)行引擎102可隨后接收來自ooo處理器100的傳入指令的輸出值和/或任何檢索到的輸入值,且可用所述接收到的值來更新早期寄存器高速緩沖存儲(chǔ)器138。下文相對于圖4a到4c以及圖5a到5c更詳細(xì)地論述早期執(zhí)行引擎102處置早期執(zhí)行單元140無法處理的指令的示范性方面的操作。
在一些方面,應(yīng)理解,具早期執(zhí)行資格的指令可包含可在早期執(zhí)行引擎102中執(zhí)行的分支指令。早期執(zhí)行引擎102對分支指令的早期執(zhí)行可導(dǎo)致對處理器性能和電力消耗的改進(jìn)。分支指令的早期執(zhí)行還可導(dǎo)致執(zhí)行管線110的感知深度的降低,且可加速分支預(yù)測符訓(xùn)練。
早期執(zhí)行引擎102的一些方面可通過僅支持窄寬度操作數(shù)(即,具有小于ooo處理器100所支持的最大大小的輸入和/或輸出操作數(shù))來進(jìn)一步改進(jìn)性能。在此些方面中,早期執(zhí)行引擎102的早期寄存器高速緩沖存儲(chǔ)器138可經(jīng)配置以僅在其中存儲(chǔ)高速緩存的每一立即值的較低階位。另外,早期執(zhí)行單元140可經(jīng)配置以僅對窄寬度操作數(shù)操作。
為了說明在一些方面可對應(yīng)于圖1的早期寄存器高速緩沖存儲(chǔ)器138的示范性早期寄存器高速緩沖存儲(chǔ)器200,提供圖2。為描述圖2的清楚起見,參考圖1的元件。如圖2中所見,早期寄存器高速緩沖存儲(chǔ)器200包含多個(gè)條目202(0)到202(y),各自與一或多個(gè)架構(gòu)寄存器134中對應(yīng)于圖1的寄存器132(0)到132(x)中的一者的一個(gè)架構(gòu)寄存器相關(guān)聯(lián)。每一條目202(0)到202(y)包含寄存器識(shí)別(id)字段204,其表示一或多個(gè)架構(gòu)寄存器134中對應(yīng)于條目202(0)到202(y)中的一者的一個(gè)架構(gòu)寄存器的識(shí)別符。在一些方面,寄存器id字段204可存儲(chǔ)相關(guān)聯(lián)架構(gòu)寄存器134的指數(shù),而一些方面可提供存儲(chǔ)相關(guān)聯(lián)架構(gòu)寄存器134的地址的寄存器id字段204。根據(jù)一些方面,寄存器id字段204可由ooo處理器100在計(jì)算機(jī)程序的執(zhí)行期間動(dòng)態(tài)地指派和/或修改。
條目202(0)到202(y)中的每一者還包含立即值字段206。立即值字段206可高速緩存先前已產(chǎn)生(例如通過圖1的早期執(zhí)行單元140和/或一或多個(gè)執(zhí)行單元128執(zhí)行指令)的非推測性立即值,以存儲(chǔ)在對應(yīng)于條目202(0)到202(y)的架構(gòu)寄存器134中。在后續(xù)檢測到具有對應(yīng)于條目202(0)到202(y)的輸入操作數(shù)的傳入指令后,早期執(zhí)行引擎102可即刻用立即值字段206的內(nèi)容來取代所述輸入操作數(shù)。在一些方面,立即值字段206可僅存儲(chǔ)“窄”立即值(即,具有小于ooo處理器100所支持的立即值的最大大小的大小的立即值)。作為非限制性實(shí)例,ooo處理器100可支持32位立即值,而立即值字段206可僅存儲(chǔ)較低16位的高速緩存立即值。一些方面可假定早期寄存器高速緩沖存儲(chǔ)器200的立即值字段206可存儲(chǔ)窄立即值或“寬”(即,全大小)立即值。
早期寄存器高速緩沖存儲(chǔ)器200的條目202(0)到202(y)中的每一者還包含指示條目202(0)到202(y)的有效性的有效旗標(biāo)字段208。在一些方面,早期執(zhí)行引擎102可在更新條目202(0)到202(y)后,即刻設(shè)定條目202(0)到202(y)中的一者的有效旗標(biāo)字段208。早期執(zhí)行引擎102可清除條目202(0)到202(y)中的一或多者的有效旗標(biāo)字段208,以指示條目202(0)到202(y)已失效(例如由于管線沖洗或不支持的指令)。
應(yīng)理解,一些方面可假定除圖2中所說明的字段204、206和208之外,早期寄存器高速緩沖存儲(chǔ)器200的條目202(0)到202(y)可包含其它字段。將進(jìn)一步理解,在一些方面中,早期寄存器高速緩沖存儲(chǔ)器200可實(shí)施為根據(jù)此項(xiàng)技術(shù)中已知的關(guān)聯(lián)性和替換策略來配置的高速緩沖存儲(chǔ)器。在圖2的實(shí)例中,將早期寄存器高速緩沖存儲(chǔ)器200說明為單個(gè)數(shù)據(jù)結(jié)構(gòu)。然而,在一些方面,早期寄存器高速緩沖存儲(chǔ)器200還可包括多于一個(gè)數(shù)據(jù)結(jié)構(gòu)或高速緩沖存儲(chǔ)器。
早期執(zhí)行引擎102的一些方面可使用多種機(jī)制來選擇性地高速緩存立即值,以減少到早期寄存器高速緩沖存儲(chǔ)器200中的帶寬,和/或避免高速緩存和更新很少使用的寄存器。舉例來說,早期執(zhí)行引擎102的一些方面可經(jīng)配置以僅將圖1的一或多個(gè)架構(gòu)寄存器134的子集高速緩存在早期寄存器高速緩沖存儲(chǔ)器200中。作為非限制性實(shí)例,早期執(zhí)行引擎102可僅高速緩存堆棧指針,和/或僅高速緩存用于傳遞程序調(diào)用參數(shù)的寄存器。在此些方面中,立即可為高速緩存的寄存器的選擇可硬接線到早期執(zhí)行引擎102,可由軟件編程,和/或可由硬件動(dòng)態(tài)地確定。
根據(jù)本文所揭示的一些方面,早期執(zhí)行引擎102可經(jīng)配置以基于傳入指令來確定是否高速緩存立即值。舉例來說,早期執(zhí)行引擎102可僅高速緩存某些常用操作碼的輸入或輸出操作數(shù),和/或可僅基于所述指令的觀察到的歷史來高速緩存特定動(dòng)態(tài)指令(未圖示)的輸入或輸出操作數(shù)。一些方面可假定早期執(zhí)行引擎102經(jīng)配置以高速緩存循環(huán)感應(yīng)變量(未圖示)。在一些方面,早期執(zhí)行引擎102可經(jīng)配置以高速緩存饋送重要指令(例如常常誤預(yù)測的分支指令,或常常導(dǎo)致高速緩沖存儲(chǔ)器未中的加載指令)的計(jì)算的寄存器。
圖3a到3c說明圖1的早期執(zhí)行引擎102檢測和替換輸入操作數(shù)并提供具早期執(zhí)行資格的傳入指令的早期執(zhí)行的示范性通信流。在圖3a到3c中,提供ooo處理器300,其可對應(yīng)于圖1的ooo處理器100的示范性方面。ooo處理器300包含前端指令管線302和后端指令管線304,其中的每一者可分別表示圖1的前端指令管線112和后端指令管線114的方面。ooo處理器300還提供早期執(zhí)行引擎306,其可對應(yīng)于圖1的早期執(zhí)行引擎102的方面。早期執(zhí)行引擎306包括早期執(zhí)行單元308和早期寄存器高速緩沖存儲(chǔ)器310。早期寄存器高速緩沖存儲(chǔ)器310包含表示圖1的一或多個(gè)架構(gòu)寄存器134的架構(gòu)寄存器r0到r3的條目312(0)到312(3)。條目312(0)到312(3)中的每一者包含寄存器id字段314、立即值字段316和有效旗標(biāo)字段318,如上文相對于圖2所描述。在圖3的實(shí)例中,早期寄存器高速緩沖存儲(chǔ)器310存儲(chǔ)三個(gè)有效條目:條目312(0),其具有為寄存器r0高速緩存的立即值#x12;條目312(2),其具有為寄存器r2高速緩存的立即值#x2;以及條目312(3),其具有為寄存器r3高速緩存的立即值#xff。
在圖3a中,早期執(zhí)行引擎306接收傳入指令320。在此實(shí)例中,傳入指令320是既定求輸入操作數(shù)322和324(分別對應(yīng)于寄存器r0和r2)的值的總和并將結(jié)果存儲(chǔ)在寄存器r1中的add指令。出于說明的目的,將假定add指令屬于已經(jīng)由ooo處理器300表示為具有早期執(zhí)行資格的指令的子集內(nèi)。
在接收到傳入指令320后,早期執(zhí)行引擎306確定輸入操作數(shù)322、324中的任一者是否存在于早期寄存器高速緩沖存儲(chǔ)器310的對應(yīng)條目312(0)到312(3)中。如由箭頭326和328指示,圖3a中的早期執(zhí)行引擎306成功地定位對應(yīng)于輸入操作數(shù)322、324的有效條目312(0)和312(2)。因此,早期執(zhí)行引擎306能夠用存儲(chǔ)在條目312(0)和312(2)中的高速緩存的立即值來代替輸入操作數(shù)322、324。
現(xiàn)參看圖3b,早期執(zhí)行引擎306用分別存儲(chǔ)在條目312(0)和312(2)的立即值字段316中的非推測性立即值330和332取代圖3a的輸入操作數(shù)322和324,如由箭頭334和336指示?,F(xiàn)在可執(zhí)行所得傳入指令320',而不存取寄存器r0和r2以獲得輸入值。以此方式,可通過消除早期執(zhí)行引擎306內(nèi)的指令相依性來改進(jìn)ooo處理器300的性能。
在一些方面,可通過早期執(zhí)行引擎306對指令的早期執(zhí)行來進(jìn)一步改進(jìn)ooo處理器300的性能。在這點(diǎn)上,在圖3c中,早期執(zhí)行引擎306評估傳入指令320',以確定其是否為有早期執(zhí)行資格的指令。在圖3c的實(shí)例中,將傳入指令320'確定為有早期執(zhí)行資格的指令320',并將其傳遞到早期執(zhí)行單元308以供執(zhí)行,如由箭頭338指示。在有早期執(zhí)行資格的指令320'的執(zhí)行完成之后,早期執(zhí)行單元308接著用輸出值341來更新早期寄存器高速緩沖存儲(chǔ)器310的對應(yīng)于輸出操作數(shù)340的條目312(1),如由箭頭342指示。還將條目312(1)的有效旗標(biāo)字段318更新為值343一(1),以指示條目312(1)是有效的。
根據(jù)一些方面,在有早期執(zhí)行資格的指令320'的成功執(zhí)行后,早期執(zhí)行引擎306可用再現(xiàn)后端指令管線304中的有早期執(zhí)行資格的指令320'的執(zhí)行的結(jié)果的傳出指令來代替有早期執(zhí)行資格的指令320'。在圖3c的實(shí)例中,如果有早期執(zhí)行資格的指令320'已經(jīng)由后端指令管線304執(zhí)行,那么結(jié)果已經(jīng)將是存儲(chǔ)在架構(gòu)寄存器r1中的值#x14。因此,如由箭頭344指示,早期執(zhí)行引擎306可用傳出指令346來代替有早期執(zhí)行資格的指令320',所述傳出指令在此實(shí)例中是將立即值#x14加載到寄存器r1中的mov指令。接著將傳出指令346提供到后端指令管線304以供執(zhí)行,如由箭頭348指示。
圖4a到4c是說明圖3a到3c的早期執(zhí)行引擎306檢測和替換對其不支持早期執(zhí)行的傳入指令的輸入操作數(shù),且接收對早期寄存器高速緩沖存儲(chǔ)器310的更新的示范性通信流的圖。在描述圖4a到4c時(shí),為清晰起見,參考圖3a到3c的元件。如圖4a中所見,早期執(zhí)行引擎306接收傳入指令400。在此實(shí)例中,傳入指令400是用于存取寄存器r1的值以及存儲(chǔ)在寄存器r2中(由輸入操作數(shù)402指示)的立即值偏移所指示的存儲(chǔ)器位置的ldr指令。ldr指令接著將存儲(chǔ)器存取的結(jié)果存儲(chǔ)在寄存器r3中。出于說明的目的,假定可涉及相對復(fù)雜的存儲(chǔ)器存取操作的ldr指令不具有供早期執(zhí)行引擎306早期執(zhí)行的資格。
早期執(zhí)行引擎306首先咨詢早期寄存器高速緩沖存儲(chǔ)器310,以確定輸入操作數(shù)402是否存在于早期寄存器高速緩沖存儲(chǔ)器310的條目312(0)到312(3)的一者中,如由箭頭404指示。在此實(shí)例中,輸入操作數(shù)402對應(yīng)于條目312(2)。因此,如圖4b中所見,早期執(zhí)行引擎306用存儲(chǔ)在條目312(2)的立即值字段316中的非推測性立即值406來取代圖4a的輸入操作數(shù)402,從而產(chǎn)生傳入指令400',如由箭頭408指示。
早期執(zhí)行引擎306接著確定圖4b中的傳入指令400'是否為有早期執(zhí)行資格的指令。在確定傳入指令400'的ldr操作不具有早期執(zhí)行的資格后,早期執(zhí)行引擎306使早期寄存器高速緩沖存儲(chǔ)器310的對應(yīng)于傳入指令400'的輸出操作數(shù)410的條目312(3)失效。在圖4b的實(shí)例中,這是通過將條目312(3)的有效旗標(biāo)字段318設(shè)定為值412零(0)來實(shí)現(xiàn)。
現(xiàn)參看圖4c,早期執(zhí)行引擎306將傳入指令400'提供到后端指令管線304,作為傳出指令414來執(zhí)行,如由箭頭416和418指示。在一些方面,提供到后端指令管線304的傳出指令414可由ooo處理器300標(biāo)記,以指示其輸出將寫入回到早期執(zhí)行引擎306的早期寄存器高速緩沖存儲(chǔ)器310。一些方面可假定ooo處理器300僅標(biāo)記具有對應(yīng)于早期寄存器高速緩沖存儲(chǔ)器310的條目312(0)到312(3)的輸出操作數(shù)410的傳出指令414。
在圖4c的實(shí)例中,在后端指令管線304執(zhí)行傳出指令414之后,早期執(zhí)行引擎306經(jīng)由反饋路徑422從ooo處理器300接收所得立即值420。立即值420存儲(chǔ)在對應(yīng)于輸出操作數(shù)410(即,寄存器r3)的條目312(3)中,且將條目312(3)的有效旗標(biāo)字段318設(shè)定成值412'一(1),指示條目312(3)現(xiàn)在是有效的。一些方面可假定早期執(zhí)行引擎306可經(jīng)由ooo處理器300的常規(guī)恢復(fù)機(jī)制來接收立即值420,以將來自圖1的寄存器堆130的內(nèi)容復(fù)制到早期寄存器高速緩沖存儲(chǔ)器310中。
圖5a到5c是說明圖3a到3c以及圖4a到4c的早期執(zhí)行引擎306檢測和處置操作數(shù)對其不可用的傳入指令,且接收對早期寄存器高速緩沖存儲(chǔ)器310的更新的示范性通信流的圖。在描述圖5a到5c時(shí),為清晰起見,參考圖3a到3c的元件。在圖5a的實(shí)例中,早期寄存器高速緩沖存儲(chǔ)器310僅包含兩個(gè)有效條目:條目312(0),其具有為寄存器r0高速緩存的立即值#x12;以及條目312(1),其具有為寄存器r1高速緩存的立即值#x14。
在圖5a中,早期執(zhí)行引擎306接收傳入指令500。類似于圖3a的傳入指令320,傳入指令500是對輸入操作數(shù)502和504(分別對應(yīng)于寄存器r0和r2)的值進(jìn)行求和并將結(jié)果存儲(chǔ)在寄存器r1中的add指令。在接收到傳入指令500后,早期執(zhí)行引擎306確定輸入操作數(shù)502、504中的任一者是否存在于早期寄存器高速緩沖存儲(chǔ)器310的對應(yīng)條目312(0)到312(3)中。如由箭頭506指示,圖5a中的早期執(zhí)行引擎306在早期寄存器高速緩沖存儲(chǔ)器310中成功地定位對應(yīng)于輸入操作數(shù)502的有效條目312(0)。因此,早期執(zhí)行引擎306能夠用存儲(chǔ)在條目312(0)中的高速緩存的立即值來代替輸入操作數(shù)502。然而,發(fā)現(xiàn)早期寄存器高速緩沖存儲(chǔ)器310中對應(yīng)于輸入操作數(shù)504的條目312(2)是無效的,如由箭頭508指示。
現(xiàn)在轉(zhuǎn)到圖5b,早期執(zhí)行引擎306用存儲(chǔ)在條目312(0)的立即值字段316中的非推測性立即值509來取代圖5a的輸入操作數(shù)502,如由箭頭510指示。因此,當(dāng)執(zhí)行所得傳入指令500'時(shí),將不需要存取寄存器r0來獲得輸入值。然而,因?yàn)閳D5a的輸入操作數(shù)504不對應(yīng)于早期寄存器高速緩沖存儲(chǔ)器310中的有效條目312(0)到312(3),所以傳入指令500不具有被早期執(zhí)行引擎306處理的資格。因此且如圖5b中示出,早期執(zhí)行引擎306使早期寄存器高速緩沖存儲(chǔ)器310的對應(yīng)于傳入指令500的輸出操作數(shù)511(即,寄存器r1)的條目312(1)失效。如圖5b中所見,在此實(shí)例中,這是通過將條目312(1)的有效旗標(biāo)字段318設(shè)定為值512零(0)來實(shí)現(xiàn)。
現(xiàn)參看圖5c,早期執(zhí)行引擎306接著向后端指令管線304提供傳入指令500',作為傳出指令514來執(zhí)行,如由箭頭516指示。如上文相對于圖4c所提到,向后端指令管線304提供的傳出指令514可由ooo處理器300標(biāo)記,來指示其輸出將寫入回到早期執(zhí)行引擎306的早期寄存器高速緩沖存儲(chǔ)器310。一些方面可假定ooo處理器300僅標(biāo)記具有對應(yīng)于早期寄存器高速緩沖存儲(chǔ)器310的條目312(0)到312(3)的輸出操作數(shù)511的傳出指令514。
在圖5c的實(shí)例中,在后端指令管線304執(zhí)行傳入指令500'之后,早期執(zhí)行引擎306經(jīng)由反饋路徑520從ooo處理器300接收所得架構(gòu)寄存器值518。架構(gòu)寄存器值518存儲(chǔ)在對應(yīng)于輸出操作數(shù)511的條目312(1)(即,寄存器r1)中,且將條目312(1)的有效旗標(biāo)字段318設(shè)定成值512'一(1),指示條目312(1)現(xiàn)在是有效的。注意,作為執(zhí)行傳入指令500'的一部分,后端指令管線304還為寄存器r2檢索架構(gòu)寄存器值522,其對應(yīng)于圖5a的傳入指令500的輸入操作數(shù)504。因此,早期執(zhí)行引擎306還可經(jīng)由反饋路徑524從ooo處理器300接收架構(gòu)寄存器值522。架構(gòu)寄存器值522存儲(chǔ)在對應(yīng)于輸入操作數(shù)504的條目312(2)(即寄存器r2)中,且將條目312(2)的有效旗標(biāo)字段318設(shè)定成值526一(1),指示條目312(2)現(xiàn)在是有效的。
在執(zhí)行亂序處理時(shí),ooo處理器300可推測地基于例如對條件性分支指令(未圖示)將如何分解的預(yù)測來頻繁執(zhí)行指令。條件性分支指令所采取的實(shí)際路徑可能不是已知的,直到條件性分支指令在后端指令管線304內(nèi)被執(zhí)行為止。ooo處理器300因此包含從前端指令管線302和/或后端指令管線304沖洗基于誤預(yù)測分支指令不當(dāng)獲取的指令的機(jī)制。
在管線沖洗的情況下,在一些方面,早期執(zhí)行引擎306必須更新早期寄存器高速緩沖存儲(chǔ)器310的內(nèi)容,來使任何推測地產(chǎn)生的立即值失效。在這點(diǎn)上,圖6說明圖3a到3c的早期執(zhí)行引擎306檢測管線沖洗和從管線沖洗恢復(fù)的示范性通信流。在圖6中,早期執(zhí)行引擎306接收來自ooo處理器300的管線沖洗的指示600。作為響應(yīng),早期執(zhí)行引擎306可進(jìn)行ooo處理器300所提供的若干恢復(fù)機(jī)制中的任一者,以從引起管線沖洗的誤預(yù)測恢復(fù)。在一些方面,早期執(zhí)行引擎306可簡單地使所有的條目312(0)到312(3)失效。這在圖6中說明,其中分別將零值602、604、606和608寫入到條目312(0)、312(1)、312(2)和312(3)的有效旗標(biāo)字段318。在一些方面,早期執(zhí)行引擎306可基于ooo處理器300所恢復(fù)的寄存器映射表?xiàng)l目來選擇性地使條目312(0)到312(3)失效。一些方面可通過在ooo處理器300恢復(fù)圖1的寄存器映射表136時(shí)不進(jìn)行對早期寄存器高速緩沖存儲(chǔ)器310的更新,來采取更積極的方法。
為了最大化早期執(zhí)行引擎306所提供的性能益處,早期執(zhí)行引擎306的一些方面可致力于最小化不具有資格供早期執(zhí)行引擎306處理的管線沖洗和/或指令的影響。早期執(zhí)行引擎306和/或ooo處理器300可基于ooo處理器300所提供的特定架構(gòu)來使用若干策略。舉例來說,在將指令插入到保留級124中之前,可在提供圖1的寄存器存取級122的微架構(gòu)上實(shí)施早期執(zhí)行引擎306的一些方面。在此些方面中,立即值可由早期執(zhí)行引擎306接收,且在寄存器讀取時(shí)間直接插入到早期寄存器高速緩沖存儲(chǔ)器310中。
在一些方面,可發(fā)生其中ooo處理器300當(dāng)前不在處理指令(即,歸因于前端指令管線302中的管線暫停,或在處理管線沖洗之后)的情況。在此類情況下,ooo處理器300可能已知圖1的寄存器堆130的內(nèi)容是最新的,而無待決寄存器寫入。因此,早期執(zhí)行引擎306可經(jīng)由簡單的復(fù)制操作來重新加載早期寄存器高速緩沖存儲(chǔ)器310的內(nèi)容。
根據(jù)一些方面,早期執(zhí)行引擎306可跟蹤對架構(gòu)寄存器的待決寫入,以確定立即值何時(shí)可從圖1的寄存器堆130安全地復(fù)制到早期寄存器高速緩沖存儲(chǔ)器310。舉例來說,早期執(zhí)行引擎306可每架構(gòu)寄存器維持一計(jì)數(shù)器(未圖示),指示向每一架構(gòu)寄存器的未完成寫入的數(shù)目。所述計(jì)數(shù)器可初始化為零,且在早期執(zhí)行引擎306觀察到向架構(gòu)寄存器寫入的傳入指令時(shí)遞增。當(dāng)后端指令管線304提交所述指令時(shí),早期執(zhí)行引擎306還可使所述計(jì)數(shù)器遞減。當(dāng)計(jì)數(shù)器值從一(1)轉(zhuǎn)變?yōu)榱?0)時(shí),不存在向架構(gòu)寄存器的待決寫入,且因此早期執(zhí)行引擎306可將立即值從架構(gòu)寄存器安全地復(fù)制到早期寄存器高速緩沖存儲(chǔ)器310。
在一些方面,傳入指令的多個(gè)版本可同時(shí)在飛行中。為了跟蹤架構(gòu)寄存器的哪一版本應(yīng)為對早期寄存器高速緩沖存儲(chǔ)器310的更新提供其內(nèi)容,早期執(zhí)行引擎306可使用由ooo處理器300指派給每一飛行中指令的標(biāo)記(未圖示)。所述標(biāo)記可向早期執(zhí)行引擎306指示應(yīng)用以更新早期寄存器高速緩沖存儲(chǔ)器310的架構(gòu)寄存器更新的版本。
為了說明圖3a到3c的早期執(zhí)行引擎306提供早期指令執(zhí)行的示范性過程,提供圖7a和7b。圖7a說明用于確定早期執(zhí)行引擎306是否高速緩存?zhèn)魅胫噶畹妮斎氩僮鲾?shù),且檢測具早期執(zhí)行資格的指令的示范性操作。圖7b說明進(jìn)行有早期執(zhí)行資格的指令的早期執(zhí)行的示范性操作。為清楚起見,在描述圖7a和7b時(shí)引用圖1和圖3a到3c的元件。
操作在圖7a中開始,ooo處理器300的早期執(zhí)行引擎306接收來自ooo處理器300的前端指令管線302的傳入指令320(框700)。早期執(zhí)行引擎306接下來確定傳入指令320的一或多個(gè)輸入操作數(shù)322、324的輸入操作數(shù)322或324是否存在于早期執(zhí)行引擎306的早期寄存器高速緩沖存儲(chǔ)器310中的一或多個(gè)條目312(0)到312(3)的對應(yīng)條目312(0)、312(2)中(框702)。如果早期執(zhí)行引擎306確定輸入操作數(shù)322、324中的一或多者不存在于早期寄存器高速緩沖存儲(chǔ)器310中,那么早期執(zhí)行引擎306可使早期寄存器高速緩沖存儲(chǔ)器310的對應(yīng)于傳入指令320的輸出操作數(shù)340的條目312(1)失效(框704)。早期執(zhí)行引擎306接著可將傳入指令320作為傳出指令346提供到ooo處理器300的后端指令管線304以供執(zhí)行(框706)。
然而,如果早期執(zhí)行引擎306在決策框702處確定輸入操作數(shù)322、324中的每一者存在于早期寄存器高速緩沖存儲(chǔ)器310中,那么早期執(zhí)行引擎306用存儲(chǔ)在對應(yīng)條目312(0)、312(2)中的非推測性立即值330、332來取代輸入操作數(shù)322或324(框708)。以此方式,可執(zhí)行傳入指令320,而不需要寄存器存取來檢索其輸入操作數(shù)322、324。
在一些方面,早期執(zhí)行引擎306接下來確定傳入指令320是否為有早期執(zhí)行資格的指令320'(框710)。在一些方面,有早期執(zhí)行資格的指令320'可為早期執(zhí)行單元308所支持的相對簡單的算術(shù)、邏輯或移位運(yùn)算。一些方面可假定在由ooo處理器300解碼期間標(biāo)記有早期執(zhí)行資格的指令320'以供早期執(zhí)行引擎306檢測。
如果早期執(zhí)行引擎306在決策框710確定傳入指令320不是有早期執(zhí)行資格的指令320',那么處理可在框704處恢復(fù),來以與傳入指令320的輸入操作數(shù)322、324中的一或多者不高速緩存在早期寄存器高速緩沖存儲(chǔ)器310中的情況類似的方式處置傳入指令320。然而,如果傳入指令320是有早期執(zhí)行資格的指令320',那么處理在圖7b的框712處恢復(fù)。
現(xiàn)參看圖7b,早期執(zhí)行引擎306的早期執(zhí)行單元308可執(zhí)行有早期執(zhí)行資格的指令320'(框712)。在執(zhí)行之后,早期執(zhí)行單元308可將有早期執(zhí)行資格的指令320'的輸出值341寫入到早期寄存器高速緩沖存儲(chǔ)器310的對應(yīng)于有早期執(zhí)行資格的指令320'的輸出操作數(shù)340的條目312(1)(框714)。以此方式,可使執(zhí)行有早期執(zhí)行資格的指令320'的結(jié)果立刻可用于后續(xù)指令。
在有早期執(zhí)行資格的指令320'的早期執(zhí)行之后,早期執(zhí)行引擎306可將傳出指令346提供到ooo處理器300的后端指令管線304以供執(zhí)行(框716)。在一些方面,傳出指令346可再現(xiàn)結(jié)果(例如寫入到寄存器),就像有早期執(zhí)行資格的指令320'在后端指令管線304中執(zhí)行一樣。以此方式,寄存器132(0)到132(x)的實(shí)際內(nèi)容可與早期寄存器高速緩沖存儲(chǔ)器310的內(nèi)容保持一致。
圖8說明基于接收到的架構(gòu)寄存器值來更新圖1的早期寄存器高速緩沖存儲(chǔ)器138的額外示范性操作。舉例來說,在一些方面中,在后端指令管線114執(zhí)行指令之后,早期寄存器高速緩沖存儲(chǔ)器138可接收所述架構(gòu)寄存器值。在描述圖8時(shí),為清楚起見,參考圖5a到5c的元件。
在圖8中,操作以早期執(zhí)行引擎306接收一或多個(gè)架構(gòu)寄存器值518、522開始,所述一或多個(gè)架構(gòu)寄存器值518、522對應(yīng)于早期寄存器高速緩沖存儲(chǔ)器310的條目312(1)、312(2)中的一或多者(框800)。在一些方面,一或多個(gè)架構(gòu)寄存器值518、522可表示早期執(zhí)行引擎306所接收到的后端指令管線304所執(zhí)行的非有早期執(zhí)行資格的指令的結(jié)果。一些方面可假定一或多個(gè)架構(gòu)寄存器值518、522可表示從寄存器132(0)到132(x)獲取輸入操作數(shù)504的結(jié)果。根據(jù)一些方面,經(jīng)由反饋路徑520、524從ooo處理器300接收一或多個(gè)架構(gòu)寄存器值518、522。在接收到一或多個(gè)架構(gòu)寄存器值518、522后,早期執(zhí)行引擎306接著可更新早期寄存器高速緩沖存儲(chǔ)器310的一或多個(gè)條目312(1)、312(2),以存儲(chǔ)一或多個(gè)架構(gòu)寄存器值518、522(框802)。
為了說明用于根據(jù)圖1的早期執(zhí)行引擎102的一些方面檢測管線沖洗和從管線沖洗恢復(fù)的額外示范性操作,提供圖9。為清楚起見,在描述圖9時(shí)參考圖6的元件。在圖9中,操作以早期執(zhí)行引擎306接收管線沖洗的指示600開始(框900)。在一些方面,響應(yīng)于例如在后端指令管線304中檢測到誤預(yù)測分支等事件,可從ooo處理器300接收指示600。響應(yīng)于接收到管線沖洗的指示600,早期執(zhí)行引擎306使早期寄存器高速緩沖存儲(chǔ)器310的一或多個(gè)條目312(0)到312(3)失效(框902)。在一些方面,可使早期寄存器高速緩沖存儲(chǔ)器310的所有條目312(0)到312(3)失效,而一些方面可假定選擇性地使條目312(0)到312(3)失效。
根據(jù)本文所揭示的各方面在ooo處理器中提供早期指令執(zhí)行可提供于或集成到任何基于處理器的裝置中。實(shí)例包含(但不限于)機(jī)頂盒、娛樂單元、導(dǎo)航裝置、通信裝置、固定位置數(shù)據(jù)單元、移動(dòng)位置數(shù)據(jù)單元、移動(dòng)電話、蜂窩式電話、計(jì)算機(jī)、便攜式計(jì)算機(jī)、桌上型計(jì)算機(jī)、個(gè)人數(shù)字助理(pda)、監(jiān)視器、計(jì)算機(jī)監(jiān)視器、電視機(jī)、調(diào)諧器、無線電、衛(wèi)星無線電、音樂播放器、數(shù)字音樂播放器、便攜式音樂播放器、數(shù)字視頻播放器、視頻播放器、數(shù)字影音光盤(dvd)播放器和便攜式數(shù)字視頻播放器。
在這點(diǎn)上,圖10說明可使用圖1以及圖3a到3c的早期執(zhí)行引擎102、306的基于處理器的系統(tǒng)1000的實(shí)例。在本實(shí)例中,基于處理器的系統(tǒng)1000包含一或多個(gè)中央處理單元(cpu)1002,每一中央處理單元包含一或多個(gè)處理器1004。一或多個(gè)處理器1004可包含圖1以及圖3a到3c的早期執(zhí)行引擎(eee)102、306。cpu1002可為主裝置。cpu1002可具有耦合到處理器1004以用于快速存取臨時(shí)存儲(chǔ)的數(shù)據(jù)的高速緩沖存儲(chǔ)器1006。cpu1002耦合到系統(tǒng)總線1008,且可將基于處理器的系統(tǒng)1000中所包含的主控裝置與受控裝置互相耦合。眾所周知,cpu1002通過經(jīng)由系統(tǒng)總線1008交換地址、控制和數(shù)據(jù)信息而與這些其它裝置通信。舉例來說,cpu1002可將總線事務(wù)請求傳送到存儲(chǔ)器控制器1010(作為受控裝置的實(shí)例)。
其它主控裝置和受控裝置可連接到系統(tǒng)總線1008。如圖10中所示,作為實(shí)例,這些裝置可包含存儲(chǔ)器系統(tǒng)1012、一或多個(gè)輸入裝置1014、一或多個(gè)輸出裝置1016、一或多個(gè)網(wǎng)絡(luò)接口裝置1018,以及一或多個(gè)顯示器控制器1020。輸入裝置1014可包含任何類型的輸入裝置,包含但不限于輸入按鍵、開關(guān)、語音處理器等。輸出裝置1016可包含任何類型的輸出裝置,包含但不限于音頻、視頻、其它視覺指示符等。網(wǎng)絡(luò)接口裝置1018可為經(jīng)配置以允許將數(shù)據(jù)交換到網(wǎng)絡(luò)1022以及從網(wǎng)絡(luò)1022交換數(shù)據(jù)的任何裝置。網(wǎng)絡(luò)1022可為任何類型的網(wǎng)絡(luò),包含(但不限于)有線或無線網(wǎng)絡(luò)、私用或公共網(wǎng)絡(luò)、局域網(wǎng)(lan)、廣域網(wǎng)(wlan)和因特網(wǎng)。網(wǎng)絡(luò)接口裝置1018可經(jīng)配置以支持所要的任何類型的通信協(xié)議。存儲(chǔ)器系統(tǒng)1012可包含存儲(chǔ)器控制器1010以及一或多個(gè)存儲(chǔ)器單元1024(0到n)。
cpu1002還可經(jīng)配置以經(jīng)由系統(tǒng)總線1008存取顯示器控制器1020,以控制發(fā)送到一或多個(gè)顯示器1026的信息。顯示器控制器1020將信息發(fā)送到顯示器1026以經(jīng)由一或多個(gè)視頻處理器1028顯示,所述視頻處理器將待顯示的信息處理成適合于顯示器1026的格式。顯示器1026可包含任何類型的顯示器,包含但不限于陰極射線管(crt)、液晶顯示器(lcd)、等離子顯示器等。
所屬領(lǐng)域的技術(shù)人員將進(jìn)一步了解,結(jié)合本文中所揭示的各方面所描述的各種說明性邏輯塊、模塊、電路和算法可被實(shí)施為電子硬件、存儲(chǔ)于存儲(chǔ)器中或另一計(jì)算機(jī)可讀媒體中且由處理器或其它處理裝置執(zhí)行的指令,或此兩者的組合。作為實(shí)例,本文中所描述的主控裝置和受控裝置可用于任何電路、硬件組件、集成電路(ic)或ic芯片中。本文所揭示的存儲(chǔ)器可為任何類型和大小的存儲(chǔ)器,并且可經(jīng)配置以存儲(chǔ)所要的任何類型的信息。為了清楚地說明這種可互換性,上文已大體上關(guān)于其功能性而描述了各種說明性組件、塊、模塊、電路和步驟。如何實(shí)施此功能性取決于特定應(yīng)用、設(shè)計(jì)選項(xiàng)和/或強(qiáng)加于整個(gè)系統(tǒng)的設(shè)計(jì)約束。熟練的技術(shù)人員可針對每一特定應(yīng)用以不同方式實(shí)施所描述的功能性,但此類實(shí)施決策不應(yīng)被解釋為引起偏離本發(fā)明的范圍。
結(jié)合本文中所揭示的方面描述的各種說明性邏輯塊、模塊和電路可用以下各項(xiàng)來實(shí)施或執(zhí)行:處理器、數(shù)字信號處理器(dsp)、專用集成電路(asic)、現(xiàn)場可編程門陣列(fpga)或其它可編程邏輯裝置、離散門或晶體管邏輯、離散硬件組件,或經(jīng)設(shè)計(jì)以執(zhí)行本文中所描述的功能的其任何組合。處理器可為微處理器,但在替代方案中,處理器可為任何常規(guī)處理器、控制器、微控制器或狀態(tài)機(jī)。處理器還可實(shí)施為計(jì)算裝置的組合,例如dsp與微處理器的組合、多個(gè)微處理器的組合、一或多個(gè)微處理器結(jié)合dsp核心,或任何其它此類配置。
本文中所揭示的方面可以硬件和存儲(chǔ)于硬件中的指令來體現(xiàn),且可駐留于(例如)隨機(jī)存取存儲(chǔ)器(ram)、快閃存儲(chǔ)器、只讀存儲(chǔ)器(rom)、電可編程rom(eprom)、電可擦除可編程rom(eeprom)、寄存器、硬盤、可裝卸式磁盤、cd-rom或所屬領(lǐng)域中已知的任何其它形式的計(jì)算機(jī)可讀媒體中。示范性存儲(chǔ)媒體耦合到處理器,使得處理器可從存儲(chǔ)媒體讀取信息并且將信息寫入到存儲(chǔ)媒體。在替代方案中,存儲(chǔ)媒體可與處理器成一體式。處理器和存儲(chǔ)媒體可駐留在asic中。asic可駐留在遠(yuǎn)程站中。在替代方案中,處理器和存儲(chǔ)媒體可作為離散組件駐留在遠(yuǎn)程站、基站或服務(wù)器中。
還應(yīng)注意,描述本文中的示范性方面中的任一者中所描述的操作步驟是為了提供實(shí)例和論述??捎贸怂f明的序列之外的大量不同序列執(zhí)行所描述的操作。另外,單個(gè)操作步驟中所描述的操作實(shí)際上可在許多不同步驟中執(zhí)行。另外,可組合示范性方面中所論述的一或多個(gè)操作步驟。應(yīng)理解,如所屬領(lǐng)域的技術(shù)人員將容易顯而易見,流程圖中所說明的操作步驟可經(jīng)受眾多不同修改。所屬領(lǐng)域的技術(shù)人員還將了解,可使用多種不同技術(shù)和技法中的任一者來表示信息和信號。舉例來說,可通過電壓、電流、電磁波、磁場或磁粒子、光場或光粒子或其任何組合來表示在整個(gè)上文描述中可能參考的數(shù)據(jù)、指令、命令、信息、信號、位、符號和碼片。
提供本發(fā)明的前述描述是為了使所屬領(lǐng)域的技術(shù)人員能夠制造或使用本發(fā)明。所屬領(lǐng)域的技術(shù)人員將容易顯而易見對本發(fā)明的各種修改,且本文中界定的一般原理可應(yīng)用于其它變化而不脫離本發(fā)明的精神或范圍。因此,本發(fā)明并不希望限于本文中所描述的實(shí)例和設(shè)計(jì),而是應(yīng)被賦予與本文中所揭示的原理和新穎特征相一致的最廣范圍。