專利名稱:延遲加載未命中刷新直到發(fā)出相關(guān)指令的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及流水線處理器體系結(jié)構(gòu),更具體地說,涉及延遲加載未命中刷新(flush)以及伴隨的重新取回和重新執(zhí)行。
背景技術(shù):
數(shù)十年來,微處理器開發(fā)人員一直依靠不斷增加的晶體管密度和改進的體系結(jié)構(gòu)效率的結(jié)合來使現(xiàn)代微處理器獲得更高的吞吐量。在已使用的體系結(jié)構(gòu)中包含流水線體系結(jié)構(gòu),其中各個分離的功能單元通常按次序執(zhí)行分配的任務(wù)。
一種通常改進流水線處理器性能的技術(shù)是通過從響應(yīng)的高速緩存成功檢索數(shù)據(jù)來推測性地假設(shè)發(fā)生存取存儲器或加載。因此,在大部分時間內(nèi),指令隨時準備在存儲器傳送數(shù)據(jù)或操作數(shù)時執(zhí)行。遺憾的是,有時目標數(shù)據(jù)并未駐留在高速緩存中,并且存儲單元會向流水線處理器發(fā)出“加載未命中”信號。
微處理器設(shè)計人員已采用多種技術(shù)或后備機制來處理假設(shè)失敗時的情況。一種此類后備機制是在未及時完成的加載指令后重新啟動。當同時出現(xiàn)一級和二級高速緩存未命中時,需要超過100個處理器周期來等待通過從片外檢索數(shù)據(jù)來完成加載指令。
另一種后備機制提供了昂貴的指令刷新標記機制來重新啟動相關(guān)的指令。標記機制會占用微處理器芯片上的大量區(qū)域。
發(fā)明內(nèi)容
本發(fā)明提供了從流水線刷新寄存器訪問指令的方法和裝置。流水線處理器具有電路來檢測流水線的發(fā)出級中寄存器訪問指令的存在。處理器在后續(xù)的級中檢測同一寄存器的加載指令。在檢測到同一寄存器的兩類指令時,處理器在跟蹤寄存器中標記與所述發(fā)出級和所述后續(xù)級關(guān)聯(lián)的位。處理器可以重復地將指令從流水線中的一個級移動到另一個級。處理器將所述寄存器訪問指令傳播到另一個級。然后,處理器將所述位傳播到另一個級。接著,處理器將所述寄存器訪問傳播到刷新級。然后,最后的傳播將所述位移動所述到刷新級。處理器刷新所述寄存器訪問指令。
在所附權(quán)利要求中說明了被認為是本發(fā)明特性的新穎特征。但是,當結(jié)合附圖閱讀時,通過參考以下對示例性實施例的詳細說明,可以最佳地理解發(fā)明本身及其優(yōu)選使用方式、進一步的目的和優(yōu)點,這些附圖是圖1是根據(jù)本發(fā)明的示例性實施例的通用信息處理系統(tǒng);圖2A是根據(jù)本發(fā)明的示例性實施例的邏輯的詳細圖示;圖2B是根據(jù)本發(fā)明的示例性實施例的邏輯的簡化圖示;圖3示出了根據(jù)本發(fā)明的示例性實施例的主要流水線級;圖4A是根據(jù)本發(fā)明的示例性實施例的在任意時刻通過流水線級的指令的進度;圖4B示出了根據(jù)本發(fā)明的示例性實施例的在出現(xiàn)加載未命中時已離開EX7級的指令的未命中隊列;圖5A是根據(jù)本發(fā)明的示例性實施例的在任意時刻通過流水線級的指令的進度;圖5B示出了根據(jù)本發(fā)明的示例性實施例的在出現(xiàn)加載命中時已離開EX7級的指令的未命中隊列;圖6A是根據(jù)本發(fā)明的示例性實施例的在任意時刻通過流水線級的指令的進度;圖6B示出了根據(jù)本發(fā)明的示例性實施例的在出現(xiàn)加載未命中時已離開跟蹤寄存器最低有效位級的指令的未命中隊列;
圖7A是根據(jù)本發(fā)明的示例性實施例的步驟的流程圖;圖7B是根據(jù)本發(fā)明的另一個示例性實施例的步驟的流程圖;圖7C是根據(jù)本發(fā)明的另一個示例性實施例的步驟的流程圖。
具體實施例方式
現(xiàn)在參考圖1,圖1示出了其中可以實現(xiàn)本發(fā)明的實施例的信息處理系統(tǒng)的方塊圖。在所示實例中,信息處理系統(tǒng)100采用集線器體系結(jié)構(gòu),所述集線器體系結(jié)構(gòu)包括北橋和存儲器控制集線器(MCH)108以及南橋和輸入/輸出(I/O)控制集線器(ICH)110。處理單元102、主存儲器104和圖形處理器118連接到北橋和存儲器控制集線器108。圖形處理器118可以通過加速圖形端口(AGP)連接到北橋和存儲器控制集線器108。
在所示實例中,局域網(wǎng)(LAN)適配器112、音頻適配器116、鍵盤和鼠標適配器120、調(diào)制解調(diào)器122、只讀存儲器(ROM)124、通用串行總線(USB)端口和其他通信端口132以及PCI/PCIe設(shè)備134通過總線138連接到南橋和I/O控制集線器110。PCI/PCIe設(shè)備可以包括例如用于筆記本計算機的以太網(wǎng)適配器、插卡以及PC卡。PCI使用卡總線控制器,而PCIe并不使用卡總線控制器。ROM 124可以例如是閃速二進制輸入/輸出系統(tǒng)(BIOS)。
硬盤驅(qū)動器126和CD-ROM驅(qū)動器130通過總線140連接到南橋和I/O控制器集線器110。硬盤驅(qū)動器126和CD-ROM驅(qū)動器130可以例如使用電子集成驅(qū)動器(IDE)或串行高級技術(shù)附件(SATA)接口。超級I/O(SIO)設(shè)備136可被連接到南橋和I/O控制器集線器110。
操作系統(tǒng)在處理器102上運行并協(xié)調(diào)和控制圖1中的信息處理系統(tǒng)100內(nèi)的各種組件。所述操作系統(tǒng)可以是可從市場上購買的操作系統(tǒng),如可從MicrosoftTM公司購買的Windows XP。雖然圖1中示出了一個采用處理單元102的信息處理系統(tǒng),但是所述信息處理系統(tǒng)可以采用許多形式。例如,信息處理系統(tǒng)100可以采取桌面服務(wù)器、便攜式電腦或其他板型計算機或數(shù)據(jù)處理系統(tǒng)的形式。所述系統(tǒng)還可以采用其他板型,如個人數(shù)字助理(PDA)、游戲設(shè)備、便攜式電話設(shè)備、通信設(shè)備或包括處理器和存儲器的其他設(shè)備。
在本發(fā)明的示例性實施例中,處理器(如處理器102)在運行上具有關(guān)聯(lián)的流水線處理器,并且在信息處理系統(tǒng)中,所述處理器可以在運行上允許指令在觸發(fā)刷新之前完全進入處理器流水線。在所述過程中,示例性實施例無需如現(xiàn)有技術(shù)中那樣在許多級處使用刷新比較器。此外,示例性實施例能夠在加載未命中之后但是在完成任何與加載數(shù)據(jù)相關(guān)的指令之前處理指令。
圖2A示出了可以在本發(fā)明的示例性實施例中運行的邏輯部分的細節(jié)。邏輯200可以接收三個輸入刷新位輸入205;加載未命中信號輸入207;以及跟蹤寄存器最低有效位輸入209。刷新位輸入205可以來自先前級刷新鎖存器。跟蹤寄存器最低有效位也稱為EX7位,因為該位與EX7級相關(guān)聯(lián)。加載未命中信號輸入207和跟蹤寄存器最低有效位輸入209被提供給邏輯“與”門203,“與”門203提供的輸出也是邏輯“或”門201的輸入?!芭c”門輸出是邏輯200的中間結(jié)果。邏輯“或”門201從刷新位輸入205獲得第二個輸入并將結(jié)果邏輯211提供給邏輯200以外的電路。圖2B示出了邏輯200的簡化版本。在此實例中,圖形地示出了邏輯結(jié)果211具有指向遠離邏輯200的箭頭。加載未命中信號輸入207和跟蹤寄存器最低有效位輸入209示為進入簡化邏輯圖的短邊。
圖3示出了根據(jù)本發(fā)明的示例性實施例的主要流水線級。示例性級399可以包括功能單元級(例如,執(zhí)行單元級EX1 311),所述功能單元級可以允許處理并具有足以保存中間執(zhí)行結(jié)果的鎖存器或其他存儲。此外,示例性級399可以包括相應(yīng)的刷新鎖存器341、一個或多個關(guān)聯(lián)位的關(guān)聯(lián)跟蹤寄存器361以及控制刷新鎖存器341將已存儲的位傳播到后續(xù)級的方式的邏輯372。與示例性級399相比的先前級中的邏輯371可以對先前級的刷新鎖存器339執(zhí)行邏輯“或”以形成置于刷新鎖存器341中的邏輯結(jié)果。只有與示例性級399相比,先前級的刷新鎖存器339或先前的刷新鎖存器才是在先的。其他級可以具有其他鎖存器,所述鎖存器包括先前級刷新鎖存器(與那些其他級相比)。
相反地,與示例性級399相比的后續(xù)級中的刷新鎖存器343可以從邏輯372接收輸出位。因此,后續(xù)級是從當前級的跟蹤寄存器接收數(shù)據(jù)的級。此外,與示例性級399相比,刷新鎖存器339是先前的刷新鎖存器。此外,與示例性級399相比,刷新鎖存器343是后續(xù)刷新鎖存器。
時鐘信號分布在圖3的設(shè)備間。時鐘上升沿可以將數(shù)據(jù)和指令從一個級到下一個級的傳播同步。因此,時鐘可以導致功能單元中的指令與跟蹤寄存器中的關(guān)聯(lián)位在同一時刻傳播。通常以兩種方式發(fā)生傳播。第一,時鐘觸發(fā)指令和關(guān)聯(lián)位以從當前級前進到后續(xù)級,其中關(guān)聯(lián)位可以映射到后續(xù)級的寄存器。可以將關(guān)聯(lián)位存儲在跟蹤寄存器和刷新鎖存器中。映射過程可以包括將除了寄存器位的最低有效位之外的所有其他位同步傳輸?shù)胶罄m(xù)級中的跟蹤寄存器。邏輯特別地處理最低有效位。所述邏輯可以例如是圖2中的邏輯200。第二,時鐘觸發(fā)要通過停止在原地處理的指令和關(guān)聯(lián)位,其中指令保留在級的功能單元中,并且關(guān)聯(lián)位被映射到當前級的跟蹤寄存器。在前一種情況下,稱所述指令和位是未停止的;而在第二種情況下,稱所述指令和位是停止的。
微處理器300可以例如是圖1的信息處理系統(tǒng)100的處理器102。在這些實例中,微處理器300包含發(fā)出單元流水線級,如發(fā)出單元流水線級IS1 301、發(fā)出單元流水線級IS2 303和發(fā)出單元流水線級IS3 305。微處理器300包括寄存器取回流水線級,如寄存器取回流水線級RF1 307和寄存器取回流水線級RF2 309。在此示例性實例中,微處理器300具有執(zhí)行單元流水線級,如執(zhí)行單元流水線級EX1 311、執(zhí)行單元流水線級EX2 313、執(zhí)行單元流水線級EX3 315、執(zhí)行單元流水線級EX4 317、執(zhí)行單元流水線級EX5 319、執(zhí)行單元流水線級EX6 321和執(zhí)行單元流水線級EX7 323??梢詫⒅噶畹拿總€順序時分處理稱為管道級。管道級可以例如是發(fā)出管道級IS2 303。管道級的支持電路位于同一級(也稱為當前級)。支持電路包括例如跟蹤寄存器353。后續(xù)級處的電路包括例如發(fā)出管道級IS3 305。將后續(xù)級中的這些電路稱為在當前級之下。將先前級處的電路(如發(fā)出單元IS1301)稱為在當前級之上。在當前級之上緊接當前級的電路稱為先前級。
發(fā)送的指令定期到達發(fā)出單元IS1 301。為了給到達發(fā)出單元IS1 301的新指令騰出空間,以下的每個級(可能開始于執(zhí)行單元EX7 323)都可以傳播到相繼的級。一個例外是有時停止信號會導致某些指令在發(fā)出單元(如發(fā)出單元IS1 301、發(fā)出單元IS2 303和發(fā)出單元IS3 305)中停止數(shù)個處理器周期。傳播包括將位和指令前進到后續(xù)級,以及在級中停止位和指令。同樣,傳播電路可以包括例如邏輯367。傳播電路可以包括例如停止電路324和停止電路327。管道級停止電路可以控制級是否將指令釋放到后續(xù)級。傳播電路可以在當前級或先前級中的刷新鎖存器的基礎(chǔ)上標記刷新鎖存器。
跟蹤寄存器351-365分別對應(yīng)于包括從發(fā)出單元流水線級IS1 301到執(zhí)行單元流水線級EX3 315的級。通常,每個跟蹤寄存器以與相應(yīng)的流水線化指令級相似的方式前進和停止。一般而言,通過數(shù)個級將位從IS1傳播到EX3。在每個級,只需很少的位。位與支持指令所在的每個相繼的級相關(guān)聯(lián)。最早的級IS1具有最大的寄存器,因為IS1級依賴于位于從單元流水線級IS2 303到單元流水線級EX7 323的指令(具體地說,加載指令)。單元流水線級EX3 315級中的指令可以僅依賴于單元流水線級EX7 323,因此,EX3 315的跟蹤寄存器365可以是1位。將根據(jù)圖4A、5A和6A進一步說明每個級的跟蹤寄存器的大小。
流水線處理器可以指示取回指令并將所述指令放置在發(fā)出級IS1 301中。通常,流水線在每個時鐘周期將指令前進一級。最后,許多流水線級可以保存和處理指令??梢詮拇鎯ζ魅』刂噶?。存儲器可以例如是圖1中的存儲器104。指令可以是加載指令,就是說,將保存在存儲器中的數(shù)據(jù)加載到通用寄存器的指令。流水線處理器可以檢測高速緩存未命中并將加載指令暫時存儲在未命中隊列383中。未命中隊列383可以是先入任何時刻出類型的隊列。需要隨機訪問未命中隊列383,因為某些加載未命中由L2高速緩存未命中引起,而某些加載未命中由L3高速緩存未命中引起,其中每個高速緩存類型具有不同的等待時間來從未命中恢復。已具有加載未命中的加載指令可以存儲在未命中隊列383中。檢測加載未命中電路381可以連接到高速緩存控制器以檢測對于EX7指令,何時無法出現(xiàn)來自高速緩存的預期加載,即,檢測加載未命中。檢測加載未命中電路381可以是高速緩存控制器的一部分。
操作數(shù)相關(guān)性檢查電路310可以檢查發(fā)出單元IS1 301以查看哪些寄存器(如果存在)是其中保存的指令的操作數(shù)。加載/存儲單元可以處理加載指令。因為重試數(shù)據(jù)的高速緩存單元可能花費幾個周期來返回加載命中,在已知加載指令的狀態(tài)之前加載指令可以通過流水線傳播數(shù)個級。寄存器可以是后續(xù)級中的加載指令的主體,因此,IS1單元流水線級301中的指令可以依賴于所述加載指令(多個)。因此,操作數(shù)相關(guān)性檢查電路310檢查從發(fā)出單元IS1 301到執(zhí)行單元EX7流水線級323的所有單元以及占據(jù)加載未命中隊列383的加載指令(如果存在)。IS1級之后的每個級的內(nèi)容提供給關(guān)聯(lián)的位,通常是寄存器351中的位IS2、IS3、RF1、RF2、Ex1、EX2、EX3、EX4、EX5、EX6和EX7。在操作數(shù)相關(guān)性檢查電路310發(fā)現(xiàn)相關(guān)性時,所述電路使用‘1’來標記關(guān)聯(lián)位或相關(guān)位。有時,訪問加載指令引用的寄存器的上游指令(例如,“add rx,r2”)可以依賴于先前加載寄存器r2的指令(即“l(fā)oad r2”)。在這種情況下,“add rx,r2”指令依賴于“l(fā)oad r2”指令。諸如“add rx,r2”之類的指令稱為需要寄存器訪問。
操作數(shù)相關(guān)性檢查電路310設(shè)置IS1的刷新鎖存器331,假設(shè)IS1指令命中未命中隊列383的話,即,IS1指令依賴最近的加載指令,所述加載指令在離開EX7執(zhí)行單元流水線級時遇到未命中的加載,以及進一步假設(shè)訪問將接收到數(shù)據(jù)的寄存器的IS1指令使最近的加載指令為高速緩存命中。相關(guān)位有時被稱為相關(guān)性。而通用寄存器中被標記為1或0的相關(guān)位和一個或多個位被稱為相關(guān)性。
停止電路327控制相關(guān)性的傳播,例如,存儲在跟蹤寄存器351中的相關(guān)性可以在停止電路327的控制下進行傳播。在此環(huán)境下,傳播意味著將寄存器的位映射到后續(xù)寄存器的位,在這種情況下,將寄存器353映射到當前寄存器(在此情況下是寄存器351)的位。
在沒有停止時,將寄存器351的位向右輪換一個間隔并將所述位放置在寄存器353中,其中寄存器351的最低有效位提供給邏輯367。停止電路324將來自邏輯367的結(jié)果放入后續(xù)的刷新鎖存器333。應(yīng)當理解,輪換也可以被同等地描述為向左輪換,并且術(shù)語向右的使用只是為了方便,并非旨在限制本發(fā)明。輪換意味著轉(zhuǎn)移或映射位,以便某一級中邏輯相鄰的位被移動到第二級中邏輯相鄰的位置。此外,可以只是位的子集在其他或后續(xù)級中保持相鄰。
另一方面,存在停止會導致停止電路327將與未停止的級關(guān)聯(lián)的位向右輪換一個位,并將所述位返回寄存器351,用‘0’填充任何空位。停止電路324允許邏輯367將結(jié)果放置在刷新鎖存器331中。邏輯367以及功能等價的電路368-374確保刷新位一直持續(xù)到刷新鎖存器347。就是說,一旦在級中設(shè)置了刷新位,每個后續(xù)級都將攜帶標記的位,以便相應(yīng)管道級中的指令繼續(xù)標記關(guān)聯(lián)的刷新位,直到EX5級319(其為刷新級)。
在一個級中,刷新鎖存器與跟蹤寄存器緊密關(guān)聯(lián)。設(shè)置刷新鎖存器意味著所述級的指令依賴于當前經(jīng)歷可檢測的加載未命中的指令或者依賴于已經(jīng)經(jīng)歷可檢測的加載未命中的指令。因此,將同一級的跟蹤寄存器和刷新鎖存器一起稱為該級的跟蹤存儲裝置。
圖3的電路允許位于從發(fā)出單元IS1 301到發(fā)出單元IS3 305中的指令的三次連續(xù)停止循環(huán)。停止電路與每個寄存器和每個發(fā)出級的每個刷新位對應(yīng)。應(yīng)當理解,可以存在更少或更多的連續(xù)停止循環(huán)以對應(yīng)更少或更多的發(fā)出級,并且本發(fā)明并不限于具有三個停止循環(huán)的設(shè)計。同樣,可以存在比IS1 301、IS2 303、IS3 305更少或更多的發(fā)出單元流水線級。
在停止期間,發(fā)出單元IS1 301、發(fā)出單元IS2 303、發(fā)出單元IS3 305將其中包含的指令保存在原處,同時使用無效指令填充寄存器取回RF1單元307。類似地,用零填充相應(yīng)的寄存器357和刷新鎖存器337。
發(fā)出單元IS2 303因此具有管理從寄存器353到后續(xù)寄存器355的傳播的停止電路328,以及管理將刷新鎖存器333中的刷新位傳播到刷新鎖存器335的停止電路325。電路328和325可以分別從屬于電路327和324,以便協(xié)調(diào)停止以同時發(fā)生在級IS1和IS2。
發(fā)出單元IS3 305因此具有管理從寄存器355到后續(xù)寄存器357的傳播的停止電路329,以及管理將刷新鎖存器335中的刷新位傳播到刷新鎖存器337的停止電路326。電路329和326可以分別從屬于電路327和324,以便協(xié)調(diào)停止以同時發(fā)生在級IS1和IS3。當沒有出現(xiàn)停止時,將寄存器355映射到寄存器357,以便丟棄三個位。丟棄的位是寄存器355的RF1、RF2和EX1級位。
可以對時鐘信號計時以使處于較低位置的寄存器從當前位置接收映射的位,以便在從先前位置映射之前保存當前位置的數(shù)據(jù)。因此,計時可以在傳播發(fā)生的同時保存當前位置的數(shù)據(jù)。
級RF1和以下的級的傳播相對簡單。寄存器359接收向右輪換1位的寄存器357的位,并且寄存器357的Ex7位提供給邏輯370并且因此提供給RF2關(guān)聯(lián)的刷新鎖存器339。
第二,寄存器361接收向右輪換1位的寄存器359的位,并且寄存器359的Ex7位提供給邏輯371并且因此提供給EX1關(guān)聯(lián)的刷新鎖存器341。
第三,寄存器363接收向右輪換1位的寄存器361的位,并且寄存器361的Ex7位提供給邏輯372并且因此提供給EX2關(guān)聯(lián)的刷新鎖存器343。
第四,寄存器365接收向右輪換1位的寄存器363的位,并且寄存器363的Ex7位提供給邏輯374并且因此提供給EX3關(guān)聯(lián)的刷新鎖存器345。
在EX3級以下沒有發(fā)生進一步的輪換。寄存器365可以是擁有與級EX3關(guān)聯(lián)的EX7位的鎖存器。EX7位提供給邏輯373并因此提供給與刷新鎖存器347關(guān)聯(lián)的EX4。
來自EX4刷新鎖存器347的傳播被導向攜帶執(zhí)行級刷新位的EX5刷新鎖存器349。檢測刷新電路350可以判定是否將執(zhí)行單元EX5 319的指令傳播到執(zhí)行單元EX6 321。在周期開始時在EX5刷新鎖存器349中存在已設(shè)置位將導致刷新執(zhí)行流水線單元級EX5 319中的指令。在這種情況下,檢測刷新電路350刷新執(zhí)行單元EX5 319的指令。否則,EX5級傳播到EX6級。換句話說,檢測刷新350電路可以通過檢測EX5刷新鎖存器349中已設(shè)置位的存在來確定出現(xiàn)刷新。
其他實施例可以建立超出EX7以外的其他執(zhí)行級,例如EX8。在跟蹤寄存器中沒有為這樣的級分配位,因為級EX8和超出的級超出了加載未命中檢測點,在本示例中,所述加載未命中檢測點是EX7級。
圖4A、4B、5A、5B、6A和6C示出了圖3的實施例如何執(zhí)行以下代碼,所述代碼在每行包括一條指令load r1load r2load r3load r4,r2add rx,r2add ry,r3vmxadd rz,r1,r3圖4A、5A和6A示出了管道級和相應(yīng)跟蹤寄存器的每個功能單元的內(nèi)容。
圖4A示出了在任意時間(如t=0)時通過管道級的指令的進度,其中每個時間整數(shù)表示微處理器的時鐘周期。每個管道級名稱出現(xiàn)在管道級列410中。存儲在管道級中的指令(如果存在)出現(xiàn)在指令列420中。跟蹤寄存器的內(nèi)容出現(xiàn)在寄存器列430中。
圖4B示出了當出現(xiàn)加載未命中時已經(jīng)離開或已經(jīng)從執(zhí)行流水線單元級EX7 323級轉(zhuǎn)移的指令的未命中隊列450。當指令進入未命中隊列450時,所述指令被稱為已轉(zhuǎn)移,因為所述指令不能進入更遠的管道級,直到解決未命中的加載為止。未命中隊列是隨機訪問隊列,并且加載未命中占用了第一個可用位置,并在加載數(shù)據(jù)返回時刪除所述未命中隊列。所述隊列可以只是包含如列470中所示的寄存器地址和控制信息(如有效位)。包括列480以幫助說明本發(fā)明并且通常未在硬件中實現(xiàn)所述列480。操作數(shù)相關(guān)性檢查電路可以檢查每個級發(fā)出單元IS2 303到執(zhí)行流水線單元級EX7 323的內(nèi)容并填充IS1跟蹤寄存器451和關(guān)聯(lián)的刷新鎖存器。IS2指令是“add rz,r1,r3”并且所述指令依賴r1和r3寄存器的任何加載。操作數(shù)相關(guān)性檢查可以在執(zhí)行流水線單元級EX4 317處檢測“l(fā)oad r3”指令417和新近未命中的加載“l(fā)oad r1”483。操作數(shù)相關(guān)性檢查可以標記IS1跟蹤寄存器451的EX4位和關(guān)聯(lián)的刷新,或標記“FL”位以記錄IS1指令與“l(fā)oad r3”417和“l(fā)oad r1”483指令的相關(guān)性。操作數(shù)相關(guān)性檢查電路將跟蹤寄存器451的所有剩余的位設(shè)置為‘0’以顯示對引用的管道級缺少相關(guān)性。注意,在列成表格的圖4A中示出的在寄存器或刷新列下為空的任何單元格不是必需的;就是說,寄存器或其他存儲不需要為除標出‘0’和‘1’以外的位置提供存儲空間。操作數(shù)相關(guān)性檢查電路可以例如是圖3的操作數(shù)相關(guān)性電路310。
先前標記的相關(guān)性位491存在于IS3級,其中所述級依賴于保存在執(zhí)行流水線單元級Ex4 317中的“l(fā)oad r3”指令417。第二先前標記的相關(guān)性位493存在于RF1級,其中所述級依賴于保存在執(zhí)行流水線單元級EX6中的“l(fā)oad r2”421指令。
圖5A示出了在任意時間(例如,t=2)時通過管道級的指令的進度。沒有指令進入IS1 301,因此操作數(shù)相關(guān)性檢查電路可以將跟蹤寄存器551中的所有位標記為‘0’。當指令“vmx”523到達IS3 305時,在t=1時出現(xiàn)停止;因此,停止電路已將發(fā)出單元IS2 303和發(fā)出單元IS3 305再次循環(huán)了一個周期。在第一個時鐘周期期間,已標記的位531向前前進一個跟蹤寄存器同時向右輪換。在第二個時鐘周期期間,已標記的位531在IS2跟蹤寄存器中出現(xiàn)停止時向右輪換。同樣,刷新位525向前前進一級并由停止電路保存在IS2關(guān)聯(lián)的刷新鎖存器中。
“l(fā)oad r2”指令通過執(zhí)行流水線單元級EX7 323級并且為加載命中,因此“l(fā)oad r2”指令并未存儲在未命中隊列550中。因此,缺少加載未命中信號致使邏輯接收圖4A的位493,并在確定級EX1的刷新位541的值時,將所述位轉(zhuǎn)換為‘0’。
圖5B示出了在與圖5A示出的時間同時出現(xiàn)的加載未命中時已離開執(zhí)行流水線單元級EX7 323級的指令。
圖6A示出了在任意時間(例如t=4)通過管道級的指令的進度。圖6B示出了在與圖6A示出的時間同時出現(xiàn)的加載未命中時已離開EX7 323級的指令。執(zhí)行流水線單元級EX5 319中的“l(fā)oad r3”指令683是剛離開EX7323級的新近的加載未命中。指令“add rz,r1,r3”在三個周期中的剩余兩個周期中繼續(xù)停止。停止電路在第二個周期期間將圖5A的位531從IS2的EX6位置進一步輪換到EX7位置。時鐘信號導致所述位在第三個周期(t=4)期間進入邏輯。由于所述加載未命中信號,所述邏輯在級IS2的刷新鎖存器中將位631存儲為邏輯‘1’。同樣,在EX2 313級的“add ry,r3”指令具有來自先前級EX1寄存器的EX7相關(guān)性位。加載未命中信號激活EX7相關(guān)性位時,時鐘信號將所述EX7相關(guān)性位輪換到邏輯中??蓱?yīng)用的邏輯電路基于‘1’輸入將‘1’位643存儲在所述級的刷新鎖存器中。因此,在圖6A的示出狀態(tài)之后三個周期,“add rx,r2”與附隨的刷新位一起前進到執(zhí)行流水線單元級EX5 319。此時,檢測刷新電路讀取該刷新位,并對執(zhí)行流水線單元級EX5 319中的指令執(zhí)行刷新操作。
圖7A示出了可被執(zhí)行以在每個處理器時鐘周期使每個管道級和任何關(guān)聯(lián)的跟蹤寄存器前進的步驟的流程圖的一部分。初始地,加載指令離開執(zhí)行管道級EX7(步驟703)。執(zhí)行管道級EX7可以例如是圖3的執(zhí)行管道級EX7 323。判定對于所述加載指令是否出現(xiàn)加載未命中(步驟705)。出現(xiàn)“是”的結(jié)果意味著已檢測到加載未命中,以響應(yīng)判定已經(jīng)發(fā)生加載未命中,可以將EX4級建立為當前級或當前的跟蹤寄存器(步驟707)。
圖7B示出了進行測試以查看當前級是否停止(步驟709)。如果否,則做出判定以查看先前級是否停止(步驟711)。在EX4之前的級是EX3級。由于EX3級未停止,因此判定在此實例中先前級未停止。
因此,邏輯將當前刷新位設(shè)置為將先前跟蹤寄存器的EX7位與加載未命中判定進行邏輯“與”并且將結(jié)果與先前級刷新位進行“或”的結(jié)果(步驟721),如圖2A中進一步示出的。接著,映射或輪換除先前跟蹤寄存器的EX7位之外的所有位(如果存在),然后將其存儲到當前的跟蹤寄存器,同時用‘0’填充最左邊的位(步驟723)。
在圖7A中繼續(xù)處理,其中進行測試以查看IS1下是否仍有更多的級(步驟715)?!笆恰钡呐卸▽е聦⑾惹暗募壸鳛楫斍暗母櫦拇嫫骰蚣?步驟717)。此時,當前級變?yōu)镋X3。
第二次重復步驟709、711、721、723和715,導致先前的級變?yōu)楫斍暗母櫦拇嫫骰蚣?步驟717)。此時,當前的級變?yōu)镋X2。
第三次重復步驟709、711、721、723和715,導致先前的級變?yōu)楫斍暗母櫦拇嫫骰蚣?步驟717)。此時,當前的級變?yōu)镋X1。
第四次重復步驟709、711、721、723和715,導致先前的級變?yōu)楫斍暗母櫦拇嫫骰蚣?步驟717)。此時,當前的級變?yōu)镽F2。
第五次重復步驟709、711、721、723和715,導致先前的級變?yōu)楫斍暗母櫦拇嫫骰蚣?步驟717)。此時,當前的級變?yōu)镽F1。
使用圖4A的實例,在示出的狀態(tài)之后的一個周期(T=1),停止了IS3級。如果當前級是RF1,則不能停止當前的級。但是,IS3是先前的級,因此可以停止IS3。執(zhí)行可以繼續(xù)以判定當前級是否停止(步驟709)。如果所述判定為“否”,并且響應(yīng)與此,判定先前的級是否停止(步驟711)。如果所述判定為“是”,其導致執(zhí)行通過用‘0’填充所有位來繼續(xù)(步驟713)。執(zhí)行繼續(xù)到步驟715,判定IS1下是否有更多的級,所述判定為“是”。先前的級變?yōu)楫斍凹?即,IS3)(步驟717)。
判定當前級(在此情況下,IS3)是否停止(步驟709)。判定為“是”。以圖2A中示出的方式,邏輯將當前級的FL位設(shè)置為FL位與和加載未命中判定邏輯地“與”的當前級的EX7位進行邏輯“或”的結(jié)果(步驟731)。在IS3中的第一個停止周期期間,停止電路輪換Ex7位左側(cè)的所有位,用‘0’填充最左側(cè)的位(步驟733)。不同于使存儲在跟蹤寄存器中的位前進,停止電路可以在輪換時將位保留在同一跟蹤寄存器中。進一步測試IS1下是否仍有更多的級(步驟715)。在這種情況下,IS1下確實仍有更多的級。
判定當前級(在這種情況下,IS2)是否停止(步驟709)。如果判定為“是”,則以圖2A中示出的方式,將當前級的FL位設(shè)置為FL位與和加載未命中判定邏輯地“與”的當前級的EX7位進行邏輯“或”的結(jié)果(步驟731)。在IS2中的第一個停止周期期間,可以將EX7位以上的所有位向右輪換,用‘0’填充最左側(cè)的位(步驟733)。不同于使存儲在跟蹤寄存器中的位前進,停止電路可以在輪換時將位保留在同一跟蹤寄存器中。進一步測試IS1下是否仍有更多的級(步驟715),其中在這種情況下,不存在任何級。
如果指令是加載未命中,則處理通過將離開EX7級的指令放置在未命中隊列中來繼續(xù)(步驟735)。然后時鐘信號使所有未停止的管道級前進(步驟737),這可以包括通過指令加載IS1。
操作數(shù)相關(guān)性檢查電路可以檢查除IS1以外的所有級以查看哪個級加載了IS1依賴于其的寄存器。假設(shè)級加載了此類寄存器,則操作數(shù)相關(guān)性檢查電路可以通過將標記放置在IS1跟蹤寄存器的關(guān)聯(lián)位中來標記反映哪個級加載了此類寄存器的位(步驟739)。如果新近未命中的加載在未命中隊列中,即IS1命中未命中隊列,則操作數(shù)相關(guān)性檢查電路標記IS1級的FL位。
在加載指令的有效數(shù)據(jù)離開EX7或者在此周期沒有加載未命中的情況下,響應(yīng)于判定尚未發(fā)生加載未命中,可以出現(xiàn)替代路徑,可以將EX5級建立為當前級或者當前的跟蹤寄存器(步驟757)。
圖7C示出了進行測試以查看當前的級是否停止(步驟759)。如果否,則進行判定以查看先前的級是否停止(步驟761)。EX5之前的級是EX4級。由于EX4級未停止,因此判定先前的級未停止。
因此,將當前的刷新位設(shè)置為先前級的刷新位(步驟771)。接著,映射/輪換除了先前跟蹤寄存器的EX7位之外的所有位(如果存在),然后將其存儲到當前的跟蹤寄存器(步驟773)。
在圖7A中繼續(xù)處理,其中進行測試以查看IS1下是否仍有更多的級(步驟775)?!笆恰钡呐卸▽е聦⑾惹暗募壸鳛楫斍暗母櫦拇嫫骰蚣?步驟777)。此時,當前的級變?yōu)镋X4。
第二次重復步驟759、761、771、773和775,導致先前的級變?yōu)楫斍暗母櫦拇嫫骰蚣?步驟777)。此時,當前的級變?yōu)镋X3。
第三次重復步驟759、761、771、773和775,導致先前的級變?yōu)楫斍暗母櫦拇嫫骰蚣?步驟777)。此時,當前的級變?yōu)镋X2。
第四次重復步驟759、761、771、773和775,導致先前的級變?yōu)楫斍暗母櫦拇嫫骰蚣?步驟777)。此時,當前的級變?yōu)镋X1。
第五次重復步驟759、761、771、773和775,導致先前的級變?yōu)楫斍暗母櫦拇嫫骰蚣?步驟777)。此時,當前的級變?yōu)镽F2。
第六次重復步驟759、761、771、773和775,導致先前的級變?yōu)楫斍暗母櫦拇嫫骰蚣?步驟777)。此時,當前的級變?yōu)镽F1。
假設(shè)與圖4A的實例類似的實例,在圖4A所示時間之后的一個周期(T=1),停止電路停止IS3級。這里主要的差別在于,不同于圖4A中的實例,在此實例中不存在加載未命中。如果當前級是RF1,則不能停止當前級。但是,IS3是先前的級,因此可以停止IS3。執(zhí)行可以繼續(xù)以判定當前級是否停止(步驟759)。如果所述判定為“否”,則判定先前級是否停止(步驟761)。另一方面,如果所述判定為“是”,則執(zhí)行通過用‘0’填充所有位來繼續(xù)(步驟763)。執(zhí)行繼續(xù)到步驟775,判定IS1下是否仍有更多的級,所述判定為“是”。先前的級變?yōu)楫斍暗募?,即,IS3(步驟777)。
判定當前級(在這種情況下,IS3)是否停止(步驟759),所述判定為“是”。將當前級的FL位設(shè)置為保持不變的FL位的結(jié)果(步驟781)。在IS3中的第一個停止周期期間,停止電路輪換EX7位左側(cè)的所有位,用‘0’填充最左側(cè)的位(步驟783)。不同于使存儲在跟蹤寄存器中的位前進,停止電路可以在輪換時將位保留在同一跟蹤寄存器中。進一步測試IS1下是否仍有更多的級(步驟775),其中在這種情況下,存在更多的級。
最后,在IS1下沒有更多的可以作為當前級的級,并且可以停止通過步驟775的重復。時鐘信號使所有未停止的管道級前進(步驟737)。
操作數(shù)相關(guān)性檢查電路可以檢查除IS1以外的所有級以查看哪個級加載了IS1依賴于其的寄存器,并且假設(shè)級加載了此類寄存器,則操作數(shù)相關(guān)性檢查電路可以通過將標記放置在IS1跟蹤寄存器的關(guān)聯(lián)位中來標記反映哪個級加載了此類寄存器的位(步驟739)。這樣,所述位與發(fā)出級(例如IS1)、后續(xù)級、加載寄存器的級相關(guān)聯(lián)。如果新近未命中的加載在未命中隊列中,即,IS1命中未命中隊列,則操作數(shù)相關(guān)性檢查電路標記IS1級的FL位。所述IS1級的FL位可以與EX8級以及IS1級相關(guān)聯(lián)。
這樣,本發(fā)明的示例性實施例可以允許指令更遠地前進到流水線處理器的功能單元中,以便在處理數(shù)據(jù)的同時在表或一系列寄存器中跟蹤相關(guān)指令。
本發(fā)明可以采取完全硬件實施例、完全軟件實施例或包含硬件和軟件元素兩者的實施例的形式。此外,可以實現(xiàn)反轉(zhuǎn)邏輯,所述反轉(zhuǎn)邏輯在‘0’被存儲在關(guān)聯(lián)的同一級刷新鎖存器中的基礎(chǔ)上在執(zhí)行級刷新指令,其中初始地,在發(fā)出級指令與引用的級之間不存在相關(guān)性的情況下,操作數(shù)相關(guān)性檢查電路可以用邏輯的‘1’位來填充發(fā)出級跟蹤存儲。在此類實施例中,可使用等同的反轉(zhuǎn)邏輯來標記位,其中將鎖存器或跟蹤寄存器的位設(shè)置為‘0’是標記。相似地,某些實施例可以實現(xiàn)向左輪換并且提供給邏輯的位可以是最高有效位。
此外,本發(fā)明可以采取可從計算機可用或計算機可讀介質(zhì)訪問的計算機程序產(chǎn)品的形式,所述計算機可用或計算機可讀介質(zhì)提供了可以被計算機或任何指令執(zhí)行系統(tǒng)使用或與計算機或任何指令執(zhí)行系統(tǒng)結(jié)合的程序代碼。出于此描述的目的,計算機可用或計算機可讀介質(zhì)可以是任何能夠包含、存儲、傳送、傳播或傳輸由指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用或與所述指令執(zhí)行系統(tǒng)、裝置或設(shè)備結(jié)合的程序的裝置。
所述介質(zhì)可以是電、磁、光、電磁、紅外線或半導體系統(tǒng)(或裝置或設(shè)備)或傳播介質(zhì)。計算機可讀介質(zhì)的實例包括半導體或固態(tài)存儲器、磁帶、可移動計算機盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、硬磁盤和光盤。光盤的當前實例包括光盤-只讀存儲器(CD-ROM)、光盤-讀/寫(CR-R/W)和DVD。
出于示例和說明目的給出了對本發(fā)明的描述,并且所述描述并非旨在是窮舉的或是將本發(fā)明限于所公開的形式。對于本領(lǐng)域的技術(shù)人員來說,許多修改和變化都將是顯而易見的。實施例的選擇和描述是為了最佳地解釋本發(fā)明的原理、實際應(yīng)用,并且當適合于所構(gòu)想的特定使用時,使得本領(lǐng)域的其他技術(shù)人員能夠理解本發(fā)明的具有各種修改的各種實施例。
權(quán)利要求
1.一種用于從具有多個級的流水線功能單元刷新寄存器訪問指令的處理器實現(xiàn)的方法,所述方法包括在發(fā)出級中檢測寄存器訪問指令;在后續(xù)級中檢測所述寄存器的加載;響應(yīng)于在所述發(fā)出級中檢測到所述寄存器訪問指令和在所述后續(xù)級中檢測到所述寄存器的所述加載,將位標記為已標記的位,其中所述已標記的位與所述發(fā)出級和所述后續(xù)級相關(guān)聯(lián);將所述寄存器訪問指令從所述發(fā)出級傳播到第三級;將所述已標記的位傳播到所述第三級;響應(yīng)于將所述寄存器訪問指令傳播到所述第三級,將所述寄存器訪問指令傳播到刷新級;響應(yīng)于將所述已標記的位傳播到所述第三級,將所述已標記的位傳播到所述刷新級;以及響應(yīng)于將所述寄存器訪問指令傳播到所述刷新級和響應(yīng)于將所述已標記的位傳播到所述刷新級,從所述流水線功能單元刷新所述寄存器訪問指令。
2.根據(jù)權(quán)利要求1的方法,其中所述將所述已標記的位傳播到所述第三級的步驟包括判定停止電路中是否出現(xiàn)停止;以及響應(yīng)于判定出現(xiàn)停止,將所述第三級設(shè)置為所述發(fā)出級。
3.根據(jù)權(quán)利要求2的方法,還包括如果出現(xiàn)所述停止,則將先前級的刷新鎖存器位復制到所述發(fā)出級的刷新鎖存器。
4.根據(jù)權(quán)利要求1的方法,其中所述將所述已標記的位傳播到所述第三級的步驟包括判定是否在停止電路處出現(xiàn)停止;如果已出現(xiàn)所述停止,則將加載未命中信號的邏輯結(jié)果和跟蹤寄存器的最低有效位放置在所述發(fā)出級的刷新鎖存器中;以及如果已出現(xiàn)所述停止,則將比跟蹤寄存器的最低有效位更高的位向右移動一步,其中所述跟蹤寄存器與所述發(fā)出級相關(guān)聯(lián)。
5.根據(jù)權(quán)利要求4的方法,其中所述放置所述邏輯結(jié)果的步驟還包括將所述加載未命中信號和所述跟蹤寄存器的所述最低有效位邏輯地‘與’以形成中間結(jié)果;以及將級刷新鎖存器和所述中間結(jié)果邏輯地‘或’以形成所述邏輯結(jié)果。
6.根據(jù)權(quán)利要求5的方法,還包括在檢測刷新電路處檢測刷新;以及在檢測到所述刷新時,刷新執(zhí)行單元流水線級的指令。
7.一種用于在流水線體系結(jié)構(gòu)中刷新與未命中的加載指令相關(guān)的指令的系統(tǒng),所述流水線體系結(jié)構(gòu)具有用于處理指令的發(fā)出級和執(zhí)行級,所述系統(tǒng)包括操作數(shù)相關(guān)性檢查電路,所述操作數(shù)相關(guān)性檢查電路用于檢測發(fā)出級指令與后續(xù)級中的指令的相關(guān)性并將位標記為已標記的位,其中所述已標記的位與跟蹤存儲裝置中的所述后續(xù)級相關(guān)聯(lián);檢測加載未命中電路,所述檢測加載未命中電路用于檢測加載寄存器的指令的高速緩存未命中并在出現(xiàn)高速緩存未命中時輸出加載未命中信號;至少一個傳播電路,所述傳播電路用于標記至少一個刷新鎖存器以響應(yīng)所述加載未命中信號;以及刷新電路,所述刷新電路用于根據(jù)執(zhí)行級刷新位來刷新執(zhí)行級指令。
8.根據(jù)權(quán)利要求7的系統(tǒng),其中所述至少一個傳播電路是所述加載未命中信號與跟蹤寄存器的有效位的邏輯“與”,所述邏輯“與”將第一輸入提供給邏輯“或”,所述邏輯“或”具有來自為后續(xù)級提供輸出位的刷新鎖存器的第二輸入。
9.根據(jù)權(quán)利要求7的系統(tǒng),其中所述操作數(shù)相關(guān)性檢查電路在發(fā)出級包含寄存器訪問指令并且未命中隊列包含要加載所述寄存器的指令時檢測相關(guān)性。
10.根據(jù)權(quán)利要求7的系統(tǒng),其中所述操作數(shù)相關(guān)性檢查電路在發(fā)出級包含寄存器訪問指令并且后續(xù)級包含寄存器訪問指令時檢測相關(guān)性。
11.根據(jù)權(quán)利要求10的系統(tǒng),其中所述至少一個傳播電路是所述加載未命中信號與跟蹤寄存器的最低有效位的邏輯“與”,所述邏輯“與”將第一輸入提供給邏輯“或”,所述邏輯“或”具有來自為后續(xù)刷新鎖存器提供位的刷新鎖存器的第二輸入。
12.根據(jù)權(quán)利要求11的系統(tǒng),其中所述檢測加載未命中電路是高速緩存控制器的一部分。
13.根據(jù)權(quán)利要求8的系統(tǒng),其中所述至少一個傳播電路還包括接收所述輸出位的停止電路,并且所述停止電路根據(jù)未出現(xiàn)停止來將所述輸出位提供給所述后續(xù)級。
14.一種用于在流水線體系結(jié)構(gòu)中刷新指令的方法,所述流水線體系結(jié)構(gòu)具有用于處理指令的發(fā)出級和執(zhí)行級,所述方法包括檢測所述發(fā)出級中的指令與后續(xù)級中的指令的相關(guān)性;將與所述后續(xù)級關(guān)聯(lián)的位存儲在跟蹤存儲裝置中;檢測加載寄存器的指令的高速緩存未命中;響應(yīng)于檢測到所述高速緩存未命中,輸出加載未命中信號;標記至少一個刷新鎖存器以響應(yīng)來自檢測加載未命中電路的所述加載未命中信號;以及在執(zhí)行級中刷新指令以響應(yīng)在執(zhí)行級刷新鎖存器中存在執(zhí)行級刷新位。
15.根據(jù)權(quán)利要求14的方法,其中所述標記還包括將所述加載未命中信號與跟蹤寄存器的最低有效位進行邏輯“與”;以及將來自刷新鎖存器的第一輸入與第二輸入進行邏輯“或”以便將輸出位提供給后續(xù)級。
16.根據(jù)權(quán)利要求14的方法,其中檢測相關(guān)性包括在發(fā)出級包含寄存器訪問指令并且未命中隊列包含要加載所述寄存器的指令時檢測相關(guān)性。
17.根據(jù)權(quán)利要求14的方法,其中檢測相關(guān)性包括在發(fā)出級包含寄存器訪問指令并且后續(xù)級包含要加載所述寄存器的指令時檢測相關(guān)性。
18.根據(jù)權(quán)利要求17的方法,其中標記包括將所述加載未命中信號與跟蹤寄存器的最低有效位進行邏輯“與”,所述邏輯“與”將第一輸入提供給邏輯“或”,所述邏輯“或”具有來自為后續(xù)刷新鎖存器提供輸出位的刷新鎖存器的第二輸入。
19.根據(jù)權(quán)利要求18的方法,其中在高速緩存控制器中執(zhí)行所述檢測。
20.根據(jù)權(quán)利要求15的方法,其中標記包括接收所述輸出位,以及將所述輸出位提供給所述后續(xù)級以響應(yīng)未出現(xiàn)停止。
21.一種信息處理系統(tǒng),所述信息處理系統(tǒng)包括存儲器;連接到所述存儲器的處理器,其中所述處理器具有至少一個發(fā)出級和執(zhí)行級以處理指令,所述處理器包括操作數(shù)相關(guān)性檢查電路,所述操作數(shù)相關(guān)性檢查電路用于在所述至少一個發(fā)出級中檢測寄存器訪問指令和在后續(xù)級中檢測寄存器的加載;檢測加載未命中電路,所述檢測加載未命中電路用于檢測加載寄存器的指令的高速緩存未命中和在出現(xiàn)高速緩存未命中時輸出加載未命中信號;至少一個傳播電路,所述傳播電路用于標記至少一個刷新鎖存器以響應(yīng)所述加載未命中信號;以及刷新電路,所述刷新電路用于根據(jù)執(zhí)行級刷新位來刷新執(zhí)行級指令。
全文摘要
流水線處理器具有在所述流水線的發(fā)出級中檢測寄存器訪問指令的存在的電路。在后續(xù)級出現(xiàn)的加載未命中可以導致將所述寄存器訪問指令標記有關(guān)聯(lián)的位。所述寄存器訪問指令進入所述流水線并且在到達刷新級時,所述處理器檢查所述關(guān)聯(lián)的位并刷新所述寄存器訪問指令。
文檔編號G06F9/38GK1952876SQ200610151760
公開日2007年4月25日 申請日期2006年9月8日 優(yōu)先權(quán)日2005年10月18日
發(fā)明者D·希比, K·A·費斯特, D·S·雷, A·J·小萬諾斯特蘭 申請人:國際商業(yè)機器公司