專利名稱:共享存儲器計(jì)算機(jī)系統(tǒng)中自有高速緩存塊的預(yù)測早寫回的制作方法
背景技術(shù):
多處理器數(shù)據(jù)處理系統(tǒng)管理大量處理器的集合計(jì)算能力。存儲器系統(tǒng)是多處理器系統(tǒng)的中心,其必須可擴(kuò)展,以在多處理器之間共享數(shù)據(jù)時(shí)提供足夠的帶寬給每一處理器。對于某些應(yīng)用,共享內(nèi)存的高效方法對于運(yùn)行在多處理器上的線程之間的有效協(xié)作是至關(guān)重要的。
大多數(shù)由CPU寫下的數(shù)據(jù)塊不期望在剛獲得所有權(quán)后就被其他代理/處理器讀寫。但是,在短時(shí)間內(nèi)某些塊可能被極大地共享,如果這些塊被用于同步多線程的執(zhí)行的話。通信或同步延時(shí)開銷可以是確定多處理器系統(tǒng)(例如芯片多處理器)上多線程負(fù)載的擴(kuò)展性的一個(gè)因素。
從下列如附圖所示的優(yōu)選實(shí)施例的描述中,本發(fā)明的各種各樣的特征將顯而易見,在所述附圖中,相同的參考數(shù)字表示相同的附件。附圖未必是按比例繪制的,重點(diǎn)放在說明本發(fā)明的原理。
圖1為多處理器系統(tǒng)的框圖;圖2為圖1的多處理器系統(tǒng)中的處理器的框圖;圖3為由圖1的多處理器系統(tǒng)執(zhí)行的示例方法的自有高速緩存塊(cache block)的預(yù)測早寫回的流程圖;圖4為可以提供多線程處理器環(huán)境的系統(tǒng)的框圖。
具體實(shí)施例方式
下面的描述是說明性而非限制性的,闡述的諸如具體結(jié)構(gòu)、體系、接口和技術(shù)之類的特定描述是為了實(shí)現(xiàn)對本發(fā)明各個(gè)方面的徹底了解。但是,對了解本發(fā)明的本領(lǐng)域技術(shù)人員顯而易見的是,本發(fā)明的各個(gè)方面也可以使用不同于這些特定細(xì)節(jié)的其他示例來實(shí)現(xiàn)。在具體示例中,省略了公知的裝置、電路和方法的描述,以避免因非必要的細(xì)節(jié)而對本發(fā)明的描述造成模糊。
本發(fā)明涉及由芯片多處理器節(jié)點(diǎn)構(gòu)成的可擴(kuò)展共享存儲器系統(tǒng)的自有高速緩存塊的寫回。本發(fā)明的實(shí)施例可以提供的半導(dǎo)體芯片包括處理器,以及用于連接處理器和共享地址空間的雙向環(huán)互連。根據(jù)本發(fā)明的一個(gè)實(shí)施例,每一處理器可以包括多個(gè)CPU,且地址空間可以包括大的共享高速緩存。每一CPU可以具有其自己的私有指令和數(shù)據(jù)高速緩存(第一級高速緩存),所有CPU共享單個(gè)第二級高速緩存??梢员话ㄓ谙到y(tǒng)每一節(jié)點(diǎn)中的協(xié)議引擎和高速緩存控制器在芯片中所有高速緩存之間以及跨節(jié)點(diǎn)的所有高速緩存之間維持高速緩存一致性(cache coherence)。
本文中披露的所有的特定的量(例如處理器數(shù)量、節(jié)點(diǎn)數(shù)量和接口數(shù)量)僅用于解釋一個(gè)特定實(shí)施例的操作。通常,這些量會因本發(fā)明實(shí)施的不同而變化(有時(shí)變化還會很大)。
參照圖1,所示的多處理器系統(tǒng)100包括多個(gè)處理器節(jié)點(diǎn)102。每一處理器節(jié)點(diǎn)102優(yōu)選被實(shí)現(xiàn)為單個(gè)的芯片多處理器。在優(yōu)選實(shí)施例中,每一處理器節(jié)點(diǎn)102可以具有8個(gè)處理器內(nèi)核104;但是,在其他實(shí)施例中,也可以具有2至6個(gè)處理器內(nèi)核104。可以包括中央處理單元的處理器內(nèi)核104為處理器內(nèi)核,因?yàn)樗鼈兊母咚倬彺婧推渌С蛛娐繁华?dú)立顯示(如圖2所示)。
每一內(nèi)核104連接到邏輯共享的支援高速緩存(backing cache)106。共享的支援高速緩存106連接到存儲器108。所述存儲器108可以表示用于存儲處理器所用的數(shù)據(jù)和指令的任何類型的存儲裝置。
通常,盡管本發(fā)明不限于此,但存儲器108可以包括動態(tài)隨機(jī)存取存儲器(DRAM)。在另一個(gè)實(shí)施例中,存儲器108可以包括半導(dǎo)體存儲器。在又一個(gè)實(shí)施例中,存儲器108可以包括諸如磁盤驅(qū)動器之類的磁存儲裝置。但是,本發(fā)明并不限于本文所述的存儲器的示例。
多個(gè)節(jié)點(diǎn)102可以通過包括路由器109和互連裝置110的子系統(tǒng)進(jìn)行連接。子系統(tǒng)還可以包括輸入隊(duì)列、輸出隊(duì)列和分組交換機(jī)(均未示出)。路由器109可以經(jīng)由互聯(lián)裝置110從其他節(jié)點(diǎn)接收分組或向其他節(jié)點(diǎn)發(fā)送分組?;ミB裝置110可以物理連接多節(jié)點(diǎn)102。系統(tǒng)控制模塊111負(fù)責(zé)各種與維護(hù)相關(guān)的功能(例如,系統(tǒng)配置、初始化和中斷分布)。
雖然本發(fā)明是結(jié)合多處理器和共享存儲器系統(tǒng)進(jìn)行描述的,但本發(fā)明也適用于單處理器計(jì)算機(jī)系統(tǒng)。
圖1所示的計(jì)算系統(tǒng)的實(shí)施例可以包括多個(gè)處理器和多個(gè)高速緩存。這些存儲器和高速緩存包括多處理器系統(tǒng),其中,高速緩存通過高速緩存一致性機(jī)制在相互間保持一致性??梢栽谔幚砥鞲咚倬彺婧痛鎯ζ骰ミB裝置中實(shí)施高速緩存一致性協(xié)議,以保持高速緩存一致性。
在具有共享存儲器的多處理器系統(tǒng)中必須實(shí)現(xiàn)高速緩存一致性。高速緩存一致性協(xié)議解決以下問題確保系統(tǒng)中沒有處理器使用本地高速緩存中的穩(wěn)定數(shù)據(jù)。通常,通過使除了最近更新的高速緩存數(shù)據(jù)之外的高速緩存數(shù)據(jù)無效,或者通過使用最近數(shù)據(jù)更新高速緩存,可以刪除穩(wěn)定高速緩存項(xiàng)。在使用無效協(xié)議的系統(tǒng)中,從高速緩存嘗試訪問無效存儲器位置會導(dǎo)致處理器從其他高速緩存或主存儲器讀取最近數(shù)據(jù)的副本。在更新協(xié)議中,在寫操作之后,使用最近數(shù)據(jù)對具有數(shù)據(jù)高速緩存版本的所有高速緩存進(jìn)行更新。因此,在高速緩存中大部分最近數(shù)據(jù)是可用的。
圖2為圖1的多處理器系統(tǒng)中的處理器的框圖,其預(yù)測自有高速緩存塊的早寫回。每一內(nèi)核104包括私有高速緩存112,所述私有高速緩存112是共享高速緩存106的子集。所述高速緩存112可以是直寫式高速緩存。
當(dāng)CPU必需向存儲器地址寫入或存儲時(shí),CPU需要從塊的高速緩存體系的較低級別請求所有權(quán),并且在獲得所有權(quán)之前無法對塊進(jìn)行寫入。這是為了維持正確的高速緩存一致性。當(dāng)CPU x發(fā)送所有權(quán)請求后,無效的信號被傳送給潛在的共享者,即具有該塊副本的其他CPU。一致性協(xié)議將向請求所有權(quán)的CPU x發(fā)送確認(rèn)消息,向其告知其對該塊的所有權(quán)。在確認(rèn)消息被發(fā)送后,現(xiàn)在可以發(fā)生寫入動作。
為了最小化直寫高速緩存112所生成的存儲帶寬,每一CPU104均可以具有結(jié)合的合并緩沖器114,以向同一高速緩存塊聚集最近存儲的數(shù)據(jù)。合并緩沖器114可以總共包括16個(gè)高速緩存塊。通常,合并緩沖器114可以試圖將自有的塊保持盡可能長的時(shí)間,以最大化所存儲的數(shù)據(jù)的結(jié)合,并最小化返回高速緩存的直寫流量。
寫回可以由在初始的寫請求被發(fā)送給的合并緩沖器114項(xiàng)中設(shè)置“purgeMe(清除我)”比特造成。合并緩沖器114中的每一項(xiàng)均存在purgeMe比特。在每一周期中,與合并緩沖器114相關(guān)的控制邏輯試圖選擇具有purgeMe比特設(shè)置的項(xiàng),并將塊寫回至共享的高速緩存106中。如果沒有項(xiàng)具有已設(shè)置的purgeMe比特,則不選擇任何項(xiàng)。
可以由于各種原因設(shè)置purgeMe比特。一個(gè)原因是,合并緩沖器114中填滿了有效項(xiàng),并跨越了“清除門限”。如果合并緩沖器114跨越了清除門限,則與合并緩沖器114相關(guān)的控制邏輯可以隨后為一個(gè)或多個(gè)項(xiàng)設(shè)置purgeMe比特。通過為項(xiàng)設(shè)置purgeMe比特,所述項(xiàng)可以被寫回至共享的高速緩存106,以為新到達(dá)的提交存儲(committed store)騰出空間。對于系統(tǒng)100,如果預(yù)測對應(yīng)的數(shù)據(jù)將被另一個(gè)CPU或高速緩存一致性代理所使用的話,則可以為該項(xiàng)設(shè)置purgeMe比特。
圖3為由圖1的多處理器系統(tǒng)執(zhí)行的預(yù)測自有高速緩存塊的早寫回的示例方法的流程圖。響應(yīng)于發(fā)起CPU的所有權(quán)請求,對寫回塊的預(yù)測是基于高速緩存一致性協(xié)議中的消息的。
如果所有權(quán)請求是從CPU x發(fā)送給共享高速緩存的(305),則共享高速緩存必須首先確定所請求的塊是否由另一個(gè)CPU所擁有(310)。如果所請求的塊不被另一個(gè)CPU所擁有,則系統(tǒng)判定所請求的塊是否被另一個(gè)CPU或其他CPU所共享(311)。如果該塊不具有其他共享者,則發(fā)送AckNonShared消息以授予對該塊的所有權(quán),并宣布沒有其他CPU具有該塊的副本(315)。但是,如果該塊不被自有而是被共享,則發(fā)送AckShared消息,所有權(quán)被傳送給CPU x(312)。
如果該塊被諸如CPU y之類的另一CPU所擁有,則向CPU y發(fā)送收回消息(320)。如果接收到收回消息,CPU y使用其最近存儲數(shù)據(jù)更新該塊,并設(shè)置purgeMe比特,以從其合并緩沖器中提取塊(325)。一旦從合并緩沖器中提取了塊,CPU y將塊寫回至存儲器,放棄其所有權(quán)(330)。
現(xiàn)在將更新塊發(fā)送給正在請求的CPU x(335)。CPU x可以使用當(dāng)前數(shù)據(jù)來更新塊(340),并隨后立即將塊發(fā)送給共享高速緩存(345)。將更新的塊隨后立即發(fā)送給共享高速緩存是因?yàn)樵搲K數(shù)據(jù)之前由另一個(gè)CPU(即CPU y)所擁有。
現(xiàn)在假設(shè)CPU x需要再次寫入塊,另一個(gè)所有權(quán)請求將被發(fā)送給共享高速緩存305。此時(shí),如果在此期間沒有其他CPU讀取該塊,表示塊不被擁有(310)也不被共享(311),則將AckNonShared消息發(fā)送給CPU x(315)。CPU x現(xiàn)在可以保持該塊,直到其因容量原因(或被另一個(gè)CPU請求)而被收回為止。
但是,如果另一個(gè)CPU在此期間讀取了該塊,表示塊不被擁有(310)但被共享(311),則將AckWasShared消息發(fā)送給CPU x(312),該塊被再次早寫回。
如果CPU y現(xiàn)在請求該塊,其可能已經(jīng)被請求該塊的上一CPU寫回至共享高速緩存中,否則,其可能正在傳輸中。如果該塊已經(jīng)被寫回至共享高速緩存,這將把4-跳事務(wù)縮減為2-跳事務(wù),潛在地將同步延時(shí)縮減了一半。
因此,當(dāng)請求的CPU作出所有權(quán)請求時(shí),如果其他CPU具有(或可能具有)塊的副本,則將該塊盡快寫回。如果其他CPU具有該塊的副本,但不再訪問該塊,則對其的第一次寫入會導(dǎo)致該塊的臨時(shí)(expedient)寫回,但隨后的寫入則不會。
在此之前,處理器并不區(qū)別共享的塊和不共享的塊的確認(rèn)。使用上述方法,處理器現(xiàn)在可以確定多長時(shí)間其應(yīng)該將塊送回至共享的支援高速緩存。這使得系統(tǒng)可以預(yù)測何時(shí)需要快速共享。
有利地,該方法使系統(tǒng)能夠預(yù)測哪些寫入塊更有可能被另一個(gè)CPU所請求,在更新塊中的數(shù)據(jù)后,擁有的CPU將這些塊盡快寫回至存儲器。如果另一個(gè)處理器請求該數(shù)據(jù),這將縮減獲得數(shù)據(jù)的延時(shí),減少同步開銷,并提高并行程序的吞吐量。
參照圖4,系統(tǒng)400包括支持自有高速緩存塊的預(yù)測早寫回的處理器。系統(tǒng)400一般性地示出了處理器、存儲器以及輸入/輸出裝置由多個(gè)點(diǎn)到點(diǎn)接口來相互連接的系統(tǒng)。系統(tǒng)400還可以具有幾個(gè)處理器,為清晰起見,在圖中只示出了處理器405、410這兩個(gè)處理器。每個(gè)處理器405、410可以分別包括處理器內(nèi)核407、412。處理器405、410可以分別包括與存儲器425、430連接的本地存儲控制器中心(MCH)415、420。處理器405、410可以使用點(diǎn)到點(diǎn)接口電路440、445經(jīng)由點(diǎn)到點(diǎn)接口435來交換數(shù)據(jù)。處理器405、410可以使用點(diǎn)到點(diǎn)接口電路465、470、475和480經(jīng)由單獨(dú)的點(diǎn)到點(diǎn)接口455、460來與芯片組450交換數(shù)據(jù)。芯片組450也可以經(jīng)由高性能圖形接口490來與高性能圖形電路485交換數(shù)據(jù)。
芯片組450可以經(jīng)由總線接口495與總線416交換數(shù)據(jù)。在任一系統(tǒng)中,在總線416上可能存在各種輸入/輸出I/O裝置414,在某些實(shí)施例中包括低性能圖形控制器、視頻控制器和網(wǎng)絡(luò)控制器。在某些實(shí)施例中,另一個(gè)總線橋418可用于使數(shù)據(jù)能夠在總線416和總線420之間進(jìn)行交換。在某些實(shí)施例中,總線420可以是小型計(jì)算機(jī)系統(tǒng)接口(SCSI)總線、集成驅(qū)動電路(IDE)總線或通用串行總線(USB)。附加的I/O裝置可以與總線420連接。這可以包括鍵盤和包括鼠標(biāo)的光標(biāo)控制裝置422,音頻I/O 424,包括調(diào)制解調(diào)器和網(wǎng)絡(luò)接口的通信裝置426,以及數(shù)據(jù)存儲裝置428。軟件代碼430可以存儲于數(shù)據(jù)存儲裝置428中。在某些實(shí)施例中,數(shù)據(jù)存儲裝置428可以是固定的磁盤、軟盤驅(qū)動器、光盤驅(qū)動器、磁-光盤驅(qū)動器、磁帶或包括閃速存儲器的非易失性存儲器。
在以上描述中,出于解釋而非限定的目的,闡述了諸如具體結(jié)構(gòu)、構(gòu)造、接口和技術(shù)等之類的特定細(xì)節(jié),以實(shí)現(xiàn)對本發(fā)明各個(gè)方面的徹底理解。但是,對于了解本發(fā)明特點(diǎn)的本領(lǐng)域技術(shù)人員來說顯而易見的是,使用不同于這些特定細(xì)節(jié)的其他示例,也可以實(shí)現(xiàn)本發(fā)明的各個(gè)方面。在某些實(shí)例中,省略了對公知的裝置、電路和方法的描述,以避免因非必要的細(xì)節(jié)而對本發(fā)明的描述造成模糊。
權(quán)利要求
1.一種方法,包括由第一處理器請求塊;判定第二處理器是否具有所請求的塊;如果所述第二處理器不具有所請求的塊,則向所述第一處理器傳輸塊;以及所述第一處理器立即向存儲器寫入已更新的塊。
2.如權(quán)利要求1所述的方法,其中,所述向所述第一處理器傳輸塊還包括,向所述第一處理器發(fā)送第一信號。
3.如權(quán)利要求1所述的方法,其中,所述判定所述第二處理器是否具有所請求的塊還包括判定所述塊是否由所述第二處理器所擁有;以及如果所述塊不是由所述第二處理器所擁有,則判定所述塊是否由所述第二處理器所共享。
4.如權(quán)利要求3所述的方法,其中,所述確定所述塊是否由所述第二處理器所共享還包括,向所述第一處理器發(fā)送第二信號。
5.如權(quán)利要求3所述的方法,其中,所述確定所述塊是否由所述第二處理器所擁有還包括,向所述第二處理器發(fā)送收回信號。
6.如權(quán)利要求5所述的方法,還包括,由所述第二處理器使用最近存儲的數(shù)據(jù)來更新塊。
7.如權(quán)利要求6所述的方法,還包括在緩沖器中為所述塊的項(xiàng)設(shè)置比特;以及從所述緩沖器提取所述已更新的塊。
8.如權(quán)利要求7所述的方法,還包括,由所述第二處理器向存儲器寫入所述已更新的塊。
9.如權(quán)利要求8所述的方法,還包括由所述存儲器向所述第一處理器發(fā)送所述已更新的塊;以及由所述第一處理器更新所述已更新的塊。
10.如權(quán)利要求9所述的方法,還包括由所述第一處理器再次請求所述已更新的塊;判定從所述第一處理器向所述存儲器發(fā)送所述已更新的塊之后所述第二處理器是否請求過所述已更新的塊;以及向所述第一處理器傳輸已更新的塊。
11.如權(quán)利要求10所述的方法,還包括,如果從所述第一處理器向所述存儲器發(fā)送所述已更新的塊之后,所述第二處理器未請求所述已更新的塊,則向所述第一處理器發(fā)送所述第一信號。
12.如權(quán)利要求11所述的方法,還包括由所述第一處理器更新所請求的已更新的塊;以及由所述第一處理器保持所述新的已更新的塊。
13.如權(quán)利要求10所述的方法,還包括,如果從所述已更新的塊被發(fā)送給所述存儲器之后,所述第二處理器請求過所述已更新的塊,則向所述第一處理器發(fā)送第三信號。
14.如權(quán)利要求13所述的方法,還包括由所述第一處理器更新所請求的已更新的塊;以及立即向所述存儲器寫入所述新的已更新的塊。
15.第一和第二處理器,包括連接到所述第一和第二處理器的共享高速緩存,其中,所述共享高速緩存確定數(shù)據(jù)塊的所有權(quán);位于所述第一和第二處理器的每一個(gè)中的緩沖器,其中,所述緩沖器存儲針對所述塊的最近數(shù)據(jù);且其中,所述第一處理器請求所述塊,如果所述塊由所述第二處理器共享,則所述第一處理器獲取所述塊,更新所述塊,并立即向所述共享的高速緩存寫入所述已更新的塊。
16.如權(quán)利要求15所述的第一和第二處理器,其中,所述緩沖器包括用于所述緩沖器內(nèi)每一個(gè)塊的比特。
17.如權(quán)利要求16所述的第一和第二處理器,其中,當(dāng)所述比特被設(shè)置后,提取所述緩沖器內(nèi)的所述塊。
18.如權(quán)利要求15所述的第一和第二處理器,其中,如果由所述第一處理器所請求的塊被所述第二處理器共享,則所述共享的高速緩存向所述第一處理器發(fā)送所述第二信號。
19.如權(quán)利要求15所述的第一和第二處理器,其中,如果由所述第一處理器所請求的塊不被所述第二處理器共享,則所述共享的高速緩存向所述第一處理器發(fā)送所述第一信號。
20.如權(quán)利要求19所述的第一和第二處理器,還包括,由所述第一處理器保持所述已更新的塊。
21.一種多處理器計(jì)算機(jī)系統(tǒng),其包括多個(gè)節(jié)點(diǎn),所述多個(gè)節(jié)點(diǎn)中的每一節(jié)點(diǎn)包括路由器,與所述多處理器系統(tǒng)中的所述多個(gè)節(jié)點(diǎn)進(jìn)行通信;至少第一和第二處理器,其中,所述第一和第二處理器包括連接到所述第一和第二處理器的共享高速緩存,其中,所述共享的高速緩存確定數(shù)據(jù)塊的所有權(quán),位于所述第一和第二處理器的每一個(gè)中的緩沖器,其中,所述緩沖器存儲針對所述塊的最近數(shù)據(jù),且其中,所述第一處理器請求所述塊,如果所述塊由所述第二處理器共享,則所述第一處理器獲取所述塊,更新所述塊,并立即向所述共享的高速緩存寫入所述已更新的塊,與輸入/輸出裝置之間的第一接口;以及連接到所述第一接口的音頻輸入/輸出裝置。
22.如權(quán)利要求21所述的多處理器系統(tǒng),其中,所述第一和第二處理器中的所述緩沖器包括用于所述緩沖器內(nèi)每一個(gè)塊的比特。
23.如權(quán)利要求22所述的多處理器系統(tǒng),其中,當(dāng)所述比特被設(shè)置后,提取所述緩沖器內(nèi)的所述塊。
24.如權(quán)利要求21所述的多處理器系統(tǒng),其中,如果由所述第一處理器所請求的塊被所述第二處理器共享,則所述共享的高速緩存向所述第一處理器發(fā)送所述第二信號。
25.如權(quán)利要求21所述的多處理器系統(tǒng),其中,如果由所述第一處理器所請求的塊不被所述第二處理器共享,則所述共享的高速緩存向所述第一處理器發(fā)送所述第一信號。
26.如權(quán)利要求25所述的多處理器系統(tǒng),還包括,由所述第一處理器保持所述已更新的塊。
27.如權(quán)利要求21所述的多處理器系統(tǒng),其中,所述第一接口是點(diǎn)到點(diǎn)接口。
全文摘要
一種在共享存儲器計(jì)算機(jī)系統(tǒng)中預(yù)測自有高速緩存塊的早寫回的方法。本發(fā)明使系統(tǒng)能夠預(yù)測哪些寫入塊更有可能被另一個(gè)CPU所請求,以及在塊中更新數(shù)據(jù)后,擁有的CPU盡可能快地將這些塊寫回至存儲器中。如果另一個(gè)處理器在請求數(shù)據(jù),這將縮減獲得數(shù)據(jù)的延時(shí),減少同步開銷,并提高并行程序的吞吐量。
文檔編號G06F12/08GK101088076SQ200580044894
公開日2007年12月12日 申請日期2005年12月27日 優(yōu)先權(quán)日2004年12月27日
發(fā)明者G·克里索斯, M·馬蒂納 申請人:英特爾公司