欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于可亂序執(zhí)行指令的處理器的流水線排空的制作方法

文檔序號:6341498閱讀:388來源:國知局
專利名稱:用于可亂序執(zhí)行指令的處理器的流水線排空的制作方法
技術(shù)領(lǐng)域
本發(fā)明的實施方式總體上涉及計算機技術(shù),并且更具體地,涉及用于可亂序執(zhí)行指令的處理器的流水線排空(flush)的方法和系統(tǒng)。

發(fā)明內(nèi)容
提供“發(fā)明內(nèi)容”是為了以簡化形式介紹下文將在“具體實施方式
”中詳述的概念選擇。本“發(fā)明內(nèi)容”并非意在標(biāo)識要求保護主題的關(guān)鍵特征或者必要特征,也非意在限制要求保護主題的范圍。指令流水線的一個實施方式包括第一部分和第二部分。第一部分可操作用于提供有序的第一指令和第二指令;并且第二部分可操作用于響應(yīng)于第二指令而從數(shù)據(jù)存儲位置讀取第一數(shù)據(jù),可操作用于響應(yīng)于第一指令而在讀取第一數(shù)據(jù)之后向該數(shù)據(jù)存儲位置寫入第二數(shù)據(jù),以及可操作用于響應(yīng)于在讀取第一數(shù)據(jù)之后寫入第二數(shù)據(jù)而致使流水線的某些但非全部的排空。在一個實施方式中,這種指令流水線可以通過僅排空部分流水線而非排空整個流水線來降低由流水線排空引起的處理時間損失和消耗的能量。例如,超標(biāo)量處理器可以響應(yīng)于錯誤推測(mis-speculative)裝載指令而執(zhí)行這種部分流水線排空,其中錯誤推測裝載指令是在相對于某存儲器位置的存儲指令的執(zhí)行之前相對于同一存儲器位置而執(zhí)行的裝載指令,其中在指令順序中,存儲指令在裝載指令之前到來。處理器可以這樣來執(zhí)行這種部分流水線排空從重排序緩沖區(qū)重新裝載指令發(fā)布隊列,使得流水線的取指-譯碼部分無需刷新并因此不進行刷新。


圖1是具有指令流水線的超標(biāo)量處理器的實施方式的框圖。圖2是圖1的指令流水線的一個實施方式的框圖,其中詳細示出了存儲-裝載流水線分支的一個實施方式。圖3是相對于同一存儲器位置的存儲和裝載指令的按序執(zhí)行的流程圖。圖4是相對于同一存儲器位置的存儲和裝載指令的亂序執(zhí)行的流程圖。圖5是在其間或之前執(zhí)行相對于存儲器位置的裝載指令的操作狀態(tài)期間的、圖2 的指令流水線的實施方式的框圖。圖6是圖5的操作狀態(tài)之后的、在其間發(fā)布相對于同一存儲器位置的存儲指令的操作狀態(tài)期間的、圖2的指令流水線的實施方式的框圖。圖7是圖6的操作狀態(tài)之后的、在其間由于錯誤推測而標(biāo)記先前執(zhí)行的裝載指令的操作狀態(tài)期間的、圖2的指令流水線的實施方式的框圖。圖8是圖7的操作狀態(tài)之后的、在其間排空流水線的部分而非全部的操作狀態(tài)期間的、圖2的指令流水線的實施方式的框圖。圖9是圖8的操作狀態(tài)之后的、在其間利用重排序緩沖區(qū)中存儲的指令重新填入指令發(fā)布隊列的操作狀態(tài)期間的、圖2的指令流水線的實施方式的框圖。圖10是圖9的操作狀態(tài)之后的、在其間指令流水線的操作返回正常的操作狀態(tài)期間的、圖2的指令流水線的實施方式的框圖。圖11是包括具有圖2的指令流水線的實施方式的超標(biāo)量處理器的實施方式的計算機系統(tǒng)的實施方式的框圖。
具體實施例方式超標(biāo)量處理器可以包括指令流水線,其可操作用于同時亂序執(zhí)行多個(例如,4 個)程序指令,其中“亂序”是指按照不同于指令在程序中所排次序的順序。通過同時亂序執(zhí)行多個指令,超標(biāo)量處理器能夠比只能按序執(zhí)行指令或者每次只能執(zhí)行一條指令的處理器更快地執(zhí)行軟件或固件程序。圖1是具有指令流水線10的超標(biāo)量處理器8的實施方式的框圖。如下文所述,與傳統(tǒng)指令流水線相比,通過響應(yīng)于引致排空的事件而僅僅排空流水線的部分,指令流水線 10可以降低流水線排空延遲和能耗。指令流水線10包括取指-譯碼部分12、指令隊列部分14、指令發(fā)布部分16以及指令執(zhí)行部分18。取指-譯碼部分12包括指令取回(IF)級20、指令譯碼(ID)級22以及寄存器映射(RM)級對。IF級20按照程序順序從程序存儲器(圖1中未示出)取回程序指令,其中程序順序可以是指令存儲在存儲器中的順序(在執(zhí)行分支指令時會出現(xiàn)例外),并且IF級20按照取回指令的順序?qū)⑦@些指令提供給ID級22。例如,程序計數(shù)器(圖1中未示出)存儲程序存儲器的地址,并且在每個時鐘周期期間遞增(或者遞減)該地址,使得IF級20從順序的地址取回程序指令。被執(zhí)行的分支可能導(dǎo)致以非順序地址裝載程序計數(shù)器;但是一旦重新裝載,程序計數(shù)器再次在每個時鐘周期期間遞增(或者遞減)地址,使得IF級20再次從順序地址(即,按照程序順序)取回指令,直到下一被執(zhí)行的分支。ID級22按照接收自IF級20的順序來譯碼取回的指令。RM級M通過如下方式來防止?jié)撛诘奈锢泶鎯ζ鳑_突如果一個指令附近的(例如,10條指令之內(nèi))先前指令調(diào)用了至少一個相同的物理寄存器,則重新映射該指令所調(diào)用的處理器物理寄存器(圖1中未示出)。例如,假設(shè)“加”指令調(diào)用物理寄存器R0,并且按照程序順序在該“加”指令之前5條的“減”指令也調(diào)用R0。如果確保這些指令按照程序順序執(zhí)行,則不會發(fā)生寄存器沖突。但是,因為超標(biāo)量處理器8可能亂序執(zhí)行這些指令,并且甚至可能同時執(zhí)行這些指令,因此RM級22將“加”指令重新映射到未被任何其他附近的先前指令調(diào)用的另一物理寄存器Ι η(例如,R23)。指令隊列部分14包括指令進入隊列(EQ)級沈,其包括下文結(jié)合圖2進一步討論的一個或多個指令隊列。指令發(fā)布部分16包括指令發(fā)布(1 級觀,其將來自EQ級沈的指令發(fā)布至指令執(zhí)行部分18。IS級觀可以同時發(fā)布多條指令,并且如果指令在按照程序順序的先前指令之前準備好被執(zhí)行,還可以亂序發(fā)布指令。例如,“加”指令可將兩個目前可用的值加在一起,但是先前的“減”指令可將一個值從尚不可用的另一個值中減去。因此,為了加速指令執(zhí)行,IS級洲并非在發(fā)布任何后續(xù)指令之前等待另一減法值變?yōu)榭捎?,而是可以在向指令?zhí)行部分發(fā)布“減”指令之前向指令執(zhí)行部分18發(fā)布“加”指令,即使按照程序順序“減”指令在“加”指令之前。指令執(zhí)行部分18包括一個或多個指令執(zhí)行分支3(^-3(^其每一個能夠與其他分支并行地執(zhí)行各自的指令,并且能夠并行地引退(retire)指令。例如,如果流水線10能夠同時執(zhí)行四個指令,則流水線可以包括四個或更多指令執(zhí)行分支30。此外,每個分支30可以專用于特定類型的指令。例如,分支30可以專用于執(zhí)行調(diào)用將對數(shù)據(jù)執(zhí)行的數(shù)學(xué)運算的指令(例如,加、減、乘、除),另一分支30可以專用于執(zhí)行調(diào)用訪問高速緩存或其他存儲器的指令(例如,數(shù)據(jù)裝載、數(shù)據(jù)存儲)。此外,每個分支30可以在按照程序順序位于已執(zhí)行指令之前的所有執(zhí)行也被引退或者準備好被引退之后,引退該已執(zhí)行指令。作為引退指令的一部分,分支30從EQ級沈中的所有隊列中移除指令。仍然參考圖1,描述了流水線10的一個操作模式。在流水線10的第一周期期間,IF級20按照程序順序從程序指令存儲器(圖1中未示出)取回一個或多個指令。在流水線10周期的下一周期期間,ID級22對接收自IF級20的一個或多個指令進行譯碼。在流水線10周期的下一周期期間,RM級M適當(dāng)?shù)貙邮兆訧D級22的一個或多個已譯碼指令的物理寄存器進行重映射。在流水線10的下一周期期間,EQ級沈從RM級M接收一個或多個經(jīng)重映射的指令,并將其存儲在一個或多個隊列中。在流水線10的下一周期期間,IS級觀向一個或多個相應(yīng)的指令執(zhí)行分支30發(fā)布來自EQ級沈的一個或多個指令。在流水線10的下一周期期間,從IS級觀接收相應(yīng)指令的每個指令執(zhí)行分支30 執(zhí)行該指令。繼而,在流水線10的后續(xù)周期期間,執(zhí)行相應(yīng)指令的每個分支30引退該指令。上述序列通常是重復(fù)的,直到處理器8例如停止運行程序、執(zhí)行分支或者遇到流水線排空條件。圖2是圖1的指令流水線10的實施方式的框圖,其中該框圖包括EQ級沈的實施方式和裝載/存儲執(zhí)行部分30n的實施方式。EQ級沈包括可以具有任何適當(dāng)長度的以下五個隊列/緩沖區(qū)指令發(fā)布隊列 (ISQ)40、“存儲”指令隊列(SQ)42、“裝載”指令隊列(LQ)44、重排序緩沖區(qū)(ROB)46以及分支指令隊列(BRQ) 48。ISQ 40接收由RM級M提供的所有指令,并且存儲這些指令,直到它們被IS級觀發(fā)布至執(zhí)行部分30之一。如上文結(jié)合圖1所述,IS級觀可以亂序發(fā)布指令。因此,ISQ 40 中的指令可以不按照程序順序,因為來自RM級M的指令進入ISQ中的任何空“槽”,并且這些空槽可以是非順序的。ISQ 40的實施方式的操作將在下文結(jié)合圖5-圖10詳述。SQ 42僅從RM級M接收存儲指令,但是按照程序順序保持這些存儲指令,其中存儲指令是向諸如高速緩存位置的存儲器位置寫入數(shù)據(jù)的指令。SQ 42保持存儲指令,直到存儲指令由裝載/存儲執(zhí)行部分30 執(zhí)行并且引退。SQ 42的實施方式的操作將在下文結(jié)合圖5-圖10詳述。LQ 44僅從RM級M接收裝載指令,并且按照程序順序存儲這些裝載指令,其中裝載指令是從諸如高速緩存位置的存儲器位置讀取數(shù)據(jù)、繼而向諸如處理器8的物理寄存器 R的另一存儲器位置寫入此數(shù)據(jù)的指令。LQ 44存儲裝載指令,直到該裝載指令由裝載/存儲執(zhí)行部分30n執(zhí)行和引退。LQ 44的實施方式的操作將在下文結(jié)合圖5-圖10詳述。ROB 46從RM級M接收所有指令,并且按照程序順序存儲這些指令。ROB 46存儲指令,直到該指令由執(zhí)行部分30之一執(zhí)行并且引退。ROB 46的實施方式的操作將在下文結(jié)合圖5-圖10詳述。 BRQ 48僅從RM級M接收分支指令,并且按照程序順序存儲這些分支指令,其中分支指令是例如響應(yīng)于該分支指令所規(guī)定的條件得到滿足而使IF級20的程序計數(shù)器(圖2 中未示出)“跳轉(zhuǎn)”到程序存儲器中的非順序地址的指令。BRQ 48存儲分支指令,直到該分支指令由執(zhí)行部分30之一執(zhí)行并且引退。BRQ 48的實施方式的操作將在下文結(jié)合圖5-圖 10詳述。裝載/存儲執(zhí)行部分30n包括操作數(shù)地址生成器(AG)級50,數(shù)據(jù)訪問(DA)級 52,數(shù)據(jù)寫回(DW)級M,以及指令引退/提交(CM)級56。裝載/存儲執(zhí)行級30n僅執(zhí)行從存儲器位置讀取數(shù)據(jù)或者向存儲器位置寫入數(shù)據(jù)的指令。因此,在一個實施方式中,裝載/ 存儲執(zhí)行級30n僅裝載和存儲分別存儲在LQ 44和SQ 42中的指令類型。AG級50從IS級觀接收裝載或存儲指令,并且生成指令中指定的一個或多個存儲器位置的一個或多個物理地址。例如,存儲指令可以指定向存儲器位置寫入數(shù)據(jù),但是該指令可能僅包括該存儲器位置的相對地址。AG級50將此相對地址轉(zhuǎn)換為實際地址,例如,轉(zhuǎn)換為高速緩存位置的實際地址。而且,如果要寫入的數(shù)據(jù)是從指令中指定的其他存儲器位置獲得的,則AG級50還將以類似方式生成這一其他存儲器位置的實際地址。AG級50可以使用存儲器映射查找表(圖2中未示出)或者其他傳統(tǒng)技術(shù),以根據(jù)裝載或存儲指令中包括的地址生成物理地址。DA級52訪問由存儲指令指定的目的地存儲器位置(使用由AG級50生成的實際地址),并且訪問由裝載指令指定的源存儲器位置(也使用由AG級生成的實際地址)。在第一示例中,假設(shè)存儲指令指定將來自物理寄存器Rl的數(shù)據(jù)Dl寫入高速緩存位置Cl (圖2 中未示出Dl、Rl和Cl)。DA級52是執(zhí)行此操作的級;也即,響應(yīng)于此存儲指令,DA級將來自物理寄存器Rl的數(shù)據(jù)Dl寫入高速緩存位置Cl。備選地,數(shù)據(jù)Dl本身可被包括在存儲指令中,在這種情況下,DA級52將包括在存儲指令中的數(shù)據(jù)寫入高速緩存位置Cl。在第二示例中,假設(shè)裝載指令指定從高速緩存位置C2讀取數(shù)據(jù)D2,繼而將此數(shù)據(jù)寫回存儲器位置 Ml (圖2中未示出D2、C2、Ml)。DA級是執(zhí)行此操作前一半的級;也即,響應(yīng)于此裝載指令, DA級從高速緩存位置C2讀取數(shù)據(jù)D2 ;DA級可以將D2暫時存儲在物理或其他寄存器中,直到DW級M將D2寫入存儲器位置Ml,如下所述。Dff級M有效地忽略存儲指令,并且執(zhí)行裝載指令的第二操作(例如,“寫回”部分)。例如,盡管DW級M可以從DA級52接收存儲指令,但是它除了向CM級56提供該存儲指令之外,不執(zhí)行相對于該存儲指令的操作。對于裝載指令,繼續(xù)上文的第二示例,DW級 54將數(shù)據(jù)D2從其臨時存儲位置寫入其目的地,即存儲器位置Ml。CM級56監(jiān)測其他執(zhí)行部分3(^-30^,并且僅當(dāng)按照程序順序在裝載或存儲指令之前的所有指令都已經(jīng)執(zhí)行和引退時,引退該裝載或存儲指令。例如,假設(shè)裝載指令按照程序順序是第15個。CM級56僅當(dāng)程序中的前14個指令都已執(zhí)行和引退之后,才引退該裝載指令。此外,作為引退指令的一部分,CM級56從指令被存儲的EQ級沈中的所有隊列/緩沖區(qū)移除指令。CM級56可以這樣來執(zhí)行這種移除從隊列/緩沖區(qū)實際擦除指令;或者移動與隊列/緩沖區(qū)相關(guān)聯(lián)的頭或標(biāo)記指針,使得指令處于隊列/緩沖區(qū)中將會被后續(xù)接收的指令覆蓋的部分。圖3是按照程序順序執(zhí)行的相對于同一存儲器位置的存儲和裝載指令的序列的流程圖。圖4是打亂程序順序執(zhí)行的相對于同一存儲器位置的存儲和裝載指令的序列的流程圖。參考圖2和圖3,討論圖2的流水線10的一個實施方式的操作,其中相對于同一存儲器位置的存儲指令和裝載指令按照程序順序執(zhí)行?,F(xiàn)在參考圖3的框60,在初始狀態(tài),數(shù)據(jù)值Dl存儲在實際地址Ml處的存儲器位置中。參考框62,DA級52向Ml處的存儲器位置存儲(寫入)數(shù)據(jù)值D2。參考框64,DA和DW級52和M協(xié)作以將Ml處的存儲器位置的內(nèi)容(此例中是數(shù)據(jù)值D2)裝載到實際地址M2處的另一存儲器位置。也即,DA級52從Ml處的存儲器位置讀取D2,并且DW級M將D2寫入M2處的存儲器位置。因此,在執(zhí)行框64的裝載操作之后, 數(shù)據(jù)值D2被存儲在M2處的存儲器位置。參考框66,執(zhí)行部分3(^-30^之一將M2處的存儲器位置的內(nèi)容(此例中是數(shù)據(jù)值D2)乘以數(shù)據(jù)值D3。因此,框66的乘操作生成正確的結(jié)果D2XD3,如框68所示。參考圖2和圖4,描述圖2的流水線10的一個實施方式的操作,其中打亂程序順序來執(zhí)行相對于同一存儲器位置的存儲指令和裝載指令。參考圖4的框70,在初始狀態(tài),數(shù)據(jù)值Dl存儲在Ml處的存儲器位置中;這與圖3 的框60的初始條件相同。參考框72,因為流水線10亂序執(zhí)行存儲和裝載指令,DA和DW級52和M協(xié)作以將Ml處的存儲器位置的內(nèi)容(此例中是數(shù)據(jù)值Dl)裝載到M2處的存儲器位置。參考框74,DA級52將數(shù)據(jù)值D2寫入M2處的存儲器位置。但是,因為此存儲指令在裝載指令之后執(zhí)行,DA和DW級52和M沒有如程序指示的那樣將D2裝載到Ml處的存
儲器位置。參考框76,執(zhí)行部分3(^-30^之一將M2處的存儲器位置的內(nèi)容(此示例中是數(shù)據(jù)值Dl)乘以數(shù)據(jù)值D3。因此,在此示例中,框76的乘操作生成不正確的結(jié)果D1XD3,如框78所示,而不是如圖3的框68生成D2XD3的正確結(jié)果。因此,通過打亂程序順序執(zhí)行裝載和存儲指令,流水線10可能生成錯誤的結(jié)果。仍然參考圖2到圖4,處理器8可以用來防止框78的錯誤結(jié)果的一個技術(shù)是實現(xiàn)對存儲指令的“回看”,以確定在DA級52執(zhí)行裝載指令時,存儲指令所指定的存儲器地址是否已被解析并由此是可用的。如果存儲指令所指定的存儲器地址是可用的,并且與裝載指令指定的源存儲器地址相同,則DA級52可以裝載存儲指令所指定的數(shù)據(jù)。由此,即使裝載指令在存儲指令之后執(zhí)行,裝載指令仍將裝載正確的數(shù)據(jù)。
1CN 102541511 A
更具體地,當(dāng)DA級52執(zhí)行裝載指令時,它可以“回看” SQ 42和ISQ 40以確定是否存在任何按照程序順序在裝載指令之前的未執(zhí)行存儲指令,并且可以回看AG級50以確定是否存在與裝載指令同時執(zhí)行的存儲指令。例如,參考圖4,在框72中,DA級52確定是否存在按照程序順序在裝載指令之前的未執(zhí)行存儲指令(將在框74執(zhí)行的存儲指令)。如果存在這樣的存儲指令,則DA級52確定與該存儲指令所指定的存儲器地址相對應(yīng)的實際存儲器地址是否已經(jīng)被解析,并且由此是可用的。例如,AG級50可能已經(jīng)結(jié)合執(zhí)行涉及同一存儲器地址的先前裝載或存儲指令而解析了該存儲指令所指定的實際存儲器地址。例如,繼續(xù)上文參考圖4的示例,DA級52確定存儲器位置Ml的實際存儲器地址是否已經(jīng)已知。如果對應(yīng)于存儲指令的實際存儲器地址是可用的,則DA級52接下來確定此實際存儲器地址是否與對應(yīng)于裝載指令的實際存儲器地址相同。例如,繼續(xù)上文的示例,DA級 52確定實際地址Ml由裝載指令和存儲指令二者指定。如果對應(yīng)于存儲指令的實際存儲器地址與對應(yīng)于裝載指令的實際存儲器地址相同,則響應(yīng)于裝載指令,DA級52可以不從該實際存儲器地址讀取數(shù)據(jù),而是代之以直接從存儲指令讀取數(shù)據(jù)。例如,繼續(xù)上文的示例,取代響應(yīng)于裝載指令而從Ml處的位置讀取不正確的數(shù)據(jù)Dl,DA級52從存儲指令讀取數(shù)據(jù)D2(或者從當(dāng)前存儲D2的存儲器位置,此存儲器位置由存儲指令指定)。由此,流水線10仍生成如圖3的框68的正確結(jié)果D2XD3。不幸的是,只有在對應(yīng)于存儲指令的實際存儲器地址可用于DA級52同時該DA級正在執(zhí)行對應(yīng)于同一地址的裝載指令時,這一技術(shù)才可能有效。但是,如果對應(yīng)于存儲指令的實際存儲器地址不可用(例如,當(dāng)DA級52正在執(zhí)行對應(yīng)于Ml的裝載指令時,對應(yīng)于存儲指令的實際地址Ml不可用于DA級52),則響應(yīng)于流水線“認識到”它已經(jīng)在執(zhí)行了相對于某存儲器位置的裝載指令之后執(zhí)行了相對于同一存儲器位置的存儲指令(其中裝載指令按照程序順序在存儲指令之后到來),處理器可能排空整個流水線10。例如,當(dāng)DA級52在框74中檢測到它已經(jīng)在它和DW級M在框72中執(zhí)行裝載指令之后執(zhí)行了存儲指令,并且檢測到對應(yīng)于該存儲指令的實際地址在裝載指令在框 72中被執(zhí)行時不可用時,它可以信號通知處理器8排空整個流水線10,以利用裝載指令的地址重新裝載程序計數(shù)器(在圖2和圖4中未示出),并且從這一處理點重新開始流水線的操作。但是,排空整個流水線10可能增加執(zhí)行程序所需的處理時間,并且還可能增加處理器消耗的能量,后者在電池供電的設(shè)備中可能是特別不期望的。然而,參考圖5-圖10,在處理器8可以用來在來自某存儲器位置的裝載相對于針對同一存儲器位置的存儲以打亂程序順序執(zhí)行時防止錯誤結(jié)果的技術(shù)的實施方式中,處理器僅排空流水線10的一部分,并且從ROB 46重新填入被排空的流水線部分。這種實施方式可以減少由排空消耗的處理時間,并且可以由此降低在排空的情況下執(zhí)行程序所需的處理時間。此外,這種實施方式可以降低處理器8響應(yīng)于排空而消耗的能量。圖5-圖10是在由于裝載指令相對于針對同一存儲器地址的存儲指令以打亂程序順序執(zhí)行而引起的流水線排空之前、期間和之后的各個操作狀態(tài)中,圖2的流水線10的實施方式的框圖。在圖5-圖10中,指令被標(biāo)記為In,其中η指示指令在程序順序中的位置。 此外,指令115是針對實際存儲器地址Ml處的存儲器位置(圖5-圖10中未示出)的存儲指令,并且指令116是從實際地址Ml處的存儲器位置的裝載指令。地址Ml處的存儲器位置可以是可由存儲和裝載指令訪問的高速緩存位置或者任何其他存儲器位置。參考圖5,在圖5中表示的流水線10的操作狀態(tài)之前,冊級M向EQ級沈提供指令11-119。此外,一個或多個執(zhí)行部分30f30n(圖5中僅示出了部分30η)已經(jīng)引退了指令11-111(由這些指令在ROB 46中不存在指示),13級觀已經(jīng)發(fā)布了未引退指令112、 114、116-117和119(這些指令是未引退的,由其在ISQ 40中不存在并且由其在SQ 42、LQ 44和ROB 46中的相應(yīng)存在來指示),并且IS級尚未發(fā)布指令113、115和118(由這些指令在ISQ中的存在來指示)。接下來,在圖5表示的流水線10的操作狀態(tài)期間,DA級52執(zhí)行裝載指令116,確定存儲指令115尚未執(zhí)行,并且確定對應(yīng)于115的實際地址(此示例中是實際地址Ml)尚不可用。因為對應(yīng)于115的實際地址Ml不可用,DA級52沒有認識到裝載指令116和存儲指令115訪問Ml處的同一存儲器位置;因此,DA級通過讀取Ml處的位置的內(nèi)容來執(zhí)行裝載指令116。也即,流水線10相對于存儲指令115亂序執(zhí)行裝載指令116 ;如果保持未檢查, 此亂序執(zhí)行可能導(dǎo)致錯誤的計算結(jié)果,如上文結(jié)合圖2和圖4所討論的。而且,在此操作狀態(tài)期間,IS級觀向執(zhí)行部分3(^-30^之一發(fā)布分支指令113。參考圖6,在圖5表示的操作狀態(tài)之后的周期的下一操作狀態(tài)中,Dff級M通過將 DA級52從地址Ml處的源存儲器位置讀取的內(nèi)容裝載到116所指定的目的地存儲器位置 (例如,實際地址M2處的存儲器位置),從而執(zhí)行裝載指令16的寫回部分。此外,在此操作狀態(tài)中,冊級對向130 40和ROB 46提供四個附加指令120-123。因為120是裝載指令而 122是存儲指令,RM級M還將120和122分別提供給U! 44和SQ 42。而且,IS級28向 AG級50發(fā)布存儲指令115,并且執(zhí)行部分3(^-30^ (圖2)之一執(zhí)行分支指令113 (在此示例中假設(shè),由指令113指示的分支未被執(zhí)行)。參考圖7,在圖6中表示的操作狀態(tài)之后的周期的下一操作狀態(tài)中,冊級M向ISQ 40和ROB 46提供四個指令124-127,并且IS級28向執(zhí)行部分3(^-30^ (圖2、之一發(fā)布指令121。此外,執(zhí)行部分3(^-30^引退指令112-114。仍然參考圖7,在執(zhí)行存儲指令115的同時,DA級52確定響應(yīng)于指令115將向其寫入數(shù)據(jù)值Dl的Ml處的存儲器位置已經(jīng)被按照程序順序在指令115之后的裝載指令116 讀取。響應(yīng)于此確定,DA級52設(shè)置“裝載錯誤推測(load-mis-speculation)”標(biāo)記,并且將此標(biāo)記與裝載指令116相關(guān)聯(lián)。DA級52可以將此標(biāo)記設(shè)置在116所處的LQ 44的槽中、 116所處的ROB 46的槽中、這兩個槽中或者某些其他位置。但是,出于示例目的,假設(shè)DA級 52將此標(biāo)記設(shè)置在116所處的LQ 44的槽中。參考圖8,在圖7中表示的操作狀態(tài)之后的一個或多個周期的下一操作狀態(tài)中,CM 級56引退存儲指令115,并且嘗試引退裝載指令116。但是,因為針對裝載指令116設(shè)置了 “裝載錯誤推測”標(biāo)記,CM級56無法引退116。相反,CM級56使處理器8排空ISQ 40、IS 級28、AG級50、DA級52、Dff級M和CM級56,以及其他執(zhí)行部分3(^-30^的級(圖2)。 此外,CM級56使處理器8停頓(stall)但不排空IF級20、ID級22、RM級M以及EQ級 26之前的流水線10的任何其他級。處理器8可以通過任何適當(dāng)?shù)姆绞綀?zhí)行排空和停頓。 與排空整個流水線10的處理器相比,處理器8通過僅排空IS級28、ISQ 40以及執(zhí)行部分 3(^-3 的級可以降低由排空引起的程序處理時間的增加,并且可以降低由排空引起的耗能。例如,至少因為級20、22和M無需在排空后重新填入,部分流水線排空可以降低處理時間和能耗。仍然參考圖8,在流水線10的部分排空之后,至少指令116-127在ROB 46中。參考圖9,在圖8中表示的操作狀態(tài)之后的周期的下一操作狀態(tài)中,EQ級沈從! ( 46向ISQ 40裝載按照程序順序的前四條指令,在此例中是116-119,并且保持級20、22和 M停頓。備選地,如果EQ級沈可操作用于一次向ISQ 40裝載多于四條指令,則EQ級可以在排空之后立即向ISQ同時裝載ROB 46中的所有指令116-127。參考圖10,在圖9中表示的操作狀態(tài)之后的周期的下一操作狀態(tài)中,15級觀向八6 50發(fā)布指令116,并且向相應(yīng)的其他執(zhí)行部分3(^-30^發(fā)布例如指令119、121和122。此夕卜,EQ級 向ISQ 40裝載其余指令(此例中為IM-I27),并且處理器停止停頓(im-stall) 級20、22和M,使得在后續(xù)操作狀態(tài)中,RM級M可以再次向EQ級沈提供附加指令。因為級20、22和M未被排空,因此與完全排空流水線的關(guān)聯(lián)延遲相比,與重新開始流水線10的正常操作相關(guān)聯(lián)的延遲得以降低。如上所述,這一延遲降低可以降低由于排空而損失的處理時間,并且可以降低由于排空而消耗的能量。在圖10表示的操作狀態(tài)之后的一個和兩個周期的下一操作狀態(tài)中,DA和DW級52 和M分別執(zhí)行裝載指令116的讀取和寫回部分。但是,因為存儲指令115在排空之前已經(jīng)執(zhí)行,裝載指令從地址Ml處的存儲器位置讀取正確的數(shù)據(jù)值,使得根據(jù)此裝載數(shù)據(jù)值而生成的后續(xù)結(jié)果是正確的。圖11是計算機系統(tǒng)60的實施方式的框圖,其包括圖1的超標(biāo)量處理器8的實施方式,該超標(biāo)量處理器8的實施方式實現(xiàn)上文結(jié)合圖5-圖10描述的部分流水線排空的實施方式。盡管將系統(tǒng)60描述為計算機系統(tǒng),但是其可以是部分流水線排空處理器的實施方式可適用的任何系統(tǒng)。系統(tǒng)60包括計算電路62,計算電路62除了包括處理器8之外還包括耦合至處理器的存儲器64,并且系統(tǒng)還包括輸入設(shè)備66、輸出設(shè)備68以及數(shù)據(jù)存儲設(shè)備70。處理器8可以響應(yīng)于存儲器64中存儲的程序指令而處理數(shù)據(jù),并且還可以將數(shù)據(jù)存儲在存儲器中以及從存儲器中裝載數(shù)據(jù),或者可以將數(shù)據(jù)從存儲器的一個位置裝載到存儲器的另一位置。而且,處理器8可以執(zhí)行處理器或控制器所能執(zhí)行的任何功能。存儲器64與處理器8可以位于相同或不同的管芯上,并且可以存儲如上所述的程序指令或數(shù)據(jù)。當(dāng)與處理器8布置在相同管芯上時,存儲器64可以是高速緩存存儲器。此夕卜,存儲器64可以是非易失性存儲器、易失性存儲器,或者可以包括非易失性和易失性存儲器單元二者。輸入設(shè)備(例如,鍵盤、鼠標(biāo))66允許例如人類操作者向計算電路62提供數(shù)據(jù)、編程以及命令。輸出設(shè)備(例如,顯示器、打印機、揚聲器)68允許計算電路62以例如人類操作者可感知的形式提供數(shù)據(jù)。而且,數(shù)據(jù)存儲設(shè)備(例如,閃存驅(qū)動、硬盤驅(qū)動、RAM、光學(xué)驅(qū)動)70允許例如程序和數(shù)據(jù)的非易失性存儲。通過上文將會理解,盡管已經(jīng)出于說明目的而描述了特定實施方式,但是可以在不脫離本公開的精神和范圍的情況下進行各種修改。此外,當(dāng)針對特定實施方式公開備選方案的情況下,即使沒有特別聲明,此備選方案也同樣適用于其他實施方式。
權(quán)利要求
1.一種指令流水線,包括第一部分,可操作用于提供有序的第一指令和第二指令;以及第二部分,可操作用于響應(yīng)于所述第二指令,從數(shù)據(jù)存儲位置讀取第一數(shù)據(jù),響應(yīng)于所述第一指令,在讀取所述第一數(shù)據(jù)之后向所述數(shù)據(jù)存儲位置寫入第二數(shù)據(jù),以及響應(yīng)于在讀取所述第一數(shù)據(jù)之后寫入所述第二數(shù)據(jù),致使所述流水線的某些但非全部的排空。
2.如權(quán)利要求1所述的指令流水線,其中所述第一部分可操作用于按照所述有序的第一指令和第二指令在軟件程序中所處位置的順序來提供所述第一指令和所述第二指令。
3.如權(quán)利要求1所述的指令流水線,其中所述第一部分包括指令取回級。
4.如權(quán)利要求1所述的指令流水線,其中所述第一部分包括指令譯碼級。
5.如權(quán)利要求1所述的指令流水線,其中所述第一部分包括寄存器映射級。
6.如權(quán)利要求1所述的指令流水線,其中所述第二部分包括數(shù)據(jù)訪問級。
7.如權(quán)利要求1所述的指令流水線,其中所述第二部分可操作用于響應(yīng)于在從所述數(shù)據(jù)存儲位置讀取所述第一數(shù)據(jù)之后向所述數(shù)據(jù)存儲位置寫入所述第二數(shù)據(jù),將標(biāo)記與所述第二指令相關(guān)聯(lián);以及響應(yīng)于所述標(biāo)記而致使所述排空。
8.如權(quán)利要求1所述的指令流水線,還包括第三部分,包括第一指令隊列和第二指令隊列,可操作用于從所述第一部分接收所述第一指令和所述第二指令;以及其中所述第二部分可操作用于從所述第一隊列和所述第二隊列中的一個接收所述第一指令和所述第二指令;以及響應(yīng)于所述第二部分在讀取所述第一數(shù)據(jù)之后寫入所述第二數(shù)據(jù),排空所述第一隊列和所述第二隊列中的所述一個,并且從所述第一隊列和所述第二隊列中的另一個向所述第一隊列和所述第二隊列中的所述一個裝載所述第二指令。
9.如權(quán)利要求1所述的指令流水線,還包括 第三部分,包括第一指令隊列和第二指令隊列,可操作用于從所述第一部分接收所述第一指令和所述第二指令;以及第三指令隊列,可操作用于從所述第一部分接收所述第二指令;以及其中所述第二部分可操作用于從所述第一隊列和所述第二隊列中的一個接收所述第一指令和所述第二指令,以及可操作用于響應(yīng)于在讀取所述第一數(shù)據(jù)之后寫入所述第二數(shù)據(jù)而將標(biāo)記與所述第三指令隊列中的所述第二指令相關(guān)聯(lián);以及響應(yīng)于所述標(biāo)記,排空所述第一隊列和所述第二隊列中的所述一個,并且從所述第一隊列和所述第二隊列中的另一個向所述第一隊列和所述第二隊列中的所述一個裝載所述第二指令。
10.如權(quán)利要求1所述的指令流水線,還包括其中所述第一指令包括存儲指令; 其中所述第二指令包括裝載指令; 第三部分,包括重排序緩沖區(qū)和指令發(fā)布隊列,可操作用于從所述第一部分接收所述存儲指令和裝載指令;以及裝載指令隊列,可操作用于從所述第一部分接收所述裝載指令;以及其中所述第二部分包括數(shù)據(jù)訪問級,可操作用于從所述指令發(fā)布隊列接收所述存儲指令和裝載指令,在執(zhí)行所述存儲指令之前執(zhí)行所述裝載指令,以及響應(yīng)于在執(zhí)行所述裝載指令之后執(zhí)行所述存儲指令而將標(biāo)記與所述裝載指令隊列中的所述裝載指令相關(guān)聯(lián);以及指令提交級,可操作用于響應(yīng)于所述標(biāo)記而致使所述指令發(fā)布隊列的排空、以及所述裝載指令從所述重排序緩沖區(qū)向所述指令發(fā)布隊列的重新裝載。
11.如權(quán)利要求1所述的指令流水線,還包括 其中所述第一指令包括存儲指令;其中所述第二指令包括裝載指令; 第三級,包括重排序緩沖區(qū)和指令發(fā)布隊列,可操作用于從所述第一部分接收所述存儲指令和裝載指令以及第三有序指令;以及裝載指令隊列,可操作用于從所述第一部分接收所述裝載指令;以及其中所述第二部分包括數(shù)據(jù)訪問級,可操作用于從所述指令發(fā)布隊列接收所述存儲指令和裝載指令,在執(zhí)行所述存儲指令之前執(zhí)行所述裝載指令,以及響應(yīng)于在執(zhí)行所述裝載指令之后執(zhí)行所述存儲指令而將標(biāo)記與所述裝載指令隊列中的所述裝載指令相關(guān)聯(lián);以及指令提交級,可操作用于響應(yīng)于所述標(biāo)記而致使所述指令發(fā)布隊列的排空、以及所述裝載指令和所述第三指令從所述重排序緩沖區(qū)向所述指令發(fā)布隊列的重新裝載。
12.如權(quán)利要求1所述的指令流水線,其中所述數(shù)據(jù)存儲位置包括高速緩存位置。
13.如權(quán)利要求1所述的指令流水線,其中所述第二部分可操作用于致使所述第二部分的排空。
14.如權(quán)利要求1所述的指令流水線,其中所述第二部分可操作用于響應(yīng)于所述第二部分在讀取所述第一數(shù)據(jù)之后寫入所述第二數(shù)據(jù),而致使除所述第一部分之外的流水線部分的排空。
15.一種處理器,包括 指令流水線,包括第一部分,可操作用于提供有序的第一指令和第二指令; 以及第二部分,可操作用于響應(yīng)于所述第二指令而從數(shù)據(jù)存儲位置讀取第一數(shù)據(jù),以及可操作用于響應(yīng)于所述第一指令而在讀取所述第一數(shù)據(jù)之后向所述數(shù)據(jù)存儲位置寫入第二數(shù)據(jù),以及響應(yīng)于在讀取所述第一數(shù)據(jù)之后寫入所述第二數(shù)據(jù),致使所述流水線的某些但非全部的排空。
16.如權(quán)利要求15所述的處理器,還包括存儲器,其耦合至所述流水線,并且可操作用于存儲所述第一指令和第二指令。
17.一種系統(tǒng),包括處理器,包括指令流水線,包括第一部分,可操作用于提供有序的第一指令和第二指令;以及第二部分,可操作用于響應(yīng)于所述第二指令而從數(shù)據(jù)存儲位置讀取第一數(shù)據(jù),以及可操作用于響應(yīng)于所述第一指令而在讀取所述第一數(shù)據(jù)之后向所述數(shù)據(jù)存儲位置寫入第二數(shù)據(jù),以及響應(yīng)于在讀取所述第一數(shù)據(jù)之后寫入所述第二數(shù)據(jù),致使所述流水線的某些但非全部的排空;以及耦合至所述處理器的集成電路。
18.如權(quán)利要求17所述的系統(tǒng),其中所述處理器和所述集成電路布置在相同管芯上。
19.如權(quán)利要求17所述的系統(tǒng),其中所述處理器和所述集成電路布置在各自的管芯上。
20.如權(quán)利要求17所述的系統(tǒng),其中所述集成電路包括存儲器。
21.如權(quán)利要求17所述的系統(tǒng),其中所述處理器可操作用于控制所述集成電路。
22.—種方法,包括確定處理流水線在響應(yīng)于第一指令而寫入存儲器位置之前響應(yīng)于第二指令而讀取所述存儲器位置,其中所述處理流水線在所述第二指令之前取回所述第一指令;以及響應(yīng)于所述確定,排空所述處理流水線的至少一部分但非所有部分。
23.如權(quán)利要求22所述的方法,其中確定所述處理流水線讀取所述存儲器位置包括 確定所述處理流水線在所述處理流水線響應(yīng)于所述第一指令而寫入所述存儲器位置之前讀取所述存儲器位置。
24.如權(quán)利要求22所述的方法,其中確定所述處理流水線讀取所述存儲器位置包括 確定所述處理流水線在所述處理流水線響應(yīng)于所述第一指令而正在寫入所述存儲器位置的同時讀取所述存儲器位置。
25.如權(quán)利要求22所述的方法,其中確定所述處理流水線讀取所述存儲器位置包括 確定所述處理流水線在所述處理流水線響應(yīng)于所述第一指令而寫入所述存儲器位置之后讀取所述存儲器位置。
26.如權(quán)利要求22所述的方法,其中確定所述處理流水線讀取所述存儲器位置包括 確定所述處理流水線在所述處理流水線執(zhí)行所述第一指令之前讀取所述存儲器位置。
27.如權(quán)利要求22所述的方法,其中確定所述處理流水線讀取所述存儲器位置包括 確定所述處理流水線在所述處理流水線正在執(zhí)行所述第一指令的同時讀取所述存儲器位置。
28.如權(quán)利要求22所述的方法,其中確定所述處理流水線讀取所述存儲器位置包括 確定所述處理流水線在所述處理流水線執(zhí)行所述第一指令之后讀取所述存儲器位置。
29.如權(quán)利要求22所述的方法,其中確定所述處理流水線讀取所述存儲器位置包括確定所述處理流水線響應(yīng)于所述處理流水線執(zhí)行所述第一指令而讀取所述存儲器位置。
30.如權(quán)利要求22所述的方法,其中排空所述流水線的至少一部分包括排空所述流水線的進入隊列之后的至少一部分。
31.如權(quán)利要求22所述的方法,其中排空所述流水線的至少一部分包括不排空所述流水線的進入隊列之前的部分。
32.如權(quán)利要求22所述的方法,還包括響應(yīng)于所述排空,從所述流水線的重排序緩沖區(qū)重新填入所述流水線的發(fā)布隊列。
33.如權(quán)利要求22所述的方法,還包括響應(yīng)于所述排空,從所述第二指令開始重新填入所述流水線的發(fā)布隊列。
34.如權(quán)利要求22所述的方法,還包括響應(yīng)于所述排空,停頓所述流水線的未排空部分。
35.如權(quán)利要求22所述的方法,還包括其中排空包括不排空所述流水線中位于所述流水線的發(fā)布隊列之前的部分; 停頓所述流水線中位于所述發(fā)布隊列之前的部分,直到所述流水線的重排序緩沖區(qū)中的所有指令已被裝載到所述發(fā)布隊列。
36.如權(quán)利要求22所述的方法,還包括其中排空包括不排空所述流水線中位于所述流水線的發(fā)布隊列之前的部分; 停頓所述流水線中位于所述發(fā)布隊列之前的部分,直到所述流水線的重排序緩沖區(qū)中的所有指令已被裝載到所述發(fā)布隊列,并且直到所述發(fā)布隊列具有開放槽。
37.如權(quán)利要求22所述的方法,還包括響應(yīng)于所述確定而標(biāo)記所述第二指令;以及其中排空所述流水線的至少一部分包括響應(yīng)于所述標(biāo)記而排空所述至少一部分。
全文摘要
本發(fā)明的實施方式涉及用于可亂序執(zhí)行指令的處理器的流水線排空。具體地,指令流水線的一個實施方式包括第一部分和第二部分。第一部分可操作用于提供有序的第一指令和第二指令;并且第二部分可操作用于響應(yīng)于第二指令而從數(shù)據(jù)存儲位置讀取第一數(shù)據(jù),可操作用于響應(yīng)于第一指令而在讀取第一數(shù)據(jù)之后向該數(shù)據(jù)存儲位置寫入第二數(shù)據(jù),以及可操作用于響應(yīng)于在讀取第一數(shù)據(jù)之后寫入第二數(shù)據(jù)而致使流水線的某些但非全部的排空。這種指令流水線可以通過僅排空部分流水線而非排空整個流水線來降低由流水線排空引起的處理時間損失和消耗的能量。
文檔編號G06F9/38GK102541511SQ20101062475
公開日2012年7月4日 申請日期2010年12月30日 優(yōu)先權(quán)日2010年12月30日
發(fā)明者吳永強, 孫紅霞, 朱鵬飛, 王凱峰 申請人:世意法(北京)半導(dǎo)體研發(fā)有限責(zé)任公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
泰兴市| 宁都县| 阿鲁科尔沁旗| 安丘市| 安康市| 潍坊市| 栖霞市| 三明市| 明水县| 光泽县| 梁河县| 马山县| 鹤岗市| 仁布县| 黄大仙区| 辽阳县| 成武县| 梁河县| 昆明市| 大城县| 乐安县| 临邑县| 青河县| 鄂尔多斯市| 东乡族自治县| 开化县| 怀安县| 黔江区| 津市市| 卓资县| 革吉县| 阿城市| 皮山县| 南昌县| 高邮市| 双桥区| 星座| 岑巩县| 三台县| 开阳县| 萝北县|