
平行計算機體系結構 - 快速指南
平行計算機體系結構 - 介紹
在過去的50年中,計算機系統的效能和能力有了巨大的發展。這得益於超大規模積體電路 (VLSI) 技術。VLSI技術允許在單個晶片上容納大量元件並提高時鐘頻率。因此,可以同時並行執行更多操作。
並行處理也與資料區域性性和資料通訊相關。平行計算機體系結構是在任何時間點,在技術和成本限制內,組織所有資源以最大限度地提高效能和可程式設計性的一種方法。
為什麼選擇並行架構?
平行計算機體系結構透過使用越來越多的處理器,為計算機系統的發展增添了新的維度。原則上,利用大量處理器實現的效能高於給定時間點單個處理器的效能。
應用趨勢
隨著硬體容量的提高,對高效能應用程式的需求也隨之增加,這反過來又推動了計算機體系結構的發展。
在微處理器時代之前,高效能計算機系統是透過特殊的電路技術和機器組織獲得的,這使得它們非常昂貴。現在,高效能計算機系統是透過使用多個處理器獲得的,大多數重要和需求量大的應用程式都被編寫為並行程式。因此,為了獲得更高的效能,需要同時開發並行架構和並行應用程式。
為了提高應用程式的效能,**加速比**是一個關鍵因素。p個處理器的**加速比**定義為:
$$Speedup(p \ 個處理器)\equiv\frac{Performance(p \ 個處理器)}{Performance(1 \ 個處理器)}$$對於單個固定問題,
$$計算機系統的效能 = \frac{1}{完成問題所需的時間}$$ $$固定問題的加速比(p \ 個處理器) =\frac{Time(1 \ 個處理器)}{Time(p \ 個處理器)}$$科學和工程計算
並行架構已成為科學計算(如物理、化學、生物、天文學等)和工程應用(如油藏模擬、氣流分析、燃燒效率等)不可或缺的一部分。在幾乎所有應用中,對計算輸出的視覺化都有巨大的需求,這導致了對平行計算發展的需求,以提高計算速度。
商業計算
在商業計算(如影片、圖形、資料庫、OLTP等)中,也需要高速計算機在指定時間內處理海量資料。桌面使用多執行緒程式,這幾乎類似於並行程式。這反過來也需要開發並行架構。
技術趨勢
隨著技術和體系結構的發展,對高效能應用程式的需求越來越強烈。實驗表明,平行計算機的工作速度遠快於最先進的單處理器。此外,平行計算機可以在技術和成本限制內開發。
這裡使用的主要技術是VLSI技術。因此,現在可以在相同面積內安裝越來越多的電晶體、門和電路。隨著基本VLSI特徵尺寸的減小,時鐘頻率也與其成比例地提高,而電晶體數量則按平方增長。同時使用許多電晶體(並行性)可以預期比提高時鐘頻率獲得更好的效能。
技術趨勢表明,基本的單晶片構建塊將提供越來越大的容量。因此,在單個晶片上放置多個處理器的可能性增加了。
架構趨勢
技術發展決定了什麼才是可行的;體系結構將技術的潛力轉化為效能和能力。並行性和區域性性是兩種方法,其中更大的資源量和更多電晶體可以提高效能。然而,這兩種方法競爭相同的資源。當多個操作並行執行時,執行程式所需的週期數減少了。
但是,需要資源來支援每個併發活動。還需要資源來分配本地儲存。透過使用資源來利用一定程度的並行性和一定程度的區域性性,可以實現最佳效能。
通常,計算機體系結構的歷史被劃分為四個世代,它們具有以下基本技術:
- 真空管
- 電晶體
- 積體電路
- VLSI
直到1985年,這一時期都由位級並行性的增長主導。4位微處理器之後是8位、16位等等。為了減少執行完整的32位操作所需的週期數,資料路徑的寬度加倍了。後來,引入了64位操作。
指令級並行性的增長主導了80年代中期到90年代中期。RISC方法表明,對指令處理步驟進行流水線處理很簡單,因此平均而言,幾乎每個週期都會執行一條指令。編譯器技術的進步使指令流水線效率更高。
在80年代中期,基於微處理器的計算機包括:
- 一個整數處理單元
- 一個浮點單元
- 一個快取控制器
- 用於快取資料的SRAM
- 標籤儲存
隨著晶片容量的增加,所有這些元件都被合併到單個晶片中。因此,單個晶片包含用於整數運算、浮點運算、記憶體運算和分支運算的獨立硬體。除了對單個指令進行流水線處理外,它還一次獲取多條指令,並在可能的情況下將它們並行傳送到不同的功能單元。這種指令級並行性稱為超標量執行。
並行架構的融合
並行機已經開發出幾種不同的架構。在本節中,我們將討論不同的平行計算機體系結構及其融合的性質。
通訊架構
並行架構透過通訊架構增強了傳統計算機體系結構的概念。計算機體系結構定義了關鍵的抽象(如使用者-系統邊界和硬體-軟體邊界)和組織結構,而通訊體系結構定義了基本的通訊和同步操作。它還解決了組織結構。

程式設計模型是頂層。應用程式是用程式設計模型編寫的。並行程式設計模型包括:
- 共享地址空間
- 訊息傳遞
- 資料並行程式設計
共享地址程式設計就像使用公告板一樣,在那裡可以透過在特定位置釋出資訊與一個人或多個人進行溝通,而這個位置由所有其他人共享。個體活動透過記錄誰在執行什麼任務來協調。
訊息傳遞就像電話或信件一樣,其中特定接收者從特定傳送者接收資訊。
資料並行程式設計是一種有組織的合作形式。在這裡,幾個人同時對資料集的各個元素執行操作,並全域性共享資訊。
共享記憶體
共享記憶體多處理器是最重要的並行機器類別之一。它在多程式設計工作負載上提供更好的吞吐量,並支援並行程式。

在這種情況下,所有計算機系統都允許處理器和一組I/O控制器透過某種硬體互連訪問一組記憶體模組。透過新增記憶體模組來增加記憶體容量,並透過向I/O控制器新增裝置或新增額外的I/O控制器來增加I/O容量。可以透過等待更快的處理器可用或新增更多處理器來提高處理能力。
所有資源都圍繞一箇中央記憶體匯流排組織。透過匯流排訪問機制,任何處理器都可以訪問系統中的任何物理地址。由於所有處理器到所有記憶體位置的距離相等,因此所有處理器對記憶體位置的訪問時間或延遲相同。這稱為對稱多處理器。
訊息傳遞架構
訊息傳遞架構也是一類重要的並行機器。它提供作為顯式I/O操作的處理器間通訊。在這種情況下,通訊在I/O級別組合,而不是在記憶體系統中。
在訊息傳遞架構中,使用者通訊透過使用執行許多更低級別操作的作業系統或庫呼叫來執行,其中包括實際的通訊操作。結果,在程式設計模型和物理硬體級別的通訊操作之間存在距離。
傳送和接收是訊息傳遞系統中最常見的使用者級通訊操作。傳送指定本地資料緩衝區(要傳輸的資料)和接收遠端處理器。接收指定傳送程序和放置傳輸資料的本地資料緩衝區。在傳送操作中,將識別符號或標籤附加到訊息,並且接收操作指定匹配規則,例如來自特定處理器的特定標籤或來自任何處理器的任何標籤。
傳送和匹配接收的組合完成記憶體到記憶體的複製。每一端都指定其本地資料地址和成對的同步事件。
融合
硬體和軟體的發展模糊了共享記憶體和訊息傳遞陣營之間的界限。訊息傳遞和共享地址空間代表了兩種不同的程式設計模型;每個模型都提供了一種透明的共享、同步和通訊範例。但是,基本的機器結構已經融合成一個共同的組織。
資料並行處理
另一類重要的並行機被稱為處理器陣列、資料並行架構和單指令多資料 (SIMD) 機。該程式設計模型的主要特點是可以在大型規則資料結構(如陣列或矩陣)的每個元素上並行執行操作。
資料並行程式語言通常透過檢視一組程序(每個處理器一個)的區域性地址空間來實現,這些空間形成一個明確的全域性空間。由於所有處理器都一起通訊,並且對所有操作都有全域性檢視,因此可以使用共享地址空間或訊息傳遞。
基本設計問題
僅開發程式設計模型並不能提高計算機的效率,僅開發硬體也無法做到這一點。然而,計算機體系結構的發展可以改變計算機的效能。我們可以透過關注程式如何使用機器以及提供了哪些基本技術來理解設計問題。
在本節中,我們將討論通訊抽象和程式設計模型的基本要求。
通訊抽象
通訊抽象是程式設計模型和系統實現之間主要的介面。它就像指令集一樣,提供了一個平臺,使相同的程式可以在許多實現上正確執行。此級別的操作必須簡單。
通訊抽象就像硬體和軟體之間的契約,允許彼此靈活改進,而不會影響工作。
程式設計模型要求
並行程式有一個或多個執行緒操作資料。並行程式設計模型定義了執行緒可以命名哪些資料,可以對命名資料執行哪些操作,以及操作遵循哪個順序。
為了確認程式之間的依賴關係得到強制執行,並行程式必須協調其執行緒的活動。
平行計算機體系結構 - 模型
並行處理已發展成為現代計算機中的一項有效技術,以滿足現實應用中對更高效能、更低成本和更準確結果的需求。由於多程式設計、多處理或多計算機的實踐,當今計算機中的併發事件很常見。
現代計算機擁有強大而廣泛的軟體包。要分析計算機效能的發展,首先必須瞭解硬體和軟體的基本發展。
計算機發展里程碑 - 計算機發展有兩個主要階段:機械或機電部件。現代計算機是在引入電子元件後發展起來的。電子計算機中高遷移率的電子取代了機械計算機中的操作部件。對於資訊傳輸,以接近光速傳播的電訊號取代了機械齒輪或槓桿。
現代計算機的組成元素 - 現代計算機系統由計算機硬體、指令集、應用程式、系統軟體和使用者介面組成。

計算問題分為數值計算、邏輯推理和事務處理。一些複雜的問題可能需要所有三種處理模式的組合。
計算機體系結構的演變 - 在過去的四十年中,計算機體系結構經歷了革命性的變化。我們從馮·諾依曼體系結構開始,現在有了多計算機和多處理器。
計算機系統的效能 - 計算機系統的效能取決於機器能力和程式行為。機器能力可以透過更好的硬體技術、先進的體系結構特性和高效的資源管理來提高。程式行為是不可預測的,因為它取決於應用程式和執行時條件。
多處理器和多計算機
在本節中,我們將討論兩種型別的平行計算機:
- 多處理器
- 多計算機
共享記憶體多計算機
三種最常見的共享記憶體多處理器模型是:
統一記憶體訪問 (UMA)
在此模型中,所有處理器都統一共享物理記憶體。所有處理器對所有記憶體字的訪問時間都相同。每個處理器可能都有一個私有快取記憶體。外圍裝置也遵循相同的規則。
當所有處理器都能平等地訪問所有外圍裝置時,該系統稱為對稱多處理器。當只有一個或少數處理器可以訪問外圍裝置時,該系統稱為非對稱多處理器。

非統一記憶體訪問 (NUMA)
在 NUMA 多處理器模型中,訪問時間隨記憶體字的位置而變化。在這裡,共享記憶體在所有處理器之間物理分佈,稱為區域性記憶體。所有區域性記憶體的集合構成一個全域性地址空間,所有處理器都可以訪問該空間。

僅快取記憶體體系結構 (COMA)
COMA 模型是 NUMA 模型的特例。在這裡,所有分散式主記憶體都轉換為快取記憶體。

分散式記憶體多計算機 - 分散式記憶體多計算機系統由多個計算機(稱為節點)組成,這些計算機透過訊息傳遞網路互連。每個節點充當具有處理器、區域性記憶體和有時是 I/O 裝置的自主計算機。在這種情況下,所有區域性記憶體都是私有的,只有本地處理器可以訪問。這就是為什麼傳統機器被稱為無遠端記憶體訪問 (NORMA) 機器的原因。

多向量和 SIMD 計算機
在本節中,我們將討論用於向量處理和資料並行的超級計算機和並行處理器。
向量超級計算機
在向量計算機中,向量處理器作為可選功能附加到標量處理器。主機計算機首先將程式和資料載入到主記憶體中。然後,標量控制單元解碼所有指令。如果解碼的指令是標量操作或程式操作,則標量處理器使用標量功能流水線執行這些操作。
另一方面,如果解碼的指令是向量操作,則指令將被髮送到向量控制單元。

SIMD 超級計算機
在 SIMD 計算機中,'N' 個處理器連線到一個控制單元,並且所有處理器都有各自的記憶體單元。所有處理器都透過互連網路連線。

PRAM 和 VLSI 模型
理想模型為開發並行演算法提供了一個合適的框架,無需考慮物理約束或實現細節。
可以強制執行這些模型以獲得平行計算機上的理論效能界限,或者在製造晶片之前評估芯片面積和執行時間的 VLSI 複雜性。
並行隨機存取機
Sheperdson 和 Sturgis (1963) 將傳統的單處理器計算機建模為隨機存取機 (RAM)。Fortune 和 Wyllie (1978) 開發了一種並行隨機存取機 (PRAM) 模型,用於對具有零記憶體訪問開銷和同步的理想化平行計算機進行建模。

一個 N 處理器 PRAM 有一個共享記憶體單元。此共享記憶體可以集中或分佈在處理器之間。這些處理器在同步讀記憶體、寫記憶體和計算週期上執行。因此,這些模型指定了如何處理併發讀寫操作。
以下是可能的記憶體更新操作:
獨佔讀取 (ER) - 在此方法中,在每個週期中,只有一個處理器允許從任何記憶體位置讀取。
獨佔寫入 (EW) - 在此方法中,允許至少一個處理器一次寫入記憶體位置。
併發讀取 (CR) - 它允許多個處理器在同一週期內從同一記憶體位置讀取相同的資訊。
併發寫入 (CW) - 它允許同時寫入同一記憶體位置。為了避免寫衝突,設定了一些策略。
VLSI 複雜度模型
平行計算機使用 VLSI 晶片製造處理器陣列、記憶體陣列和大型交換網路。
如今,VLSI 技術是二維的。VLSI 晶片的大小與該晶片中可用的儲存(記憶體)空間量成正比。
我們可以透過該演算法的 VLSI 晶片實現的芯片面積 (A) 來計算演算法的空間複雜度。如果 T 是執行演算法所需的時間(延遲),則 A.T 給出了透過晶片處理的總位數的上限 (或 I/O)。對於某些計算,存在一個下限 f(s),使得
A.T2 >= O (f(s))
其中 A=芯片面積,T=時間
體系結構發展軌跡
平行計算機的演變沿著以下軌跡發展:
- 多處理器軌跡
- 多處理器軌跡
- 多計算機軌跡
- 多資料軌跡
- 向量軌跡
- SIMD 軌跡
- 多執行緒軌跡
- 多執行緒軌跡
- 資料流軌跡
在多處理器軌跡中,假設不同的執行緒在不同的處理器上併發執行,並透過共享記憶體(多處理器軌跡)或訊息傳遞(多計算機軌跡)系統進行通訊。
在多資料軌跡中,假設相同的程式碼在海量資料上執行。這是透過對一系列資料元素執行相同的指令(向量軌跡)或透過對相似的資料集執行相同的指令序列(SIMD 軌跡)來完成的。
在多執行緒軌跡中,假設在同一處理器上交錯執行各種執行緒以隱藏在不同處理器上執行的執行緒之間的同步延遲。執行緒交錯可以是粗略的(多執行緒軌跡)或精細的(資料流軌跡)。
並行系統中的處理器
在 80 年代,一種名為Transputer的專用處理器很流行,用於製造多計算機。Transputer 由一個核心處理器、一個小 SRAM 記憶體、一個 DRAM 主記憶體介面和四個通訊通道組成,所有這些都整合在一個晶片上。為了進行平行計算機通訊,通道被連線起來形成一個 Transputer 網路。但它缺乏計算能力,因此無法滿足並行應用程式日益增長的需求。這個問題透過開發 RISC 處理器得到了解決,而且價格也很便宜。
現代平行計算機使用微處理器,這些微處理器在多個級別上使用並行性,例如指令級並行性和資料級並行性。
高效能處理器
RISC 和 RISCy 處理器主導著當今的平行計算機市場。
傳統 RISC 的特點是:
- 定址模式少。
- 指令格式固定,通常為 32 位或 64 位。
- 具有專門的載入/儲存指令,用於將資料從記憶體載入到暫存器,並將資料從暫存器儲存到記憶體。
- 算術運算始終在暫存器上執行。
- 使用流水線技術。
如今大多數微處理器都是超標量處理器,即在平行計算機中使用多個指令流水線。因此,超標量處理器可以同時執行多條指令。超標量處理器的效率取決於應用程式中可用的指令級並行性 (ILP)。為了保持流水線滿負荷執行,硬體級別上的指令執行順序與程式順序不同。
許多現代微處理器使用 *超流水線* 技術。在 *超流水線* 中,為了提高時鐘頻率,減少流水線每個階段的工作量,並增加流水線階段的數量。
超長指令字 (VLIW) 處理器
這些處理器源於水平微程式設計和超標量處理。VLIW 處理器中的指令非常長。單條指令內的操作並行執行,並轉發到相應的功能單元執行。因此,在獲取 VLIW 指令後,對其操作進行解碼。然後將操作排程到功能單元,在其中並行執行。
向量處理器
向量處理器是通用微處理器的協處理器。向量處理器通常是暫存器-暫存器或記憶體-記憶體型別的。向量指令被獲取和解碼,然後對運算元向量的每個元素執行特定操作,而在普通處理器中,向量操作需要程式碼中的迴圈結構。為了提高效率,向量處理器將多個向量操作連結在一起,即一個向量操作的結果作為另一個運算元轉發。
快取
快取是高效能微處理器的重要組成部分。每 18 個月,微處理器的速度就會翻倍,但主記憶體的 DRAM 晶片無法與之匹敵。因此,引入快取來彌合處理器和記憶體之間的速度差距。快取是一種快速的小型 SRAM 記憶體。現代處理器中應用了更多快取,例如轉換旁路緩衝區 (TLB) 快取、指令快取和資料快取等。
直接對映快取
在直接對映快取中,使用“模”函式將主記憶體中的地址一對一對映到快取位置。由於相同的快取條目可以對映多個主記憶體塊,因此處理器必須能夠確定快取中的資料塊是否為實際需要的資料塊。此標識透過將標籤與快取塊一起儲存來完成。
全相聯快取
全相聯對映允許將快取塊放置在快取中的任何位置。透過使用某種替換策略,快取確定儲存快取塊的快取條目。全相聯快取具有靈活的對映,可以最大限度地減少快取條目衝突。由於全相聯實現成本高昂,因此從未大規模使用。
組相聯快取
組相聯對映是直接對映和全相聯對映的組合。在這種情況下,快取條目被細分為快取組。與直接對映一樣,記憶體塊到快取組的對映是固定的。但在快取組內,記憶體塊以全相聯方式對映。
快取策略
除了對映機制之外,快取還需要一系列策略來指定在某些事件發生時應該發生什麼。對於(組)相聯快取,快取必須確定哪個快取塊應該被進入快取的新塊替換。
一些眾所周知的替換策略包括:
- 先進先出 (FIFO)
- 最近最少使用 (LRU)
多處理器和多計算機
本章將討論多處理器和多計算機。
多處理器系統互連
並行處理需要使用高效的系統互連來實現輸入/輸出和外圍裝置、多處理器和共享記憶體之間的快速通訊。
分層匯流排系統
分層匯流排系統由連線計算機中各種系統和子系統/元件的匯流排層次結構組成。每個匯流排由許多訊號線、控制線和電源線組成。本地匯流排、背板匯流排和 I/O 匯流排等不同匯流排用於執行不同的互連功能。
本地匯流排是在印刷電路板上實現的匯流排。背板匯流排是一個印刷電路,在其上使用許多聯結器來插入功能板。連線輸入/輸出裝置到計算機系統的匯流排稱為 I/O 匯流排。
交叉開關和多埠記憶體
交換網路在輸入和輸出之間提供動態互連。小型或中型系統主要使用交叉開關網路。如果可以解決延遲增加的問題,多級網路可以擴充套件到更大的系統。
交叉開關和多埠記憶體組織都是單級網路。雖然單級網路的構建成本較低,但可能需要多次才能建立某些連線。多級網路具有多個交換盒階段。這些網路應該能夠將任何輸入連線到任何輸出。
多級網路和組合網路
多級網路或多級互連網路是一類高速計算機網路,主要由網路一端的處理單元和另一端的記憶體單元以及連線它們的交換單元組成。
這些網路用於構建更大的多處理器系統。這包括 Omega 網路、蝴蝶網路等等。
多計算機
多計算機是分散式記憶體 MIMD 架構。下圖顯示了多計算機的概念模型。

多計算機是訊息傳遞機,它應用分組交換方法來交換資料。在這裡,每個處理器都有一個私有記憶體,但沒有全域性地址空間,因為處理器只能訪問其自己的本地記憶體。因此,通訊不是透明的:程式設計師必須在其程式碼中顯式地放置通訊原語。
沒有全域性可訪問的記憶體是多計算機的一個缺點。這可以透過使用以下兩種方案來解決:
- 虛擬共享記憶體 (VSM)
- 共享虛擬記憶體 (SVM)
在這些方案中,應用程式程式設計師假定一個大的全域性可定址共享記憶體。如果需要,應用程式進行的記憶體引用將轉換為訊息傳遞範例。
虛擬共享記憶體 (VSM)
VSM 是硬體實現。因此,作業系統的虛擬記憶體系統透明地實現於 VSM 之上。因此,作業系統認為它正在一臺具有共享記憶體的機器上執行。
共享虛擬記憶體 (SVM)
SVM 是作業系統級別的軟體實現,並得到處理器記憶體管理單元 (MMU) 的硬體支援。在這裡,共享的單元是作業系統記憶體頁。
如果處理器定址特定記憶體位置,MMU 將確定與記憶體訪問關聯的記憶體頁是否在本地記憶體中。如果該頁不在記憶體中,在普通的計算機系統中,它將由作業系統從磁碟交換進來。但在 SVM 中,作業系統從擁有該特定頁的遠端節點獲取該頁。
三代多計算機
在本節中,我們將討論三代多計算機。
過去的設計選擇
在選擇處理器技術時,多計算機設計者選擇低成本的中粒度處理器作為構建塊。大多數平行計算機都是使用標準的現成微處理器構建的。為多計算機選擇分散式記憶體,而不是使用共享記憶體,這將限制可擴充套件性。每個處理器都有它自己的本地記憶體單元。
對於互連方案,多計算機具有訊息傳遞、點對點直接網路,而不是地址交換網路。對於控制策略,多計算機的設計者選擇非同步 MIMD、MPMD 和 SMPD 操作。加州理工學院的 Cosmic Cube (Seitz, 1983) 是第一代多計算機的先驅。
當前和未來的發展
下一代計算機從使用全域性共享虛擬記憶體的中粒度到細粒度多計算機發展而來。第二代多計算機目前仍在使用。但是,使用更好的處理器(如 i386、i860 等),第二代計算機得到了很大的發展。
第三代計算機是下一代計算機,其中將使用 VLSI 實現的節點。每個節點可能具有一個 14-MIPS 處理器、20-Mbytes/s 路由通道和 16 KB 的 RAM 整合在一個晶片上。
英特爾 Paragon 系統
以前,使用同構節點來製造超立方體多計算機,因為所有功能都由主機提供。因此,這限制了 I/O 頻寬。因此,為了有效地或以高吞吐量解決大型問題,這些計算機無法使用。英特爾 Paragon 系統旨在克服這一困難。它將多計算機變成了具有網路環境中多使用者訪問的應用程式伺服器。
訊息傳遞機制
多計算機網路中的訊息傳遞機制需要特殊的硬體和軟體支援。在本節中,我們將討論一些方案。
訊息路由方案
在使用儲存轉發路由方案的多計算機中,資料包是最小的資訊傳輸單元。在 wormhole 路由網路中,資料包進一步細分為 flit。資料包長度由路由方案和網路實現確定,而 flit 長度受網路大小的影響。
在 **儲存轉發路由** 中,資料包是資訊傳輸的基本單元。在這種情況下,每個節點使用資料包緩衝區。資料包透過一系列中間節點從源節點傳輸到目標節點。延遲與源節點和目標節點之間的距離成正比。
在 **wormhole 路由** 中,從源節點到目標節點的傳輸是透過一系列路由器完成的。同一資料包的所有 flit 以不可分割的序列以流水線方式傳輸。在這種情況下,只有報頭 flit 知道資料包的去向。
死鎖和虛擬通道
虛擬通道是兩個節點之間的邏輯鏈路。它由源節點和接收節點中的 flit 緩衝區以及它們之間的物理通道構成。當為一對分配物理通道時,一個源緩衝區與一個接收緩衝區配對以形成虛擬通道。
當所有通道都被訊息佔用,並且迴圈中沒有任何通道被釋放時,就會發生死鎖情況。為避免這種情況,必須遵循死鎖避免方案。
快取一致性和同步
本章將討論用於應對多快取不一致問題的快取一致性協議。
快取一致性問題
在多處理器系統中,資料不一致可能發生在記憶體層次結構的相鄰級別之間或同一級別內。例如,快取和主記憶體可能擁有同一物件的副本不一致。
由於多個處理器並行且獨立地執行,多個快取可能擁有同一記憶體塊的不同副本,這就產生了**快取一致性問題**。**快取一致性方案**透過維護每個快取資料塊的統一狀態來幫助避免此問題。

設 X 為共享資料的元素,已被兩個處理器 P1 和 P2 引用。一開始,X 的三個副本是一致的。如果處理器 P1 將新的資料 X1 寫入快取,使用**直寫策略**,則相同的副本將立即寫入共享記憶體。在這種情況下,快取記憶體和主記憶體之間會發生不一致。當使用**寫回策略**時,只有當快取中修改後的資料被替換或失效時,主記憶體才會被更新。
一般來說,有不一致性問題的三個來源:
- 共享可寫資料
- 程序遷移
- I/O 活動
窺探匯流排協議
窺探協議透過基於匯流排的記憶體系統實現快取記憶體和共享記憶體之間的資料一致性。**寫無效**和**寫更新**策略用於維護快取一致性。


在這種情況下,我們有三個處理器 P1、P2 和 P3,它們的本地快取記憶體和共享記憶體中都有資料元素“X”的一致副本(圖 a)。處理器 P1 使用**寫無效協議**將其快取記憶體中的 X 寫入 X1。因此,所有其他副本都透過匯流排失效。它用“I”表示(圖 b)。失效的塊也稱為**髒塊**,即它們不應該被使用。**寫更新協議**透過匯流排更新所有快取副本。使用**寫回快取**,記憶體副本也會更新(圖 c)。

快取事件和操作
在執行記憶體訪問和失效命令時,會發生以下事件和操作:
**讀未命中** - 當處理器想要讀取一個塊,而該塊不在快取中時,就會發生讀未命中。這會啟動**匯流排讀取**操作。如果不存在髒副本,則擁有一致副本的主記憶體會向請求快取記憶體提供副本。如果在遠端快取記憶體中存在髒副本,則該快取將限制主記憶體並向請求快取記憶體傳送副本。在這兩種情況下,快取副本在讀未命中後將進入有效狀態。
**寫命中** - 如果副本處於髒狀態或**保留**狀態,則在本地進行寫入,新狀態為髒狀態。如果新狀態有效,則將廣播寫無效命令到所有快取,使它們的副本失效。當共享記憶體被直寫時,在此第一次寫入後,結果狀態為保留。
**寫未命中** - 如果處理器無法寫入本地快取記憶體,則副本必須來自主記憶體或具有髒塊的遠端快取記憶體。這是透過傳送**讀無效**命令來完成的,該命令將使所有快取副本失效。然後,本地副本將更新為髒狀態。
**讀命中** - 讀命中始終在本地快取記憶體中執行,不會導致狀態轉換或使用窺探匯流排進行失效。
**塊替換** - 當副本為髒副本時,將透過塊替換方法將其寫回主記憶體。但是,當副本處於有效、保留或無效狀態時,不會發生替換。
基於目錄的協議
透過使用多級網路構建具有數百個處理器的較大多處理器,需要修改窺探快取協議以適應網路功能。由於在多級網路中執行廣播非常昂貴,因此一致性命令僅傳送到保留塊副本的那些快取。這就是為網路連線的多處理器開發基於目錄的協議的原因。
在基於目錄的協議系統中,要共享的資料被放置在一個公共目錄中,該目錄維護快取之間的一致性。在這裡,目錄充當過濾器,處理器請求許可將條目從主記憶體載入到其快取記憶體中。如果更改了條目,目錄會更新它或使具有該條目的其他快取失效。
硬體同步機制
同步是一種特殊的通訊形式,其中,資訊不是資料控制,而是在駐留在相同或不同處理器中的通訊程序之間交換。
多處理器系統使用硬體機制來實現低階同步操作。大多數多處理器都具有硬體機制來強制執行原子操作,例如記憶體讀、寫或讀-修改-寫操作,以實現一些同步原語。除了原子記憶體操作之外,還有一些處理器間中斷用於同步目的。
共享記憶體機中的快取一致性
當處理器包含本地快取記憶體時,在多處理器系統中維護快取一致性是一個問題。在這個系統中,不同快取之間的資料不一致很容易發生。
主要關注的領域是:
- 共享可寫資料
- 程序遷移
- I/O 活動
共享可寫資料
當兩個處理器(P1 和 P2)在其本地快取中具有相同的資料元素(X),並且一個程序(P1)寫入資料元素(X)時,由於 P1 的快取是直寫本地快取,主記憶體也會更新。現在,當 P2 嘗試讀取資料元素(X)時,它找不到 X,因為 P2 快取中的資料元素已過時。

程序遷移
在第一階段,P1 的快取具有資料元素 X,而 P2 沒有任何內容。P2 上的一個程序首先寫入 X,然後遷移到 P1。現在,程序開始讀取資料元素 X,但是由於處理器 P1 擁有過時的資料,因此程序無法讀取它。因此,P1 上的一個程序寫入資料元素 X,然後遷移到 P2。遷移後,P2 上的一個程序開始讀取資料元素 X,但它在主記憶體中發現 X 的過時版本。

I/O 活動
如圖所示,I/O 裝置新增到雙處理器多處理器體系結構中的匯流排。一開始,兩個快取都包含資料元素 X。當 I/O 裝置接收到新的元素 X 時,它會將新元素直接儲存到主記憶體中。現在,當 P1 或 P2(假設為 P1)嘗試讀取元素 X 時,它會獲得過時的副本。因此,P1 寫入元素 X。現在,如果 I/O 設備嘗試傳輸 X,它會獲得過時的副本。

統一記憶體訪問 (UMA)
統一記憶體訪問 (UMA) 體系結構意味著共享記憶體對於系統中的所有處理器都是相同的。常用的 UMA 機器類別(通常用於(檔案)伺服器)是所謂的對稱多處理器 (SMP)。在 SMP 中,所有系統資源(如記憶體、磁碟、其他 I/O 裝置等)都可由處理器以統一的方式訪問。
非統一記憶體訪問 (NUMA)
在 NUMA 體系結構中,有多個具有內部間接/共享網路的 SMP 叢集,它們連線在可擴充套件的訊息傳遞網路中。因此,NUMA 體系結構在邏輯上是共享的,在物理上是分散式記憶體體系結構。
在 NUMA 機器中,處理器的快取控制器確定記憶體引用是本地於 SMP 的記憶體還是遠端的。為了減少遠端記憶體訪問的數量,NUMA 體系結構通常應用可以快取遠端資料的快取處理器。但是,當涉及快取時,需要維護快取一致性。因此,這些系統也稱為 CC-NUMA(快取一致性 NUMA)。
僅快取記憶體體系結構 (COMA)
COMA 機器類似於 NUMA 機器,唯一的區別是 COMA 機器的主記憶體充當直接對映或組相聯快取。資料塊根據其地址被雜湊到 DRAM 快取中的一個位置。遠端獲取的資料實際上儲存在本地主記憶體中。此外,資料塊沒有固定的主位置,它們可以自由地在系統中移動。
COMA 體系結構大多具有分層訊息傳遞網路。此類樹中的交換機包含一個目錄,其資料元素作為其子樹。由於資料沒有主位置,因此必須顯式搜尋它。這意味著遠端訪問需要沿著樹中的交換機進行遍歷以搜尋其目錄中所需的資料。因此,如果網路中的交換機從其子樹接收到對相同資料的多個請求,它會將它們組合成一個單一請求,然後將其傳送到交換機的父節點。當請求的資料返回時,交換機會將其多個副本向下傳送到其子樹。
COMA 與 CC-NUMA 的比較
以下是 COMA 和 CC-NUMA 之間的區別。
COMA 往往比 CC-NUMA 更靈活,因為 COMA 透明地支援資料的遷移和複製,而無需作業系統。
COMA 機器構建起來昂貴且複雜,因為它們需要非標準的記憶體管理硬體,並且一致性協議更難實現。
COMA 中的遠端訪問通常比 CC-NUMA 中的遠端訪問慢,因為需要遍歷樹網路才能找到資料。
硬體軟體權衡
有很多方法可以降低硬體成本。一種方法是將通訊輔助和網路更鬆散地整合到處理節點中,並增加通訊延遲和佔用率。
另一種方法是在軟體而非硬體中提供自動複製和一致性。後者在主記憶體中提供複製和一致性,並且可以以各種粒度執行。它允許使用現成的商品部件作為節點和互連,從而最大限度地降低硬體成本。但這給程式設計師帶來了實現良好效能的壓力。
寬鬆的記憶體一致性模型
共享地址空間的記憶體一致性模型定義了記憶體操作在相同或不同位置上的執行順序的約束。實際上,任何支援共享地址空間命名模型的系統層都必須具有記憶體一致性模型,其中包括程式設計師介面、使用者系統介面和硬體軟體介面。與該層互動的軟體必須瞭解其自身的記憶體一致性模型。
系統規格
體系結構的系統規範指定記憶體操作的排序和重新排序,以及實際可以從中獲得多少效能。
以下是使用程式順序中的放鬆的一些規範模型:
放鬆寫-讀程式順序 - 此類模型允許硬體抑制一級快取記憶體中錯過的寫操作的延遲。當寫未命中在寫緩衝區中並且對其他處理器不可見時,處理器可以完成在其快取記憶體中命中的讀操作,甚至可以完成在其快取記憶體中未命中的單個讀操作。
放鬆寫-讀和寫-寫程式順序 - 允許寫繞過先前對各種位置的未完成寫操作,可以讓多個寫操作在更新主記憶體之前合併到寫緩衝區中。因此,多個寫未命中可以重疊並無序地可見。其動機是進一步最大限度地減少寫延遲對處理器中斷時間的影響,並透過使新的資料值對其他處理器可見來提高處理器之間的通訊效率。
放鬆所有程式順序 - 預設情況下,除了程序內的資料和控制依賴性之外,沒有任何程式順序得到保證。因此,其好處是多個讀取請求可以同時處於未完成狀態,並且程式順序可以被後面的寫入繞過,並且它們本身可以無序完成,從而允許我們隱藏讀取延遲。這類模型對於動態排程處理器特別有用,動態排程處理器可以繼續進行讀取未命中以進行其他記憶體引用。它們允許許多重新排序,甚至消除編譯器最佳化所做的訪問。
程式設計介面
程式設計介面假設在同步操作之間不需要維護任何程式順序。確保所有同步操作都明確標記或識別為同步操作。執行時庫或編譯器將這些同步操作轉換為系統規範要求的合適的順序保持操作。
然後,系統確保順序一致的執行,即使它可能以任何它想要的方式重新排序同步操作之間的操作,也不會破壞對程序內某個位置的依賴關係。這允許編譯器在同步點之間擁有足夠的靈活性來進行它想要的重新排序,並且還允許處理器執行其記憶體模型允許的儘可能多的重新排序。在程式設計師介面處,一致性模型至少應與硬體介面的一致性模型一樣弱,但不一定是相同的。
轉換機制
在大多數微處理器中,將標籤轉換為順序保持機制相當於在標記為同步的每個操作之前和/或之後插入合適的記憶體屏障指令。它將節省指示要強制執行哪些排序的單個載入/儲存指令,並避免額外的指令。但是,由於這些操作通常很少見,因此這不是大多數微處理器迄今為止採用的方式。
克服容量限制
我們已經討論了僅在處理器快取記憶體中提供硬體自動複製和一致性的系統。處理器快取在本地主記憶體中複製之前,會在引用時直接複製遠端分配的資料。
這些系統的一個問題是本地複製的範圍僅限於硬體快取。如果一個塊從快取記憶體中被替換,當它再次需要時,它必須從遠端記憶體中獲取。本節中討論的系統的主要目的是解決複製容量問題,但仍以快取塊的細粒度在硬體中提供一致性以提高效率。
三級快取
為了解決複製容量問題,一種方法是使用大型但速度較慢的遠端訪問快取。當機器的節點本身是小規模多處理器並且可以簡單地為了效能而變大時,這對於功能性是必要的。它還將儲存已從本地處理器快取記憶體中替換的已複製遠端塊。
僅快取記憶體架構 (COMA)
在 COMA 機器中,整個主記憶體中的每個記憶體塊都帶有與其關聯的硬體標籤。沒有固定的節點可以始終保證為記憶體塊分配空間。資料會動態遷移到訪問/吸引它們的節點的主記憶體中,或在其中複製。當訪問遠端塊時,它會在吸引記憶體中複製並引入快取,並由硬體保持兩者的狀態一致。資料塊可能駐留在任何吸引記憶體中,並且可以輕鬆地從一個記憶體移動到另一個記憶體。
降低硬體成本
降低成本意味著將一些專用硬體的功能轉移到現有硬體上執行的軟體。軟體比在硬體快取中更容易管理主記憶體中的複製和一致性。低成本方法往往在主記憶體中提供複製和一致性。為了有效地控制一致性,輔助的其他功能元件都可以從硬體專用化和整合中受益。
研究工作旨在透過不同的方法降低成本,例如透過在專用硬體中執行訪問控制,但將其他活動分配給軟體和商品硬體。另一種方法是在軟體中執行訪問控制,並旨在在沒有專用硬體支援的商品節點和網路上分配一致的共享地址空間抽象。
對並行軟體的影響
寬鬆的記憶體一致性模型需要並行程式將所需的衝突訪問標記為同步點。程式語言提供支援將某些變數標記為同步,然後編譯器會將其轉換為合適的順序保持指令。為了限制編譯器自身對共享記憶體訪問的重新排序,編譯器本身可以使用標籤。
互連網路設計
並行機器中的互連網路將資訊從任何源節點傳輸到任何所需的目的地節點。此任務應以儘可能小的延遲完成。它應該允許大量此類傳輸同時發生。此外,與機器其餘部分的成本相比,它應該便宜。
網路由鏈路和交換機組成,這有助於將資訊從源節點發送到目標節點。網路由其拓撲、路由演算法、交換策略和流量控制機制指定。
組織結構
互連網路由以下三個基本元件組成:
鏈路 - 鏈路是一根或多根光纖或電線的電纜,兩端各有一個聯結器,連線到交換機或網路介面埠。透過它,模擬訊號從一端傳輸,在另一端接收以獲得原始數字資訊流。
交換機 - 交換機由一組輸入和輸出埠、連線所有輸入到所有輸出的內部“交叉開關”、內部緩衝區和控制邏輯組成,以在每個時間點實現輸入-輸出連線。通常,輸入埠的數量等於輸出埠的數量。
網路介面 - 網路介面的行為與交換機節點大相徑庭,並且可能透過專用鏈路連線。網路介面格式化資料包並構建路由和控制資訊。與交換機相比,它可能有輸入和輸出緩衝區。它可以執行端到端錯誤檢查和流量控制。因此,其成本受其處理複雜性、儲存容量和埠數量的影響。
互連網路
互連網路由交換元件組成。拓撲是連線單個交換機到其他元件(如處理器、記憶體和其他交換機)的模式。網路允許在並行系統中的處理器之間交換資料。
直接連線網路 - 直接網路在相鄰節點之間具有點對點連線。這些網路是靜態的,這意味著點對點連線是固定的。直接網路的一些示例包括環、網格和多維立方體。
間接連線網路 - 間接網路沒有固定的鄰居。通訊拓撲可以根據應用程式的需求動態更改。間接網路可以細分為三個部分:匯流排網路、多級網路和交叉開關。
匯流排網路 - 匯流排網路由許多位線組成,許多資源連線到這些位線上。當匯流排使用相同的物理線路傳輸資料和地址時,資料線和地址線是時間複用的。當多個匯流排主控連線到匯流排時,需要仲裁器。
多級網路 - 多級網路由多個交換機級組成。它由“axb”交換機組成,這些交換機使用特定的級間連線模式 (ISC) 連線。小型 2x2 交換元件是許多多級網路的常見選擇。階段數決定網路的延遲。透過選擇不同的級間連線模式,可以建立各種型別的多級網路。
交叉開關 - 交叉開關包含一個簡單的交換元件矩陣,可以開啟和關閉以建立或斷開連線。開啟矩陣中的交換元件,就可以在處理器和記憶體之間建立連線。交叉開關是非阻塞的,即所有通訊排列都可以在不阻塞的情況下執行。
評估網路拓撲中的設計權衡
如果主要關注的是路由距離,則必須最大化維度並構建超立方體。在儲存轉發路由中,假設交換機的度數和鏈路的數量不是重要的成本因素,並且鏈路的數量或交換機的度數是主要的成本,則必須最小化維度並構建網格。
在每個網路的最壞情況流量模式下,最好使用高維網路,其中所有路徑都很短。在每個節點僅與一兩個附近的鄰居通訊的模式中,最好使用低維網路,因為實際上只使用少數維度。
路由
網路的路由演算法確定從源到目標的可能路徑中哪條用作路由,以及如何確定每個特定資料包遵循的路由。維度順序路由限制了合法路徑的集合,以便從每個源到每個目標都只有一條路由。透過首先在高階維度上走正確的距離,然後是下一個維度,依此類推獲得。
路由機制
高速交換機使用算術運算、基於源埠的選擇和查詢表這三種機制來根據資料包頭中的資訊確定輸出通道。所有這些機制都比傳統區域網和廣域網路由器中實現的通用路由計算更簡單。在平行計算機網路中,交換機需要在每個週期內為所有輸入做出路由決策,因此該機制需要簡單快捷。
確定性路由
如果訊息所走的路由完全由其源和目標決定,而不受網路中其他流量的影響,則路由演算法是確定性的。如果路由演算法只選擇到達目的地的最短路徑,則它是最小化的,否則是非最小化的。
無死鎖
死鎖可能發生在各種情況下。當兩個節點嘗試相互發送資料,並且每個節點都在另一個節點接收之前開始傳送時,可能會發生“對頭”死鎖。另一種死鎖的情況是,當多個訊息競爭網路中的資源時。
證明網路無死鎖的基本技術是清除由於訊息透過網路移動而可能發生在通道之間的依賴關係,並證明整個通道依賴圖中沒有迴圈;因此,沒有可能導致死鎖的流量模式。常用的方法是對通道資源進行編號,以便所有路由都遵循特定的遞增或遞減序列,從而避免出現依賴迴圈。
交換機設計
網路的設計取決於交換機的設計以及交換機的連線方式。交換機的度數、其內部路由機制及其內部緩衝決定了可以支援哪些拓撲以及可以實現哪些路由演算法。與計算機系統的任何其他硬體元件一樣,網路交換機包含資料路徑、控制和儲存。
埠
引腳總數實際上是輸入和輸出埠總數乘以通道寬度。由於晶片的周長比面積增長緩慢,交換機往往受引腳限制。
內部資料路徑
資料路徑是每組輸入埠與每個輸出埠之間的連線。它通常被稱為內部交叉開關。非阻塞交叉開關是指每個輸入埠可以同時連線到任何排列中的不同輸出的交叉開關。
通道緩衝區
交換機內緩衝儲存的組織對交換機效能有重要影響。傳統的路由器和交換機傾向於在交換機結構外部具有大型 SRAM 或 DRAM 緩衝區,而在 VLSI 交換機中,緩衝區位於交換機內部,並與資料路徑和控制部分佔用相同的矽片預算。隨著晶片尺寸和密度的增加,可用的緩衝區更多,網路設計師擁有更多選擇,但緩衝區資源仍然是重要的選擇,其組織方式也很重要。
流量控制
當網路中的多個數據流嘗試同時使用相同的共享網路資源時,必須採取一些措施來控制這些流。如果我們不想丟失任何資料,則必須阻塞某些流,而其他流則繼續進行。
流量控制的問題存在於所有網路和許多層次。但它在平行計算機網路中的性質與在區域網和廣域網中的性質有質的區別。在平行計算機中,網路流量需要像透過總線上的流量一樣精確地傳遞,並且在非常短的時間尺度上存在大量並行流。
延遲容忍
微處理器速度每十年增長十倍以上,但商品記憶體(DRAM)的速度僅翻倍,即訪問時間減半。因此,以處理器時鐘週期表示的記憶體訪問延遲在10年內增長了六倍。多處理器加劇了這個問題。
在基於匯流排的系統中,在處理器和記憶體之間建立高頻寬匯流排往往會增加從記憶體獲取資料的延遲。當記憶體物理分佈時,網路和網路介面的延遲會新增到訪問節點上本地記憶體的延遲中。
延遲通常隨著機器規模的增長而增長,因為更多的節點意味著相對於計算而言更多的通訊,更普遍的通訊需要更多網路跳轉,並且可能存在更多爭用。硬體設計的目標是減少資料訪問延遲,同時保持高可擴充套件頻寬。
延遲容忍概述
最好透過檢視機器中的資源以及如何利用它們來了解如何處理延遲容忍。從處理器的角度來看,從一個節點到另一個節點的通訊架構可以看作是一個流水線。流水線的階段包括源和目標處的網路介面,以及沿途的網路鏈路和交換機。根據體系結構如何管理通訊,通訊輔助、本地記憶體/快取系統和主處理器中也存在階段。
在基線通訊結構中的利用率問題是,在給定時間處理器或通訊架構處於繁忙狀態,並且在通訊流水線中,只有一個階段在繁忙狀態,因為正在傳輸的單個字從源到目標移動。延遲容忍的目標是儘可能多地重疊這些資源的使用。
顯式訊息傳遞中的延遲容忍
訊息傳遞中的實際資料傳輸通常由傳送方發起,使用傳送操作。接收操作本身並不促使資料進行通訊,而是將資料從傳入緩衝區複製到應用程式地址空間。接收方發起的通訊是透過向作為資料來源的程序發出請求訊息來完成的。然後,該程序透過另一個傳送操作將資料傳送回。
同步傳送操作的通訊延遲等於將訊息中的所有資料傳送到目的地所需的時間,以及接收處理的時間,以及返回確認的時間。同步接收操作的延遲是其處理開銷;這包括將資料複製到應用程式,以及如果資料尚未到達則會產生額外的延遲。我們希望隱藏這些延遲,如果可能的話,還要隱藏兩端的開銷。
共享地址空間中的延遲容忍
基線通訊是透過共享地址空間中的讀寫操作進行的。為方便起見,它被稱為讀寫通訊。接收方發起的通訊是透過讀取操作完成的,讀取操作會導致訪問另一個處理器的記憶體或快取中的資料。如果沒有共享資料的快取,則可以透過寫入分配在遠端記憶體中的資料來完成傳送方發起的通訊。
使用快取一致性,寫入的效果更復雜:寫入導致傳送方或接收方發起的通訊取決於快取一致性協議。無論是接收方發起還是傳送方發起,在硬體支援的讀寫共享地址空間中的通訊都是自然細粒度的,這使得容忍延遲非常重要。
共享地址空間中的塊資料傳輸
在共享地址空間中,無論是透過硬體還是軟體,資料合併和塊傳輸的啟動都可以在使用者程式中顯式執行,也可以由系統透明地執行。顯式塊傳輸是透過在使用者程式中執行類似於傳送的命令來啟動的。傳送命令由通訊輔助解釋,該通訊輔助以流水線方式將資料從源節點傳輸到目標節點。在目標節點,通訊輔助從網路介面中提取資料字並將它們儲存在指定位置。
與傳送-接收訊息傳遞有兩個主要區別,這兩個區別都源於傳送程序可以直接指定程式資料結構,資料將在目標位置放置,因為這些位置位於共享地址空間。
在共享地址空間中處理長延遲事件
如果記憶體操作是非阻塞的,則處理器可以繼續執行其他指令。對於寫入,如果寫入放入寫入緩衝區,並且處理器繼續執行,而緩衝區負責向記憶體系統發出寫入並根據需要跟蹤其完成,則通常很容易實現這一點。區別在於,與寫入不同,讀取通常緊隨其後的是需要讀取返回的值的指令。
共享地址空間中的預通訊
預通訊是一種已在商用微處理器中廣泛採用的技術,其重要性在未來可能會增加。預取指令不會替換資料的實際讀取,如果要透過重疊來達到隱藏延遲的目的,則預取指令本身必須是非阻塞的。
在這種情況下,由於共享資料沒有快取,因此預取的資料被帶入稱為預取緩衝區的特殊硬體結構中。當在下次迭代中將單詞實際讀取到暫存器中時,它從預取緩衝區的頭部讀取,而不是從記憶體讀取。如果要隱藏的延遲遠大於計算單個迴圈迭代所需的時間,我們將預取多個迭代,並且預取緩衝區中可能同時存在多個字。
共享地址空間中的多執行緒
就隱藏不同型別的延遲而言,硬體支援的多執行緒也許是最通用的技術。它具有以下概念上的優勢:
它不需要特殊的軟體分析或支援。
由於它是動態呼叫的,因此它可以像處理可預測情況一樣好地處理不可預測的情況,例如快取衝突等。
與預取一樣,它不會更改記憶體一致性模型,因為它不會重新排序執行緒內的訪問。
雖然之前的技術針對的是隱藏記憶體訪問延遲,但多執行緒可以同樣輕鬆地隱藏任何長延遲事件的延遲,只要可以在執行時檢測到該事件即可。這包括同步和指令延遲。
隨著延遲與處理器速度相比越來越長,這種趨勢可能會在未來發生變化。此外,隨著更復雜的微處理器已經提供了可以擴充套件用於多執行緒的方法,以及正在開發新的多執行緒技術以將多執行緒與指令級並行結合起來,這種趨勢在未來肯定會發生一些變化。