專利名稱:用排序向量實施存儲器排序模型的方法與設(shè)備的制作方法
背景技術(shù):
本發(fā)明涉及存儲器排序,尤其涉及根據(jù)一個存儲器排序模型去處理存儲器操作。
存儲器的處理指令必須根據(jù)目標(biāo)指令集結(jié)構(gòu)(ISA)存儲器排序模型來進(jìn)行操作??晒﹨⒖嫉挠蠭ntel公司的兩個主要的ISAIntel結(jié)構(gòu)(IA-32或×86)及Intel的ITANIUM處理器族(IPF),它們具有非常不同的存儲器排序模型。在IA-32中,裝入(load)及存儲操作在程序排序中必須是可見的(visible)。在IPF結(jié)構(gòu)中,它們并不普遍如此,而是編程器會在必要時對其中有些特殊的指令進(jìn)行強(qiáng)制性排隊(例如獲得裝入(此中稱為“獲得裝入”釋放存儲(此中稱為“釋放存儲”,存儲器柵欄及信號量)。
一種保持存儲器操作有秩序的簡單但低性能的策略是不允許存儲器指令在前一條存儲器指令已經(jīng)取得它的數(shù)據(jù)(對裝入而言)或通過高速緩存相干性協(xié)議確認(rèn)已得到占有權(quán)(對存儲而言)之前不得訪問一存儲器體系。
然而,軟件應(yīng)用程序越來越依賴于有序的存儲器操作,也就是說,越來越依賴于強(qiáng)制對其它存儲器操作及自己進(jìn)行排序的存儲器操作。當(dāng)單片式多處理器(CMP)執(zhí)行并行線程時,可在不同軟件線程或單個應(yīng)用程序的多項處理之間的同步與通信中使用有序存儲器指令。事務(wù)處理與管理實時環(huán)境都依賴有序的存儲器指令去發(fā)揮有效的作用。此外,當(dāng)一個二進(jìn)制譯碼器從一個較強(qiáng)的存儲器模型ISA(如×86)向一個較弱的存儲器排序模型ISA(如IPF)進(jìn)行譯碼時,假定所編譯的應(yīng)用程序依賴于由較強(qiáng)的存儲器排序模型所強(qiáng)制的排序。因此,在編譯二進(jìn)制碼時,它們必須取代裝入及用排序的裝入存儲,而且以確保程序的正確性的方式進(jìn)行存儲。
隨著越來越多使用有序存儲器操作,有序存儲器操作的性能就變得更為重要。在當(dāng)前的×86處理器中,處理有序存儲器操作中的無序?qū)ζ湫阅芏砸咽顷P(guān)鍵性的,因為所有的存儲器操作都是有序的操作。實施強(qiáng)的存儲器排序模型的無序的處理器能按推測執(zhí)行無序的裝入,然后檢查以保證在把裝入指令提交至機(jī)器狀態(tài)之前沒有出現(xiàn)任何破壞順序的情況。這可以通過追蹤裝入隊列中已執(zhí)行了但尚未提交的裝入地址并監(jiān)視由其它中央處理器(CPU)或高速緩存相干代理服務(wù)器的寫入來實現(xiàn)。如果另一CPU將裝入隊列中的一個裝入向同一地址寫入,則該CPU能捕捉并再重新進(jìn)行匹配的裝入(和除去隨后的所有非提交的裝入),然后再執(zhí)行該裝入及所有隨后的裝入,保證在舊的一個裝入前沒有更新的符合的裝入。
然而正常的CPU在裝入指令把它們的數(shù)據(jù)返回寄存器文件之前就能提交裝入指令。在這類CPU中,一旦傳送了它們所有的故障檢查(例如數(shù)據(jù)譯碼緩沖器(DTB)失靈及沒對準(zhǔn)的訪問)以及數(shù)據(jù)檢索之前,就會提交裝入。一旦退出裝入指令,就不能再執(zhí)行它們了。因此,當(dāng)裝入根據(jù)以上所描述的從其它CPU的監(jiān)視寫入而退出時,就不能再選擇捕捉、重取或重新執(zhí)行裝入。
因此,需要改進(jìn)有序存儲器操作的性能,尤其是在使用弱的存儲器排序模型的處理器中。
附圖的簡述
圖1是依據(jù)本發(fā)明一個實施例的部分系統(tǒng)的方框圖。
圖2是根據(jù)本發(fā)明一個實施例處理一個裝入指令的方法的流程圖。
圖3是根據(jù)本發(fā)明一個實施例處理一個裝入數(shù)據(jù)的方法的流程圖。
圖4是根據(jù)本發(fā)明一個實施例處理一個存儲指令的方法的流程圖。
圖5是根據(jù)本發(fā)明一個實施例處理一個存儲器柵欄的方法的流程圖。
圖6是依據(jù)本發(fā)明的一個實施例的系統(tǒng)的方框圖。
詳細(xì)說明參考圖1,所示的是依據(jù)本發(fā)明一個實施例的部分系統(tǒng)的方框圖。更具體地說,如圖1所示,系統(tǒng)10可以是一個信息處理系統(tǒng),例如,一臺個人計算機(jī)(例如,臺式計算機(jī),筆記本計算機(jī),服務(wù)器計算機(jī),等等)。如圖1所示,系統(tǒng)10可以包含各種處理器資源,例如,裝入隊列20,存儲隊列30及歸并(即,寫入組合)緩沖器40。在某些實施例中,這些隊列和緩沖器可以在系統(tǒng)的處理器,例如,中央處理器(CPU)內(nèi)。例如,在某些實施例中,該CPU可以與IA-32或IPF的結(jié)構(gòu)一樣,雖然本發(fā)明的范圍并不只限于此。在其它實施例中,裝入隊列20和存儲隊列30也可以組合成一個單獨的緩沖器。
包含這些處理器資源的處理器可以使用這些資源作為在系統(tǒng)內(nèi)執(zhí)行各種存儲器操作的臨時存儲器。例如,裝入隊列20可以用來暫時存儲特定存儲器的操作,例如,裝入操作的輸入并追蹤在給定存儲器的操作本身完成之前所必須完成的優(yōu)先裝入或其它存儲器的操作。相似地,存儲隊列30可以用來存儲存儲器的操作,例如,存儲操作,并追蹤在給定存儲器,操作本身能提交之前所完成的優(yōu)先的存儲器的操作(通常是裝入)。在不同的實施例中,歸并緩沖器40可以用作一個緩沖器去暫時存儲與一個存儲器操作相對應(yīng)的數(shù)據(jù),直至存儲器操作(例如,一個存儲或信號量)完成或提交的時候。
采用弱存儲器排隊模型(如,IPF處理器)的ISA可以包含需要嚴(yán)格存儲器排序的顯式指令(例如,獲得裝入,釋放存儲,存儲柵欄及信號量),而多數(shù)的正規(guī)裝入和存儲并不會對嚴(yán)格的存儲器排序產(chǎn)生影響。在一個采用強(qiáng)存儲器排序模型的ISA(如,IA-32ISA)中,每條裝入或存儲指令都會遵循嚴(yán)格的存儲器排序規(guī)則。因此,例如,從IA-32環(huán)境編譯成IPF環(huán)境的程序,就會對強(qiáng)存儲器排序產(chǎn)生影響,以便于通過用取得裝入來代替所有的裝入并用釋放存儲來代替所有的存儲從而確保適當(dāng)?shù)某绦蛐袨椤?br>
當(dāng)依據(jù)本發(fā)明一個實施例的處理器處理獲得裝入時,它要確保該獲得裝入在隨后的裝入及存儲得到處理之前就已經(jīng)達(dá)到全局可見。這樣,如果獲取裝入在第一級的數(shù)據(jù)高速緩存中失誤,則隨后的裝入就不能更新寄存器文件,即使它們已經(jīng)進(jìn)入了數(shù)據(jù)高速緩存,而隨后的存儲就一定要測試,只有該獲得裝入將它的數(shù)據(jù)送回寄存器文件之后才寫入的數(shù)據(jù)塊的占有權(quán)。它就不可能有占有權(quán)。為了做到這一點,處理器就要強(qiáng)制所有比未完成的獲得裝入較新的全部裝入錯過數(shù)據(jù)高速緩存中而進(jìn)入到裝入隊列,即,失誤請求隊列(MPQ),以確保正常的排序。
當(dāng)根據(jù)本發(fā)明一個實施例的處理器處理釋放存儲時,它要確保所有優(yōu)先的裝入和存儲都已達(dá)到全局可見。因此,在釋放存儲能使它的寫入全局可見之前,所有優(yōu)先的裝入必須已經(jīng)把數(shù)據(jù)送回寄存器文件內(nèi),并且全部優(yōu)先的存儲必須通過高速緩存相干協(xié)議達(dá)到占有權(quán)可見。
存儲器柵欄操作和信號量操作可具有獲得裝入和釋放存儲兩種語義的元素。
仍參考圖1,示出的裝入隊列20(也稱之為“MRQ 20”)包括MQR輸入25,它是相當(dāng)于一個特定的存儲器操作(即,裝入)的輸入。盡管為了說明,示出的只包括一個單個的輸入25,但是可以有多個這樣的輸入。與MRQ輸入25相關(guān)聯(lián)的是一個由多位組成的排序向量26。排序向量26的每個位都對應(yīng)于裝入隊列20中的一個輸入,用以指示優(yōu)先的存儲器操作是否已完成。于是,排序向量26可以在相關(guān)聯(lián)的存儲器操作完成之前追蹤有待完成的優(yōu)先裝入。
同樣與MRQ輸入25相關(guān)聯(lián)結(jié)的是一個排序位(0-位)27,它可以用來指明存儲在裝入隊列20中所存儲著的隨后存儲器操作是對照MRQ輸入25來排序的。此外,還可以有一個有效位28。如圖1所示的,MRQ輸入25還可以包括一個排序存儲緩沖器標(biāo)積符(ID)29,它可以用來標(biāo)識存儲緩沖器中對應(yīng)于MRQ輸入的存儲器操作的一個輸入。
相似地,存儲隊列30(也稱之為“STB 30”)也可以包含多個輸入。為了說明,圖1只示出了一個單個的STB輸入35。STB輸入可以對應(yīng)于一個給定的存儲器操作(即,存儲)。如圖1所示,STB輸入35可以有一個與此相關(guān)聯(lián)的排序向量36。該排序向量可以指明與STB輸入35對應(yīng)的存儲器操作在裝入隊列20內(nèi)相對于以前的存儲器操作的相對排序,并且在某些實施例中,還可以選擇存儲隊列30。這樣,排序向量36可以追蹤那些在相關(guān)的存儲器操作能提交之前所必須完成的MRQ 20的優(yōu)先的存儲器操作(通常,是裝入)。盡管在圖1沒有示出,但在某些實施例中,STB30可提供一個STB提交通知(例如,給MRQ)用來指明一個優(yōu)先的存儲器操作(通常,是STB中的存儲)現(xiàn)在已提交了。
在各種實施例中,歸并緩沖器40可以發(fā)出一個信號45(即,一個“所有優(yōu)先的寫入可見”信號),它可以用來指明所有優(yōu)先的寫入操作都已達(dá)到可見了。在該實施例中,信號45可以用來通知提交曾被延遲的STB30里的釋放語義的存儲器操作(通常,是一個釋放存儲,存儲器柵欄或釋放信號量)一旦現(xiàn)在接收到信號45就可以立即提交了。信號45的使用將在下面討論。
這些機(jī)構(gòu)合在一起,可以由發(fā)出的存儲器操作的語義根據(jù)需要來加強(qiáng)存儲器的排序。這種機(jī)構(gòu)可以提高性能,作為根據(jù)某些實施例的處理器,可以利用基于弱存儲器模型的本機(jī)二進(jìn)制機(jī)構(gòu),僅僅在需要時來加強(qiáng)實施排序約束。
此外,在各種實施例中,適用于裝入的排序向量檢查可以盡可能地推遲。這有兩個含義。第一,關(guān)于流水線存儲器訪問,需要排序約束的裝入可正常地訪問高速緩存層(除非受強(qiáng)制錯過主數(shù)據(jù)高速緩存)。這允許一個裝入在它的排序約束受檢之前可訪問第二級和第三級高速緩存及其它處理器套接高速緩存和存儲器。只有當(dāng)裝入數(shù)據(jù)準(zhǔn)備寫入寄存器文件、排序向量已受檢查才確保所有的約束相符合。例如,如果一個獲取裝入錯過主要數(shù)據(jù)高速緩存,則一個隨后的裝入(它必須等候獲取裝入完成之后)可以在獲取裝入的陰影之下發(fā)出的請求。如果那個獲取裝入在隨后的裝入返回數(shù)據(jù)之前返回數(shù)據(jù),隨后的裝入不會遭受因排序約束而造成的性能惡化。因此,最好情況下,在裝入操作得到完全流水化時,排序可以得到加強(qiáng)。
其次,關(guān)于數(shù)據(jù)的預(yù)取,如果一個隨后的裝入嘗試在前一個獲取裝入之前返回數(shù)據(jù),它可以有效地把它已訪問的塊預(yù)取入CPU高速緩存。在獲取裝入返回了數(shù)據(jù)之后,隨后的裝入會從裝入隊列中再試,并從高速緩存得到它的數(shù)據(jù)。排序可得到維持,因為一個插入的全局可見寫入使高速緩存線失效,導(dǎo)致預(yù)取的高速緩存塊可得到一個更新了的復(fù)制品。
現(xiàn)在參考圖2,所示的是根據(jù)本發(fā)明一個實施例處理一個裝入指令的方法的流程圖。該裝入指令可以是裝入或獲得裝入的指令。如圖2中所示,方法100可以從收到裝入指令(橢圓102)開始。該指令可以在處理器中用存儲器排序規(guī)則來執(zhí)行,其中一個獲得裝入指令要在任何一個隨后的裝入操作或存儲操作變成為全局可見之前成為全局可見。另一種情況是,裝入指令在某些處理器環(huán)境中不需要排隊。圖2所示的方法可以用來處理裝入指令,而在其它實施例中,類似的流程也可以用來處理其它存儲器操作,只要它符合其它處理器的存儲器排序規(guī)則,其中第一存儲器操作必須在隨后的存儲器操作之前變成為可見的。
接著,仍參考圖2,要判定裝入隊列中是否有任何優(yōu)先的已排隊的操作尚未完成(菱形105)。這些操作可以包括獲得裝入指令,存儲器柵欄等等。如果這些指令是未完成的,該裝入可以存儲在一個裝入隊列(方框170)中。此外,可根據(jù)以前輸入的排序位生成與裝入隊列中的輸入相對應(yīng)的排序向量(方框180)。即在所生成的排序向量有供可排序操作,如獲得裝入、存儲器柵欄等使用的排序位。在一個實施例中,MRQ輸入可以復(fù)制所有以前的MRQ輸入的0位來生成它的排序向量。例如,有5個以前的輸入,它們每一個都還有待于變成為全局可見,則第六個輸入的排序向量可以包含5個以前的MRQ輸入各自都有的1值。然后,控制會轉(zhuǎn)入菱形115,這將在下面進(jìn)一步討論。而圖2示出當(dāng)前的輸入可以取決于在存儲隊列中的優(yōu)先的排序操作,該當(dāng)前輸入也取決于在存儲隊列中優(yōu)先的排序操作,并因此它也由存儲隊列中是否具有這樣的操作所決定。
代之,如果在菱形105判定了裝入隊列中沒有未完成的優(yōu)先排序操作,則可由在數(shù)據(jù)高速緩存中是否具有數(shù)據(jù)來決定的(菱形110)。如果是有數(shù)據(jù),則可以從數(shù)據(jù)高速緩存取得數(shù)據(jù)(方框118),并可以繼續(xù)進(jìn)行正常的處理。
在菱形115,可以決定指令是不是獲得裝入操作。如果它不是,控制轉(zhuǎn)入到圖3以便得到數(shù)據(jù)(橢圓195)。反之,如果在菱形115,它被判定是獲得裝入操作,則控制轉(zhuǎn)入到方框120,在那里隨后的裝入可強(qiáng)制錯過數(shù)據(jù)高速緩存(方框120)。于是,該MRQ輸入在生成時也可以設(shè)置它本身的0位(方框150)。隨后的MRQ輸入可以使用該排序位來決定怎樣參照當(dāng)前現(xiàn)有的MRQ輸入設(shè)置它們排序向量。換句話說,隨后的裝入可通過相應(yīng)地在它的排序向量中設(shè)置一個相對應(yīng)的位來提出一個MRQ輸入的0位。接著,控制會轉(zhuǎn)入到橢圓195,它對應(yīng)于下面所討論的圖3。
盡管在圖2中沒有示出,在某些實施例中,隨后的裝入指令可以存儲在一個MRQ輸入中并生成一個0-位以及一個與此相對應(yīng)的排序向量。于是,隨后的裝入可以通過復(fù)制現(xiàn)存的MRQ輸入的0位來決定怎樣去設(shè)置它們的排序向量(即,一個隨后的裝入會通過設(shè)置在它的MRQ輸入的排序向量中的相應(yīng)的位來提示該獲得裝入的0-位)。盡管在圖2中沒有示出,不言自明,隨后的(即,沒有釋放的)存儲可以決定怎樣去按照裝入的相同方法,根據(jù)MRQ輸入的0位來設(shè)置它們的排序向量。
現(xiàn)在,參考圖3,示出的是根據(jù)本發(fā)明一個實施例的一個裝入數(shù)據(jù)的方法的流程圖。如圖3中所示,方法200可以從裝入數(shù)據(jù)操作(橢圓205)開始。接著,可以從與裝入指令相對應(yīng)的存儲器層次中接收數(shù)據(jù)(方框210)。該數(shù)據(jù)可以保存在存儲器層閃邊的不同位置中,例如,系統(tǒng)存儲器或與之相關(guān)聯(lián)的高速緩存或與處理器相關(guān)聯(lián)的芯片上或芯片外的高速緩存之中。當(dāng)從存儲器層次中接收到數(shù)據(jù),可以把它存儲在數(shù)據(jù)高速緩存或其它暫存位置中。
然后,分析與裝入指令相對應(yīng)的排序向量(方框220)。例如,在裝入隊列中與該裝入指令相對應(yīng)的一個MRQ輸入有一個與此相關(guān)聯(lián)的排序向量。分析該排序向量,籍以判定該排序向量是否已被清零(菱形230)。在圖3所示的實施例中,如果排序向量所有的位都已被清零,則這可以指明所有優(yōu)先的存儲器操作都已完成了。如果該排序向量沒有清零,這指出這種優(yōu)先的操作還未完成,相應(yīng)地,數(shù)據(jù)還沒有返回。反之,則裝入操作在裝入隊列內(nèi)進(jìn)入休眠(方框240),等待優(yōu)先的存儲器操作,例如,以前的獲得裝入操作取得進(jìn)展。
如果代替該排序向量在菱形230被判定是已被清零的,則控制會轉(zhuǎn)入到方框250,其中,數(shù)據(jù)可以被寫入到寄存器文件。接著,與裝入指令相對應(yīng)的輸入可重新分配(方框260)。最后,在方框70處,與已完成的(即,已重新分配的)裝入操作的排序位可從裝入隊列和存儲隊列中所有的隨后輸入中被列清零。按這種方式,排序向量會隨著當(dāng)前操作的完成狀態(tài)而更新。
如果一個存儲操作準(zhǔn)備嘗試達(dá)到全局可見(例如,從存儲緩沖器向歸并緩沖器進(jìn)行復(fù)制,并為它的高速緩存塊要求占有權(quán)),則它會首先去檢查以確保它的排序向量已被清零。如果不是這樣,則操作就會推遲到排序向量被完全清零。
現(xiàn)在,參考圖4,示出的是按照本發(fā)明的一個實施例處理一個存儲指令的方法的流程圖。該存儲指令可以是存儲或釋放存儲指令。在某些實施例中,存儲指令是不需要排序的。然而,在一些使用該處理器的實施例中,存儲器排序規(guī)則命令在釋放存儲操作本身變成為全局可見之前所有優(yōu)先的裝入或存儲操作須變成為全局可見。盡管圖4所示的實施例中討論的只涉及存儲指令,不言自明,這樣的流程或類似的流程也可以用來處理在給定的操作變成為可見的之前那些需要優(yōu)先的存儲器操作變成為可見的類似存儲器排序操作。
仍參考圖4,方法400可以從接收存儲指令開始(橢圓405)。在方框410,將該存儲指令插入到存儲隊列中的一個輸入中。接著,是判定該操作是不是一個釋放存儲操作(菱形415)。如果它不是,則基于裝入隊列中所有優(yōu)先的未完成的已排序操作的輸入(用它們的排序位組)來生成一個排序向量(方框425)。因為該存儲指令不是一個已排序的指令,所以這樣的排序向量不用它的排序位就可以生成。然后,把控制可轉(zhuǎn)入到菱形430,下面將進(jìn)一步討論。
反之,如果在菱形415中判定有一個釋放存儲指令,接著可根據(jù)裝入隊列中有關(guān)所有優(yōu)先的未完成的可排序操作的信息為輸入生成一個排序向量(方框420)。正如上面所討論的,該排序向量可包括對應(yīng)于暫停存儲操作(例如,MRQ中未完成的裝入,以及存儲器柵欄及其它類似的操作)的位。
在菱形430,可以判定排序向量是否已被清零。如果排序向量未被清零,則可執(zhí)行循環(huán)直至排序向量已被清零。當(dāng)排序向量已成為清了零的,則可以判定該操作是不是一個釋放操作(菱形435)。如果它不是,控制可直接轉(zhuǎn)入到方框445,正如下面所討論的。反之,如果判定是一個釋放操作,則要判定所有優(yōu)先的寫入是不是已全部達(dá)到可見(菱形440)。例如,在一個實施例中,當(dāng)與指令相對應(yīng)的數(shù)據(jù)已出現(xiàn)在給定的緩沖器或其它存儲位置中,則存儲是可見的。否則,菱形440可自己循環(huán)回去直至所有的優(yōu)先寫入都變成為可見的。當(dāng)達(dá)到了可見,則控制可轉(zhuǎn)入到方框445。
這時,該存儲會為寫入請求通往它的高速緩存的可見性。盡管圖4沒有示出,在允許存儲請求可見性的時間內(nèi),數(shù)據(jù)可以存儲在歸并緩沖器內(nèi)。在一個實施例中,如果所有優(yōu)先的存儲都已達(dá)到可見,則可以請求一個歸并緩沖器可見性信號。該信號指明正如歸并緩沖器所指明的那樣,所有優(yōu)先的存儲器操作都已達(dá)到全局可見。在一個實施例中,可以采用高速緩存相干協(xié)議加以排隊以達(dá)到這種可見性。這種可見性可以在高速緩存相干協(xié)議向存儲緩沖器提供一個通知時達(dá)到。
在某些實施例中,供釋放存儲操作所用的高速緩存塊可能早已在歸并緩沖器(MGB)中存在,一旦釋放存儲準(zhǔn)備好就可得到可見性時就占有。如果在供這些塊使用的MGB中存在著合理數(shù)量的歸并,則MGB就會為釋放存儲的碼流(例如,在所有的存儲都是釋放存儲的編碼分段中)維持高性能。
如果該存儲已達(dá)到可見,則可在歸并緩沖器中為存儲數(shù)據(jù)置一個確認(rèn)位。MGB可包括為每個有效的高速緩存塊所設(shè)置的確認(rèn)位,這也稱之為占有權(quán)或無效位。在該實施例中,MGB然后可對它所有的有效輸入實施或(OR)操作。如果任何有效輸入沒得到確認(rèn),則“所有的優(yōu)先寫入可見”信號就會被取消。這個確認(rèn)位一旦被置位,則該輸入就變成全局可見的。在這種情況下,存儲或釋放存儲指令就達(dá)到可見了(方框460)。不言自明,在不同的實施例中,至少由圖4所提出的某些作用可按其它的順序來執(zhí)行。例如,在某個實施例中,當(dāng)與該指令相對應(yīng)的數(shù)據(jù)已存在于給定的緩沖器或其它的存儲位置時,則優(yōu)先的寫入就可以是可見的。
現(xiàn)在,參考圖5,示出的是根據(jù)本發(fā)明一個實施例處理一個存儲器柵欄(MF)操作的方法的流程圖。在圖5所示的實施例中,存儲器柵欄是在處理器內(nèi)受處理。該處理器具有一些存儲器排序規(guī)則,它們命令,對存儲器柵欄來說,在任何一個隨后的裝入或存儲變成為可見的之前必須把所有優(yōu)先的裝入和存儲都變造成為可見的。在某個實施例中,該處理器可以是IPF處理器,IA-32處理器或其它這類處理器。
如圖5所示,可以由處理器發(fā)出存儲器柵欄指令(橢圓505)。接著,在裝入隊列和存儲隊列中都可以用與輸入相對應(yīng)的排序向量生成一個輸入(方框510)。更具體地說,該排序向量可與裝入隊列中所有優(yōu)先的可排序操作相對應(yīng)。在組成MRQ輸入時,可以在裝入隊列輸入的存儲順序識別(ID)字段中插入一個與存儲隊列輸入對應(yīng)的輸入數(shù)量(方框520)。具體地說,MRQ可記錄在“OrderSTB ID”字段中由存儲器柵欄所占用的STB輸入。接著,設(shè)置與裝入隊列輸入對應(yīng)的順序位(方框530)。存儲器柵欄的MRQ輸入可設(shè)置它的0-位,從而使隨后的裝入或存儲把存儲器柵欄登記在它們的排序向量中。
然后,可以判定是不是所有優(yōu)先的存儲都已是可見的以及存儲隊列中輸入的排序向量現(xiàn)在是否已被清零(菱形535)。如果沒有,則可執(zhí)行循環(huán)直至該存儲都已變成為可見的并且排序向量已被清零。發(fā)生這種情況時,則控制輸入到方框550,在那里,存儲器柵欄輸入可從存儲隊列重新得到分配。
正如釋放存儲處理一樣,STB可防止MF被重新分配,直至它的排序向量被清零并從歸并緩沖器接收到“所有優(yōu)先的寫入可見”信號。存儲器柵欄一旦由STB重新分配后,存儲柵欄的存儲順序隊列ID就被傳送到裝入隊列(方框560)。相應(yīng)地裝入隊列就可見到已重新分配的存儲的存儲隊列ID,并對所有輸入的排序存儲隊列ID字段進(jìn)行按內(nèi)容尋址存儲器(CAM)操作。另外,裝入隊列中的存儲器柵欄。
然后,從裝入隊列和存儲隊列所有其它的輸入(即隨后的裝入和存儲)中對與裝入及隊列輸入對應(yīng)的順序位進(jìn)行列清零(方框570),允許它們完成以及從裝入隊列中重新分配存儲器柵欄。
根據(jù)本發(fā)明一個實施例的排序硬件也可以基于其它原因來控制存儲器的次序或其它處理器操作。例如,可以用它來使用一個能提供某些但不是全部裝入的數(shù)據(jù)的優(yōu)先存儲去給裝入排序(部分擊中);它能用來通過存儲器強(qiáng)制寫后讀(RAW)、讀后寫(WAR)及寫后寫(WAW)的數(shù)據(jù)相關(guān)冒險;并且它也可用于避免數(shù)據(jù)從某些操作局部旁通至其它操作(例如,從信號量至裝入,或從存儲至信號量)。此外,在某些實施例中,信號量也可以使用相同的硬件去強(qiáng)制正確的次序。
現(xiàn)在,參考圖6,示出的是根據(jù)本發(fā)明一個實施例的典型的計算機(jī)系統(tǒng)600的方框圖。如圖6所示,計算機(jī)系統(tǒng)600包括處理器601a。在一個實施例中,處理器601a可以通過存儲系統(tǒng)互連620耦合到高速緩存相干共享存儲器系統(tǒng)(“相干存儲器630”)630。在一個實施例中,相干存儲器630可以包括動態(tài)隨機(jī)存取存儲器(DRAM),并且還可以包括相干存儲器控制器邏輯,以便在處理器601a和601b之間共享相干存儲器630。
不言自明,在其它實施例中,還可以把其它這類處理器耦合到相干存儲器630上。此外,在某些實施例中,相干存儲器630可以分部實施并展開使得系統(tǒng)600內(nèi)處理器的子系統(tǒng)與相干存儲器630的某部分相聯(lián)系,而其它的處理器與相干存儲器630的其它部分相聯(lián)系。
如圖6所示,根據(jù)本發(fā)明一個實施例的處理器601a可以包括存儲隊列30a,裝入隊列20a及歸并緩沖器40a,還有,在某些實施例中,示出的是一個可歸并緩沖器40a提供到存儲隊列30a的可見性信號45a。再有,可將2級(L2)高速緩存607耦合到處理器601a。圖6還示出,處理器601b中還可以免招類似的處理器部件,它可以是多處理器系統(tǒng)的第二內(nèi)核處理器。
相干存儲器630還可以耦合到(通過集線器鏈路)輸入/輸出(I/O)集線器635,它再耦合到I/O擴(kuò)展總線655及外圍設(shè)備總線650。在各種實施例中,I/O擴(kuò)展總線655可以耦合到各種I/O設(shè)備如鍵盤及鼠標(biāo)等其它設(shè)備上。外圍設(shè)備總線650可以耦合到各種部件如外圍設(shè)備670,它可以是一個存儲設(shè)備如閃存、插入卡等等。雖然本說明只引用了系統(tǒng)600的一些具體的部件,但是所說明的實施例還可以有許多改動。
實施例可以存儲于存儲媒體中的計算機(jī)程序來實施,該媒體具有多種指令以便于計算機(jī)系統(tǒng)可以程序方式實現(xiàn)實施例。存儲媒體可以包括,但不只限于任何類型的盤,包括軟盤、光盤,小型光盤只讀存儲器(CD-ROM),小型磁盤可讀寫存儲器(CD-RW)及磁光盤,半導(dǎo)體設(shè)備如只讀存儲器(ROM),隨機(jī)存取存儲器(RAM)如動態(tài)和靜態(tài)RAM,可擦除可編只讀存儲器(EPROM),電擦除可編程只讀存儲器(EEPROM),閃存,磁或光卡,或任何一種適合于存儲電子指令的媒體。其它實施例也可以由可編程控制器件可執(zhí)行的軟件模塊方式來執(zhí)行。
盡管本發(fā)明只用了有限的實施例來加以說明,但本領(lǐng)域的技術(shù)人員都會意識到,由之可以引出許多修改和變化。我們意圖是由后附的權(quán)利要求覆蓋在本發(fā)明真正精神和范圍內(nèi)所有的這種改動和變化。
權(quán)利要求
1.一種方法,其特征在于,包括生成與操作排序隊列中的輸入相關(guān)聯(lián)的排序向量,該輸入與系統(tǒng)的操作相對應(yīng);以及避免基于所述排序向量的操作處理。
2.如權(quán)利要求1所述方法,其特征在于,所述排序向量包含多個位,各位與操作排序隊列中相交取的輸入相對應(yīng)。
3.如權(quán)利要求2所述方法,其特征在于,還包括避免基于排序向量中指示未完成的優(yōu)先操作的位的處理。
4.如權(quán)利要求2所述方法,其特征在于,還包括在完成相對應(yīng)的優(yōu)先操作時對排序向量的對定位清零。
5.如權(quán)利要求1所述方法,其特征在于,所述排序向量包含一個與操作排序隊列中的各個輸入相關(guān)聯(lián)的排序位。
6.如權(quán)利要求5所述方法,其特征在于,還包括對操作排序隊列內(nèi)與獲取語義存儲器操作相對應(yīng)的排序位進(jìn)行置位。
7.如權(quán)利要求5所述方法,其特征在于,所述生成的排序向量包含把與優(yōu)先的未完成的存儲器操作相對應(yīng)的排序位復(fù)制到排序向量中。
8.如權(quán)利要求1所述方法,其特征在于,還包括強(qiáng)制隨后的存儲器操作描述數(shù)據(jù)高速緩存里失靈。
9.如權(quán)利要求1所述方法,其特征在于,還包括大小與該操作對應(yīng)的第一排序位進(jìn)行置位。
10.如權(quán)利要求9所述方法,其特征在于,還包括在所述操作完成時對第一排序位清零。
11.如權(quán)利要求9所述方法,其特征在于,還包括生成一個與一個隨后操作相對應(yīng)的第二排序向量,且所述第二排序向量包含第一排序位。
12.一種方法,其特征在于,包括生成與第一操作排序隊列內(nèi)的輸入相關(guān)聯(lián)的排序向量,所述輸入與存儲器操作相對應(yīng),所述排序向量具有多個位,各位與第二操作排序隊列內(nèi)的輸入對應(yīng);以及避免基于所述排序向量的存儲器操作處理。
13.如權(quán)利要求12所述方法,其特征在于,還包括避免基于排序向量中指示第二操作排序隊列內(nèi)未完成的優(yōu)先存儲器操作位的處理。
14.如權(quán)利要求13所述方法,其特征在于,還包括在完成相應(yīng)的優(yōu)先存儲器操作時對排序向量的對定位清零。
15.如權(quán)利要求12所述方法,其特征在于,所述第一操作排序隊列包括一個存儲隊列,以及所述第二操作排序隊列包括一個裝入隊列。
16.如權(quán)利要求15所述方法,其特征在于,所述排序向量包含一個與裝入隊列中各個輸入相關(guān)聯(lián)的排序位。
17.如權(quán)利要求16所述方法,其特征在于,還包括對與獲得語義操作相對應(yīng)的裝入隊列中的輸入的排序位進(jìn)行置位。
18.一種包括機(jī)器可存取存儲媒體的物品,其特征在于,它包含一些指令,如果執(zhí)行這些指令可以使系統(tǒng)避免存儲器操作在與存儲器操作對應(yīng)的排序向量指出至少有一個優(yōu)先存儲器操作尚未完成時的第一時間發(fā)生。
19.如權(quán)利要求18所述的物品,其特征在于,還包括一些指令,如果執(zhí)行這些指令可使系統(tǒng)在至少有一個優(yōu)先的存儲器操作得到完成時就更新排序向量。
20.如權(quán)利要求18所述的物品,其特征在于,還包括一些指令,如果執(zhí)行這些指令可使系統(tǒng)去強(qiáng)制隨后的存儲器操作錯過高速緩存。
21.如權(quán)利要求18所述的物品,其特征在于,還包括一些指令,執(zhí)行這些指令可使系統(tǒng)對存儲器操作的排序位進(jìn)行置位。
22.一種設(shè)備,其特征在于,包括第一緩沖器,用于存儲多項輸入,所述各項輸入與存儲器操作相對應(yīng),各項輸入中的各項都有與之相關(guān)聯(lián)的排序向量,用于指明與之相對應(yīng)的存儲器操作的相對順序。
23.如權(quán)利要求22所述的設(shè)備,其特征在于,還包括第二緩沖器,用于存儲多項輸入的各項輸入,與一個存儲器操作相對應(yīng),各項輸入中的各項都有一個與相關(guān)聯(lián)的排序向量,用于指明與之相對應(yīng)的存儲器操作的相對順序。
24.如權(quán)利要求22所述的設(shè)備,其特征在于,還包括,與第一緩沖器相耦合的歸并緩沖器,如果優(yōu)先的存儲器操作是可見的就產(chǎn)生一個信號。
25.如權(quán)利要求22所述的設(shè)備,其特征在于,多項輸入中的各項都包括一個排序位,用于指明隨后的存儲器操作是不是要參照相應(yīng)的存儲器操作進(jìn)行排序。
26.一種系統(tǒng),其特征在于,包括處理器,它具有用于存儲多項輸入的第一緩沖器,其中各項輸入都與存儲器操作相對應(yīng),多項輸入中的各項都有與之相關(guān)聯(lián)的排序向量,用于指明相應(yīng)的存儲器操作的相對順序;以及與處理器相耦合的動態(tài)隨機(jī)存取存儲器。
27.如權(quán)利要求26所述的系統(tǒng),其特征在于,還包括第二緩沖器,用于存儲與存儲器操作相對應(yīng)的多項輸入,各項輸入中的各項都有一個與之相關(guān)聯(lián)的排序向量,用于指明相應(yīng)的存儲器操作的相對順序。
28.如權(quán)利要求26所述的系統(tǒng),其特征在于,還包括與第一緩沖器要耦合的歸并緩沖器,如果優(yōu)先的存儲器操作是可見的就產(chǎn)生一個信號。
29.如權(quán)利要求26所述的系統(tǒng),其特征在于,所述處理器具有一種用于處理尚未排序的裝入指令的指令集結(jié)構(gòu)。
30.如權(quán)利要求26所述的系統(tǒng),其特征在于,所述處理器具有一種用于處理尚未排序的存儲指令的指令集結(jié)構(gòu)。
全文摘要
在本發(fā)明的一個實施例中,一種方法包括生成第一排序向量,該向量與一個操作排序隊列中的一個第一輸入相對應(yīng),而該輸入與第一存儲器操作相對應(yīng),以及避免在完成第一存儲器操作之前完成隨后的存儲器操作。在這種方法中,該操作排序隊列,可以是例如一個裝入隊列或一個存儲隊列??梢韵嗨频貫榛诘诙僮髋判蜿犃兄兄T輸入的第一操作排序隊列的一個輸入生成一個排序向量。此外,該輸入可以包括識別第二操作排序隊列中的一個輸入的字段。一個歸并緩沖器可以耦合到第一操作排序隊列并在所有優(yōu)先寫入變?yōu)榭梢姇r產(chǎn)生一個信號。
文檔編號G06F9/38GK1728087SQ200510091088
公開日2006年2月1日 申請日期2005年8月1日 優(yōu)先權(quán)日2004年7月30日
發(fā)明者G·赫里索斯, U·埃切若, 苗其昌, J·瓦施 申請人:英特爾公司