1 什么是並行計算?
串行計算: 傳統的軟件通常被設計成為串行計算模式,具有如下特點:
- 一個問題被分解成為一系列離散的指令;
- 這些指令被順次執行;
- 所有指令均在一個處理器上被執行;
在任何時刻,最多只有一個指令能夠被執行。
並行計算: 簡單來講,並行計算就是同時使用多個計算資源來解決一個計算問題:
- 一個問題被分解成為一系列可以並發執行的離散部分;
- 每個部分可以進一步被分解成為一系列離散指令;
- 來自每個部分的指令可以在不同的處理器上被同時執行;
需要一個總體的控制/協作機制來負責對不同部分的執行情況進行調度。
這里的 計算問題 需要具有如下特點:
- 能夠被分解成為並發執行離散片段;
- 不同的離散片段能夠被在任意時刻執行;
- 采用多個計算資源的花費時間要小於采用單個計算資源所花費的時間。
這里的 計算資源 通常包括:
- 具有多處理器/多核(multiple processors/cores)的計算機;
- 任意數量的被連接在一起的計算機。
並行計算機:
通常來講,從 硬件 的角度來講,當前所有的單機都可以被認為是並行的:
- 多功能單元(L1緩存,L2緩存,分支,預取,解碼,浮點數,圖形處理器,整數等)
- 多執行單元/內核
- 多硬件線程
IBM BG/Q Compute Chip with 18 cores (PU) and 16 L2 Cache units (L2)
通過 網絡 連接起來的多個單機也可以形成更大的並行計算機集群:
例如,下面的圖解就顯示了一個典型的LLNL並行計算機集群:
-
- 每個計算結點就是一個多處理器的並行計算機;
- 多個計算結點用無限寬帶網絡連接起來;
某些特殊的結點(通常也是多處理器單機)被用來執行特定的任務。
2 概念和術語
2.1 馮諾依曼體系結構
以匈牙利數學家約翰·馮諾依曼命名的這一計算機體系結構,出現在他1945年發表的一篇論文中。這也通常被稱為“存儲程序計算機”——程序指令和數據都被保存在存儲器中,這與早期通過“硬接線”編程的計算機不同。從此以后,所有的計算機走遵從這一基本架構:
- 四個組成部分:1)內存;2)控制器;3)處理器;4)輸入輸出。
- 讀寫操作:支持隨機存儲的內存用來同時保存程序指令和數據:1)程序指令用來指導計算機操作;2)數據是程序用來操作的對象。
- 控制器:從內存中讀取指令或者數據,對這些指令進行解碼並且順序執行這些指令。
- 處理器:提供基本的算術和邏輯操作。
- 輸入輸出設備:是人機交互的接口。
那么馮諾依曼體系結構和並行計算有什么關系呢?答案是:並行計算機仍然遵從這一基本架構,只是處理單元多於一個而已,其它的基本架構完全保持不變。
2.2 弗林的經典分類
有不同的方法對並行計算機進行分類(具體例子可參見並行計算分類)。
一種被廣泛采用的分類被稱為弗林經典分類,誕生於1966年。弗林分類法從指令流和數據流兩個維度區分多處理器計算機體系結構。每個維度有且僅有兩個狀態:單個或者多個。
下面個矩陣定義了弗林分類的四個可能狀態:
單指令單數據(SISD): SISD是標准意義上的串行機,具有如下特點:1)單指令:在每一個時鍾周期內,CPU只能執行一個指令流;2)單數據:在每一個時鍾周期內,輸入設備只能輸入一個數據流;3)執行結果是確定的。這是最古老的一種計算機類型。
單指令多數據(SIMD): SIMD屬於一種類型的並行計算機,具有如下特點:1)單指令:所有處理單元在任何一個時鍾周期內都執行同一條指令;2)多數據:每個處理單元可以處理不同的數據元素;3)非常適合於處理高度有序的任務,例如圖形/圖像處理;4)同步(鎖步)及確定性執行;5)兩個主要類型:處理器陣列和矢量管道。
**多指令單數據(MISD):**MISD屬於一種類型的並行計算機,具有如下特點:1)多指令:不同的處理單元可以獨立地執行不同的指令流;2)單數據:不同的處理單元接收的是同一單數據流。這種架構理論上是有的,但是工業實踐中這種機型非常少。
多指令多數據(MIMD): MIMD屬於最常見的一種類型的並行計算機,具有如下特點:1)多指令:不同的處理器可以在同一時刻處理不同的指令流;2)多數據:不同的處理器可以在同一時刻處理不同的數據;3)執行可以是同步的,也可以是異步的,可以是確定性的,也可以是不確定性的。這是目前主流的計算機架構類型,目前的超級計算機、並行計算機集群系統,網格,多處理器計算機,多核計算機等都屬於這種類型。值得注意的是,許多MIMD類型的架構中實際也可能包括SIMD的子架構。
3 並行計算機的內存架構
3.1 共享內存
一般特征: 共享內存的並行計算機雖然也分很多種,但是通常而言,它們都可以讓所有處理器以全局尋址的方式訪問所有的內存空間。多個處理器可以獨立地操作,但是它們共享同一片內存。一個處理器對內存地址的改變對其它處理器來說是可見的。根據內存訪問時間,可以將已有的共享內存機器分為統一內存存取和非統一內存存取兩種類型。
統一內存存取(Uniform Memory Access): 目前更多地被稱為對稱多處理器機器(Symmetric Multiprocessor (SMP)),每個處理器都是相同的,並且其對內存的存取和存取之間都是無差別的。有時候也會被稱為CC-UMA (Cache coherent - UMA)。緩存想干意味着如果一個處理器更新共享內存中的位置,則所有其它處理器都會了解該更新。緩存一致性是在硬件級別上實現的。
非統一內存存取(Non-Uniform Memory Access): 通常由兩個或者多個物理上相連的SMP。一個SMP可以存取其它SMP上的內存。不是所有處理器對所有內存都具有相同的存取或者存取時間。通過連接而進行內存存取速度會更慢一些。如果緩存相緩存想干的特性在這里仍然被保持,那么也可以被稱為CC-NUMA。
優點:全局地址空間提供了一種用戶友好的編程方式,並且由於內存與CPU的階級程度,使得任務之間的數據共享既快速又統一。
缺點:最大的缺點是內存和CPU之間缺少較好的可擴展性。增加更多的CPU意味着更加共享內存和緩存想干系統上的存取流量,從而幾何級別地增加緩存/內存管理的工作量。同時也增加了程序員的責任,因為他需要確保全局內存“正確”的訪問以及同步。
3.2 分布式內存
一般概念: 分布式內存架構也可以分為很多種,但是它們仍然有一些共同特征。分布式內存結構需要通訊網絡,將不同的內存連接起來。一般而言,處理器會有它們所對應的內存。一個處理器所對應的內存地址不會映射到其它處理器上,所以在這種分布式內存架構中,不存在各個處理器所共享的全局內存地址。
由於每個處理器具有它所對應的局部內存,所以它們可以獨立進行操作。一個本地內存上所發生的變化並不會被其它處理器所知曉。因此,緩存想干的概念在分布式內存架構中並不存在。
如果一個處理器需要對其它處理器上的數據進行存取,那么往往程序員需要明確地定義數據通訊的時間和方式,任務之間的同步因此就成為程序員的職責。盡管分布式內存架構中用於數據傳輸的網絡結構可以像以太網一樣簡單,但在實踐中它們的變化往往也很大。
優點: 1)內存可以隨着處理器的數量而擴展,增加處理器的數量的同時,內存的大小也在成比例地增加;2)每個處理器可以快速地訪問自己的內存而不會受到干擾,並且沒有維護全局告訴緩存一致性所帶來的開銷;3)成本效益:可以使用現有的處理器和網絡。
缺點: 1)程序員需要負責處理器之間數據通訊相關的許多細節;2)將基於全局內存的現有數據結構映射到該分布式內存組織可能會存在困難;3)非均勻的內存訪問時間——駐留在遠程結點上的數據比本地結點上的數據需要長的多的訪問時間。
4 並行計算模型
......
5 並行程序設計
......
參閱:https://blog.csdn.net/magicbean2/article/details/75174859
*****************************************************
*** No matter how far you go, looking back is also necessary. ***
*****************************************************