專利名稱:在多處理器系統中高速緩存數據的方法和多處理器系統的制作方法
技術領域:
本發明一般涉及處理系統和電路,而且更具體地,涉及在多處理器系統 中高速緩存數據。
背景技術:
處理器系統通常包括高速緩存以減少與存儲器存取相關聯的等待時間。 高速緩存一般是較小、較快的存儲器(相對于主存儲器),其用于存儲來自 最頻繁使用的主存儲器位置的數據的副本。在操作中, 一旦高速緩存變滿(或 者在組相關高速緩存的情況下, 一旦組變滿),則對可高速緩存數據(主存 儲器中的)的隨后的引用通常將導致之前存儲在緩存(或組)中的數據被清 出,以為在緩存(或組)中存儲新引用的數據騰出空間。傳統處理器系統中, 即使新引用的數據并不重要(例如,新引用的數據將不會在隨后的處理器操 作中被再次引用),通常也發生之前存儲的數據被從高速緩存清出。因而, 在這樣的處理器系統中,如果在隨后的處理器操作中引用了被清出的數據, 則將發生高速緩存失準,這通常導致處理器系統的性能下降。
對在處理器搡作中僅使用 一次的數據的頻繁引用導致高速緩存污染,其 中將重要數據清出以為暫時數據騰出空間。應對高速緩存污染的 一種辦法是 增大高速緩存的尺寸。但是,該辦法導致處理器系統的成本、功率、以及設 計復雜度的增加。對高速緩存污染的另一種解決辦法是將暫時數據標記(或 標注)為不可高速緩存的。然而,這樣的技術需要預先識別主存儲器中存儲 暫時(或非頻繁使用的)數據的區域。而且,對數據的這樣的嚴格劃分不是 在所有情況下都可能的。
發明內容
一般而言,在一個方面,本說明書描述一種用于在包含第一處理器和第 二處理器的多處理器系統中高速緩存數據的方法。所述方法包括產生對數據
的存儲器存取請求,其中所述數據是與第一處理器相關if關的處理器操作所需
的。所述方法進一步包括,響應于所述凄史據未高速緩存在與第一處理器相關 聯的第 一 高速緩存中,監聽與第二處理器相關聯的第二高速緩存以確定所述 數據是否之前已作為從第一處理器對該數據的存取的結果高速緩存在第二 高速緩存中。響應于所述數據高速緩存在與第二處理器相關聯的第二高速緩 存中,所述方法進一步包括將所述數據從第二高速緩存傳遞到第一處理器。
一般而言,在一個方面,本說明書描述一種多處理器系統,包括第一 處理器,包含與其相關聯的第一高速緩存;第二處理器,包含與其相關聯的 第二高速緩存;以及主存儲器,用于存儲第一處理器和第二處理器所需的數 據。主存儲器由通過總線與第一處理器和第二處理器中的每一個存儲器通信 的存儲器控制器控制,而且與第二處理器相關聯的第二高速緩存可以操作以 高速緩存與第一處理器的存儲器存取請求對應的來自主存儲器的數據。
一般而言,在一個方面,本說明書描述一種計算機程序產品,有形地存 儲在計算機可讀介質上,用于在多處理器系統中高速緩存數據,其中所述多 處理器系統包括第一處理器和第二處理器。所述計算機程序產品包括用于促 使可編程處理器監視第一處理器的高速緩存失準率、并響應于第一處理器的 高速緩存失準率低而在與第一處理器相關聯的第一高速緩存中高速緩存由 第二處理器請求的數據的指令。
實施例可以提供一個或更多以下優點。用于在多處理器系統中高速緩存 數據的技術提供一條擴展其中可以存儲數據(由多處理器系統中的給定處理 器所需的)的可用高速緩存的途徑。例如,在一個實施例中,使用與第一處 理器(所述多處理器系統中的)相關聯的高速緩存的未使用部分來存儲由第 二處理器請求的數據。此外,這里描述的技術允許更積極的軟件和硬件預取, 其中可以將與猜測地執行的路徑對應的數據高速緩存在相鄰的處理器的高 速緩存中,以減少因錯誤預測的分支而預測的路徑造成的高速緩存污染。作 為其中可以使預取更積極的另 一個示例,可以增強硬件預取器以識別稍后使
用的高速緩存行的清出。這些情況下,硬件預取器可以指示應當將預取數據 存儲在與另外的處理器相關聯的高速緩存中。類似地,當有高速緩存污染的 可能性時,由編譯器放置的軟件預取可以通過特殊指令字段來指示應當將預 取的數據放置在與另外的處理器相關聯的高速緩存中。此外,所述技術根據 多處理器系統中處理器的數量而可伸縮。所述技術同樣可以與諸如victim高 速緩存和高速緩存snarfing的傳統技術結合使用以提高多處理器系統的性
能。所述實施例可以由操作系統控制從而對用戶應用透明。
在附圖和下面iJt明中闡述一個或更多實施例的細節。其它特征和優點乂人 說明和附圖將是顯而易見的。
圖1是根據一個實施例的多處理器系統的框圖2示出根據一個實施例的用于在高速緩存中存儲數據的方法的流程
圖3A-3B示出根據一個實施例的多處理器系統的框圖。 各附圖中類似的引用符號指示類似的元素。
具體實施例方式
本發明一般涉及處理系統和電^^,而且更具體地,涉及在多處理器系統 中高速緩存數據。給出下面說明以使得本領域普通技術人員能夠實現和運用 本發明,而且其在專利申請及其必要條件的背景下才是供。本發明不打算限于 所示的實施例,而是符合與這里描述的原理和特征相一致的最寬泛的范圍。
圖1示出根據一個實施例的多處理器系統100。多處理器系統100包括 處理器102和處理器104,其均與總線106通信。雖然示出多處理器系統100 包含兩個處理器,但是多處理器系統IOO也可以包含任何數量的處理器。另 外,處理器102和處理器104可以是緊密耦合的(如圖1中所示),或者處 理器102和處理器104可以是松散耦合的。而且,處理器102和處理器104 可以實現在同一芯片上,或者可以實現在單獨的芯片上。
多處理器系統IOO還包括存儲處理器102和處理器104所需的數據的主 存儲器108。處理器102包括高速緩存110,而處理器104包括高速緩存112。 在一個實施例中,高速緩存IIO可以操作以高速緩存將由處理器102處理的 數據(來自主存儲器108),以及將由處理器104處理的數據。類似地,(在 一個實施例中)高速緩存112可以操作以高速緩存將由處理器104處理的數 據,以及將由處理器102處理的數據。高速緩存110和/或高速緩存112可以 是L1 (l級)高速緩存、L2 (2級)高速緩存、或分級的高速緩存等級。在 一個實施例中,在高速緩存110還是高速緩存112中高速緩存來自主存儲器 108的數據的決策由控制器114確定。在一個實施例中,控制器114是可操
作以在高速緩存110、 112以及主存儲器108之間管理沖突并維持一致性的
高速緩存一致性控制器(例如,在北橋中)。
圖2示出根據一個實施例的用于在多處理器系統(例如,多處理器系統 100)中存儲數據的方法200。由第一處理器(例如,處理器102)產生對數 據的存儲器存取請求(步驟202 )。對數據的存儲器存取請求可以是例如由與 第 一處理器相關聯的裝入/存儲執行單元產生的裝入存儲器操作。確定由第一 處理器請求的數據是否高速緩存(或存儲)在與第一處理器相關(或主要用 于其)的高速緩存(例如,高速緩存IIO)中(步驟204)。如果由第一處理 器請求的數據高速緩存在與第一處理器相關聯的高速緩存中(即,發生高速 緩存命中),則滿足存儲器存取請求(步驟206)。可以通過高速緩存將所請 求的數據轉發到第一處理器的流水線和/或寄存器堆來滿足存儲器存取請求。 但是,如果由第一處理器請求的數據未高速緩存在與第一處理器相關聯 的高速緩存中(即,發生高速緩存失準),則使用傳統監聽機制來確定由第 一處理器請求的數據是否高速緩存在與第二處理器(例如,處理器104)相 關聯的高速緩存(例如,高速緩存112)中(步驟208)。如果由第一處理器 請求的數據高速緩存在與第二處理器相關聯的高速緩存中,則滿足存儲器存 取請求(步驟210)。與傳統技術的差異在于,與第二處理器相關聯的高速緩 存可能在其中有第二處理器未使用裝入指令請求或預取來請求的數據。可以 通過高速緩存(與第二處理器相關聯的)將數據轉發到第一處理器的流水線 和/或寄存器堆來滿足存儲器存取請求。在一個實施例中,將存儲在與第二處 理器相關聯的高速緩存中的數據移動或復制到與第 一處理器相關聯的高速 緩存中。在這樣的實施例中,可以設置(例如,通過控制器114)指示在將 數據從與第二處理器相關聯的高速緩存移動到與第一處理器相關聯的高速 緩存之前所需的數據的存取次數的存取閾值。例如,如果將存取閾值設為 "1",則對與第二處理器相關聯的高速緩存中的數據的第 一次存取就將提示 控制器將數據移動到與第一處理器相關聯的高速緩存。如果在步驟208中由 第一處理器請求的數據未高速緩存在與第二處理器(或多處理器系統中的任 何其它處理器)相關聯的高速緩存中,則從主存儲器108檢索數據(步驟 212)。
基于存儲器存取請求的類型(或分類)將從主存儲器檢索的數據動態地 存儲在與第一處理器或第二處理器相關聯的高速緩存中(步驟214)。在一個
實施例中,基于與存儲器存取請求相關聯的優先級的類型將從主存儲器檢索 的數據存儲在給定處理器的高速緩存中。例如,(在一個實施例中)將對第 一處理器的數據的瓶說^斂請求存儲在與第二處理器相關聯的高速緩存中。 從而,在該實施例中,避免了第一處理器的高速緩存污染。可以通過多種適 當的技術將來自給定處理器的存儲器存取請求設置為低優先級請求。更一般 地,可以根據任何預先確定的準則將存儲器存取請求(來自給定處理器的) 分類(或指定類型)。
在一個實施例中,(軟件)編譯器檢查代碼和/或執行簡檔,以確定軟件
預取(高速緩存或stream touch)指令會通過將特定預取請求指定為低優先 級請求而獲益,例如,如果返回的數據不太可能在隨后的處理器操作中由處 理器再次使用,或者如果返回的數據很可能將導致高速緩存污染,則編譯器 可以將預取請求指定為低優先級請求。在一個實施例中,編譯器在軟件預取 指令中設置位,其指示應當將返回的數據(或行)放置在與另一處理器相關 聯的高速緩存(例如,相鄰處理器的L2高速緩存)中。可以由控制器114 將返回的數據導向與另一處理器相關聯的高速緩存(圖1)。因而,在一個實 施例中,處理器可以在與該處理器相關聯的高速緩存中高速緩存數據,即便 該處理器并未請求所述數據。
在一個實施例中,將與給定處理器相關聯的硬件預取邏輯設計為識別何 時從主存儲器返回的數據(與預取請求相關聯的)從高速緩存清出重要數據。
對重要數據的清出的識別可以用作硬件預取邏輯的觸發器,以設置將隨后的 預取請求指定為低優先級請求的位。于是,將與隨后的預取請求相關聯的返 回的數據放置在與另一處理器相關聯的高速緩存中。在一個實施例中,將猜 測地執行的預取和存儲器存取(例如,作為分支預測的結果)指定為低優先 級請求。這樣的指定避免了在將數據從主存儲器返回之前未^F又消的錯誤猜測 的執行的情況下的高速緩存污染。因而,可以高速緩存(在第二處理器的高 速緩存中)與替換路徑(即,最終確定為已錯誤預測的路徑)對應的數據。 這樣的對與替換路徑對應的數據的高速緩存可以在某些情況下(如果當時選 擇了該替換路徑)減少隨后訪問分支的數據存取時間。
圖3A-3B示出用于在多處理器系統300中處理存儲器存取請求的操作的 序列。圖3A-3B中所示的實施例中,多處理器系統300包括處理器302和處 理器304,其均通過總線308與主存儲器子系統306通信。處理器302包括
Ll高速緩存310和L2高速緩存312,而處理器304包括Ll高速緩存314 和L2高速緩存316。主存儲器子系統306包括用于控制對主存儲器306中 數據的存取的存儲器控制器318 (作為北橋的部分或在芯片上),而且多處理 器系統300還包括用于在L1高速緩存310、 L2高速緩存312、 Ll高速緩存 314、 L2高速緩存316、以及主存儲器316之間管理沖突和維持一致性的高 速緩存一致性控制器320(可能在北橋中)。雖然示出多處理器系統300包含 兩個處理器,但是多處理器系統300也可以包含任何數量的處理器。此外, 處理器302、304既包含L1高速緩存又包含L2高速緩存以用于例示的目的。 一般來說,可以使處理器302、 304適合于其它高速緩存分級方案。
首先參照圖3A,示出第一種類型的存儲器存取請求,其與傳統技術一 致。也即,如果由處理器請求的數據(例如,行)未存儲(或高速緩存)在 本地Ll或L2高速緩存中,而且沒有其它高速緩存有該數據(如它們的監聽 響應所指示),則處理器將存儲器存取請求發送到主存儲器的存儲器控制器, 其將數據返回到請求處理器。可以在請求處理器的本地L1或L2高速緩存中 高速緩存從主存儲器返回的數據,而且如果另一處理器請求同樣的數據,則 使用諸如四狀態MESI (已修改、獨占的、共享的、無效的)協議的傳統高 速緩存一致性協議可以指示是否可以從該處理器的高速緩存提供數據。因 而,例如,如圖3A中所示,L2高速緩存312 (處理器302的)發出對數據 的存儲器存取請求(其意指由處理器302所需的數據未被高速緩存在L1高 速緩存310或L2高速緩存312中)(步驟1 )。存儲器存取請求通過存儲器 控制器318到達主存儲器306 (步驟2 )。主存儲器306將所請求的數據(或 行)返回到總線(步驟3)。可替換地,可以將數據高速緩存在L1高速緩存 310中(步驟5),或直接傳遞到處理器302的流水線而不高速緩存在L1高 速緩存310或L2高速緩存312中。
參照圖3B,示出用于處理第二種類型的存儲器存取請求(即,低優先 級請求)的過程。具體地,L2高速緩存312發出對數據的低優先級請求(步 驟6)。低優先級請求可以是例如猜測的預取請求、或指定為低優先級請求的 其它存儲器存取請求。監聽與處理器304相關聯的L2高速緩存316以確定 數據是否高速緩存在L2高速緩存316中(步驟7 )。如果所請求的數據高速 緩存在L2高速緩存316中,則L2高速緩存316滿足低優先級請求(步驟8 ), 而且不需要主存儲器306中的存儲器存取。從而,當將數據從L2高速緩存傳遞時,可以將數據高速緩存在L2高速緩存312中(步驟9)、高速緩存在 Ll高速緩存310中、或高速緩存在L2高速緩存312和Ll高速緩存310二 者中。可替換地,可以將來自L2高速緩存316的數據直接傳遞到處理器302 的流水線和/或寄存器堆(其可以基于應用需要而減輕高速緩存污染)。
在一個實施例中,高速緩存一致性控制器320設置與存儲在L2高速緩 存316中的數據相關聯的位,其指示該數據已經由處理器302存取的次數。 此外,在該實施例中,用戶可以設置預先確定的存取閾值,其指示在將數據 從L2高速緩存316復制到與處理器302相關聯的高速緩存(即,Ll高速緩 存310或L2高速緩存312 )之前所需的對數據的存取次數(處理器302的)。 于是,例如,如果為存儲在L2高速緩存316中的給定的一行數據將存取閾 值設置為1,則對L2高速緩存316中該行數據的第一次存取就將提示高速 緩存一致性控制器320將該行數據從L2高速緩存316移動到與處理器302 相關聯的高速緩存。類似地,如果將存取閾值設置為2,則對L2高速緩存 316中該行數據的第二次存取將提示高速緩存一致性控制器320將該行數據 從L2高速緩存316移動到與處理器302相關聯的高速緩存。該實施例中, 用戶可以通過調節存取閾值來控制高速緩存污染的量。用戶在為高速緩存的 數據建立存取閾值時可以考慮包括高速緩存一致性、包含性、以及將高速緩 存污染保持為最低的期望在內的因素。
在一個實施例中,可以使用操作系統來監視多處理器系統中單個的處理 器上的負荷以及它們相應的高速緩存使用和高速緩存失準率,以控制是否高 速緩存一致性控制器應當使能將與第一處理器的低優先級請求對應的數據 存儲在與第二處理器相關聯的高速緩存中。例如,如果操作系統一操作系統 檢測到與第二處理器相關聯的高速緩存未被充分利用(或該高速緩存的高速 緩存失準率低),則操作系統可以指揮高速緩存一致性控制器以在與第二處 理器相關聯的高速緩存中存儲由第 一處理器請求的數據。在一個實施例中, 操作系統在操作期間可以動態地使能或禁止將與第 一處理器的低優先級請 求對應的數據存儲在與第二處理器相關聯的高速緩存中。
可以利用 一個或多個可編程處理器運行計算機程序以通過對輸入數據 操作并產生輸出來執行功能而完成上述一個或多個方法步驟。 一般地,上述 技術可以采取完全硬件實現、或既包含硬件又包含軟件元素的實現的形式。 軟件元素包括,但并不限于,固件、駐留程序、微代碼等等。此外,上述某
些技術可以采取從提供用于、或有關于計算機或任何指令執行系統的程序代 碼的計算機可用或計算機可讀介質可存取的計算機程序產品的形式。
對于本說明書,計算機可用或計算機可讀介質可以是能夠包含、存儲、 通信、傳播、或傳輸用于、或有關于指令執行系統、裝置、或設備的程序的 任何裝置。所述介質可以是電子、磁、光學、電磁、紅外、或半導體系統(或 裝置或設備)或者傳播介質。計算機可讀介質的示例包括半導體或固態存儲
器、磁帶、可移動計算機磁盤、隨機存取存儲器(RAM )、只讀存儲器(ROM )、 剛性》茲盤以及光盤。光盤的當前示例包括只讀光盤(CD-ROM)、讀/寫光盤 (CD-R/W)以及DVD。
已經描述了用于在多處理器系統中高速緩存數據的多種實施例。然而, 可以對上述實施例做出各種修改,這些修改將在本發明的范圍之內。例如, 可以以不同的次序執行上述方法步驟而仍達到期望的結果。而且, 一般而言, 可以通過硬件邏輯、或軟件與硬件邏輯的組合來實現上述方法步驟。上述技 術可以應用于包括例如按序執行處理器、亂序執行處理器、可編程以及不可 編程處理器、具有片上或片外存儲器控制器的處理器等等的多處理器系統。 從而,可以做出許多修改而不背離本發明的范圍。
權利要求
1.一種用于在包含第一處理器和第二處理器的多處理器系統中高速緩存數據的方法,該方法包括產生對數據的存儲器存取請求,所述數據是與第一處理器相關聯的處理器操作所需的;響應于所述數據未被高速緩存在與第一處理器相關聯的第一高速緩存中,監聽與第二處理器相關聯的第二高速緩存以確定所述數據是否之前已作為從第一處理器對該數據的存取的結果高速緩存在第二高速緩存中;以及響應于所述數據被高速緩存在與第二處理器相關聯的第二高速緩存中,將所述數據從第二高速緩存傳遞到第一處理器。
2. 如權利要求1所述的方法,其中響應于所述數據也未被高速緩存在 第二處理器的第二高速緩存中,從與所述多處理器系統相關聯的主存儲器檢索所述數據;以及 基于所述存儲器存取請求的類型動態地在與第一處理器相關聯的第一高速緩存或與第二處理器相關聯的第二高速緩存中高速緩存從所述主存儲器檢索的數據。
3. 如權利要求2所述的方法,其中產生對數據的存儲器存取請求包括 基于預先定義的準則指定所述存儲器存取請求的類型。
4. 如權利要求3所述的方法,其中指定所述存儲器存取請求的類型包 括指定所述存儲器存取請求的類型為低優先級請求。
5. 如權利要求4所述的方法,其中動態地高速緩存從所述主存儲器檢 索的數據包括在與第二處理器相關聯的第二高速緩存中高速緩存與低優先 級相關聯的數據。
6. 如權利要求4所述的方法,其中所述低優先級請求包括硬件預取請 求或軟件預取請求。
7. 如權利要求1所述的方法,進一步包括為在第二高速緩存中高速緩 存的數據設置存取閾值,所述存取閾值指示在將數據從與第二處理器相關聯 的第二高速緩存復制到與第 一處理器相關聯的第 一 高速緩存之前所需的數 據存取次數。
8. 如權利要求1所述的方法,其中將所述數據從第二高速緩存傳遞到 第 一處理器包括將所述數據從第二高速緩存直接傳遞到與第 一處理器相關 聯的寄存器堆或流水線。
9. 如權利要求l所述的方法,進一步包括 監視第二處理器的高速緩存失準率;以及響應于第二處理器的高速緩存失準率低而在與第二處理器相關聯的第 二高速緩存中高速緩存由第 一處理器請求的數據。
10. 如權利要求l所述的方法,其中第一處理器和第二處理器實現在同 一芯片上或不同芯片上。
11. 一種多處理器系統,包括 第一處理器,包含與其相關聯的第一高速緩存; 第二處理器,包含與其相關聯的第二高速緩存;以及主存儲器,用于存儲第一處理器和第二處理器所需的數據,主存儲器由 通過總線與第一處理器和第二處理器中的每一個存儲器通信的存儲器控制 器控制,其中與第二處理器相關聯的第二高速緩存可以操作以高速緩存與第一 處理器的存儲器存取請求對應的、來自所述主存儲器的數據。
12. 如權利要求11所述的多處理器系統,其中第一處理器的存儲器存 取請求是低優先級請求。
13. 如權利要求12所述的多處理器系統,其中所述低優先級請求包括 硬件預取請求或軟件預取請求。
14. 如權利要求12所述的多處理器系統,進一步包括控制器,用于將 與所述低優先級請求對應的數據從所述主存儲器導向第二高速緩存以高速 緩存所述數據。
15. 如權利要求14所述的多處理器系統,其中所述控制器是可操作以 在第 一 高速緩存、第二高速緩存以及所述主存儲器之間管理數據的沖突并維 持數據的一致性的高速緩存一致性控制器。
16. 如權利要求11所述的多處理器系統,其中第一處理器和第二處理 器是緊密耦合的而且實現在同 一芯片上或不同芯片上。
17. 如權利要求11所述的多處理器系統,其中第一處理器和第二處理 器是松散耦合的。
全文摘要
提供用于在多處理器系統中高速緩存數據的方法、計算機程序產品、以及系統。在一個實施例中,所述方法包括產生對數據的存儲器存取請求,所述數據是與第一處理器相關聯的處理器操作所需的。響應于所述數據未高速緩存在與第一處理器相關聯的第一高速緩存中,所述方法進一步包括監聽與第二處理器相關聯的第二高速緩存以確定,可能作為由第一處理器之前對所述數據的“低優先級”請求的結果,所述數據是否之前已高速緩存在第二高速緩存中,以及響應于所述數據高速緩存在與第二處理器相關聯的第二高速緩存中,將所述數據從第二高速緩存傳遞到第一處理器。
文檔編號G06F12/08GK101192198SQ20071016988
公開日2008年6月4日 申請日期2007年11月14日 優先權日2006年12月1日
發明者卡蒂克·薩迪普, 斯里尼瓦森·拉馬尼 申請人:國際商業機器公司