硬體軟體權衡



有很多方法可以降低硬體成本。一種方法是將通訊輔助和網路更鬆散地整合到處理節點中,從而增加通訊延遲和佔用率。

另一種方法是在軟體而不是硬體中提供自動複製和一致性。後一種方法在主記憶體中提供複製和一致性,並且可以在各種粒度下執行。它允許使用現成的商品部件作為節點和互連,最大限度地降低硬體成本。這給程式設計師帶來了實現良好效能的壓力。

寬鬆的記憶體一致性模型

共享地址空間的記憶體一致性模型定義了在相同或不同位置的記憶體操作似乎彼此執行的順序的約束。實際上,任何支援共享地址空間命名模型的系統層都必須具有記憶體一致性模型,其中包括程式設計師介面、使用者-系統介面和硬體-軟體介面。與該層互動的軟體必須瞭解其自己的記憶體一致性模型。

系統規格

體系結構的系統規範指定了記憶體操作的排序和重新排序,以及實際可以從中獲得多少效能。

以下是使用程式順序中的鬆弛的幾個規範模型:

  • 放鬆寫-讀程式順序 - 此類模型允許硬體抑制一級快取記憶體中錯過的寫操作的延遲。當寫未命中在寫緩衝區中並且對其他處理器不可見時,處理器可以完成在其快取記憶體中命中的讀取,甚至在其快取記憶體中未命中的單個讀取。

  • 放鬆寫-讀和寫-寫程式順序 - 允許寫繞過先前對各個位置的未完成寫,從而允許在更新主記憶體之前將多個寫合併到寫緩衝區中。因此,多個寫未命中可以重疊並無序地變得可見。其動機是進一步最大限度地減少寫延遲對處理器中斷時間的影響,並透過使新的資料值對其他處理器可見來提高處理器之間的通訊效率。

  • 放鬆所有程式順序 - 預設情況下,除了程序內的​​資料和控制依賴項外,沒有保證任何程式順序。因此,其好處是多個讀取請求可以同時處於掛起狀態,並且程式順序可以被後續寫入繞過,並且可以自己無序完成,從而允許我們隱藏讀取延遲。這種型別的模型對於動態排程處理器特別有用,這些處理器可以繼續執行讀取未命中到其他記憶體引用的操作。它們允許許多重新排序,甚至消除編譯器最佳化所做的訪問。

程式設計介面

程式設計介面假設在同步操作之間不必維護程式順序。它確保所有同步操作都明確標記或識別為同步操作。執行時庫或編譯器將這些同步操作轉換為系統規範所需的適當順序保持操作。

然後,系統確保順序一致的執行,即使它可能以任何方式重新排序同步操作之間的操作,而不會破壞對程序內位置的依賴關係。這允許編譯器在同步點之間獲得它所需的重新排序的足夠靈活性,並且還允許處理器執行其記憶體模型允許的儘可能多的重新排序。在程式設計師介面處,一致性模型應至少與硬體介面的一致性模型一樣弱,但不必相同。

轉換機制

在大多數微處理器中,將標籤轉換為順序保持機制相當於在標記為同步的每個操作之前和/或之後插入合適的記憶體屏障指令。它將節省帶有指示要強制執行哪些排序的單個載入/儲存的指令,並避免額外的指令。但是,由於操作通常很少,因此這不是大多數微處理器迄今為止採用的方式。

克服容量限制

我們討論了僅在處理器快取記憶體中提供硬體自動複製和一致性的系統。處理器快取在未首先在本地主記憶體中複製的情況下,在引用時直接複製遠端分配的資料。

這些系統的一個問題是本地複製的範圍僅限於硬體快取。如果從快取記憶體中替換了一個塊,則當再次需要它時,必須從遠端記憶體中獲取它。本節中討論的系統的主要目的是解決複製容量問題,但仍然在硬體中提供一致性,並以快取塊的細粒度提供一致性以提高效率。

三級快取

為了解決複製容量問題,一種方法是使用大型但速度較慢的遠端訪問快取。當機器的節點本身是小規模多處理器時,這對於功能性是必要的,並且可以簡單地為了效能而變得更大。它還將儲存已從本地處理器快取記憶體中替換的複製遠端塊。

僅快取記憶體架構 (COMA)

在 COMA 機器中,整個主記憶體中的每個記憶體塊都帶有一個與其關聯的硬體標籤。沒有固定節點可以始終保證為記憶體塊分配空間。資料動態遷移到或複製到訪問/吸引它們的節點的主記憶體中。當訪問遠端塊時,它會在吸引記憶體中複製並載入到快取中,並由硬體在這兩個位置保持一致。資料塊可以駐留在任何吸引記憶體中,並且可以輕鬆地從一個記憶體移動到另一個記憶體。

降低硬體成本

降低成本意味著將某些專用硬體的功能轉移到在現有硬體上執行的軟體中。對於軟體來說,在主記憶體中管理複製和一致性比在硬體快取中更容易。低成本方法傾向於在主記憶體中提供複製和一致性。為了有效地控制一致性,輔助的其他每個功能元件都可以從硬體專門化和整合中受益。

研究工作旨在透過不同的方法降低成本,例如透過在專用硬體中執行訪問控制,但將其他活動分配給軟體和商品硬體。另一種方法是在軟體中執行訪問控制,並旨在在沒有專用硬體支援的商品節點和網路上分配一致的共享地址空間抽象。

對並行軟體的影響

寬鬆的記憶體一致性模型需要並行程式將所需的衝突訪問標記為同步點。程式語言提供支援將某些變數標記為同步,然後編譯器會將其轉換為合適的順序保持指令。為了限制編譯器本身對共享記憶體訪問的重新排序,編譯器本身可以使用標籤。

廣告