多核時代:並行程序設計探討(1)——並行係統
並行程序設計探討(1)——並行係統
大家可能會有疑問:你一會兒並行,一會兒多核,到底是誰跟誰啊?
我開始也有這個疑問,甚至以為並行就是多核,其實兩個並不能對等,一句話就是:多核是並行的一種。
並行本身是一個廣泛的概念,其實早在多核之前並行處理就已經存在N久了,大家想想看:IBM、SUN、HP的小型機,哪個不是多CPU的?甚至連DELL的工作站,都是兩CPU的,更不用說那些中型機、大型機、巨型機了。所以說“並行處理”是一個比“多核處理”要廣泛、要早的多的技術,多核隻是在PC領域實現了並行處理而已(當然,如果再把多核CPU放到以前的多CPU係統中,那自然係統就更加強大了)。
言歸正傳,我們還是看看大師們是怎麼劃分這個並行係統的。
1 費林分類Flynn's Taxonomy
費林分類法(Flynn's Taxonomy),是一種高效能計算機的分類方式。1972年費林(Michael J. Flynn)根據資訊流(information stream)可分成指令(Instruction)和資料(Data)兩種。據此又可分成四種計算機類型:SISD, SIMD, MISD, and MIMD.
注意:費林分類是劃分計算機的,不是劃分CPU的。
1.1 SISD (Single Instruction Single Data)
單處理指令單數據,一條指令處理一個數據,所有的馮諾依曼體係結構的“單處理器計算機”都是這類,基本上07年前的PC都是這類。
1.2 SIMD (Single Instruction Multiple Data)
單指令多數據,一個指令廣播到多個處理器上,但每個處理器都有自己的數據。
這種係統主要應用在“專有應用”係統上,例如數字信號處理、向量運算處理,其並行功能一般都是由編譯器完成的。
1.3 MISD (Multiple Instruction Single Data)
多指令單數據,沒有係統按照這個結構設計,這種類別僅僅是為了分類完整而提出來的。
1.4 MIMD (Multiple Instruction Multiple Data)
多指令多數據,每個處理單元有獨立指令和數據。
這是並行處理係統中最常見的結構,現代流行的並行處理結構都可以劃入這一類。
2 MIMD詳細分類
大家可能會有疑問:前麵不是已經分類了麼?為什麼還要單獨拿出來將MIMD又分一下呢?
既然是單獨拿出來,要麼就是原來的分類不夠細,要麼就是很重要,要單獨進行說明,而這兩個理由在將MIMD分類時都有:一是MIMD確實太粗了,在實際應用中不會直接說某某係統是一個MIMD係統;二是MIMD是目前並行處理係統中最常見、使用最廣泛的係統。
費林分類的標準是指令和數據,那麼MIMD的分類標準又是什麼呢?CPU、內存、總線、還是其它?
MIMD的分類標準是“內存結構”,也就是內存是如何組織的,而內存結構又可以簡單的分為兩大類:共享內存和消息驅動。顧名思義,共享內存就是處理器之間共享內存,通過共享內存進行通信;消息驅動就是處理器之間不共享內存,靠消息驅動來進行通信s。
根據這個原則,一般分為如下幾種:
共享內存:SMP,NUMA
消息驅動:DMA。
2.1 SMP(symmetric multiprocessors)對稱多處理機
所有CPU都共享同一內存。
SMP又叫UMA(uniform memory access),至於為什麼叫這個,看完下麵的NUMA你就會知道了。
所以按照SMP的定義,目前Intel和AMD推出的多核CPU應該劃歸到SMP這一類。
2.2 NUMA (nonuniform memory access) 非一致內存訪問
所有CPU共享所有的內存,但不同的CPU訪問不同的內存時速度不一樣。
中文翻譯為“非一致內存訪問”,我感覺很拗口,還不如直接翻譯成“牛馬”, 牛馬本來就不是一個東東,而且正好牛和馬一快一慢:)。
下麵的圖是從《並行程序設計模式》中摘出來的,圖畫的有點誤導人,從圖中來看好像是內存之間進行了連接,實際上內存之間是沒有連接的,CPU訪問離自己近的內存是通過本地s直接訪問的(像馬一樣快),訪問離自己遠的內存是通過總線訪問(像牛一樣慢)的,因此很明顯兩者速度差別很大,這也是之所以叫做nonuniform的原因。
與NUMA類似的還有一個ccNUMA,前綴cc是cache-coherent(一致性高速緩存)的縮寫。 為什麼會冒出這樣一個係統呢?其實就是為了解決nonuniform的問題,即:解決訪問不同內存速度不一樣的問題。
2.3 DM (Distributed memory)分布式內存
每個CPU都有自己的內存,CPU之間通過消息來通信。
根據interconnect network的不同,DM又分為兩種:MPP、Cluster、Grid。三者的差別簡單的來說就是:MPP是一台機器,Cluster是一群類似的機器,Grid是一堆任意的機器。
2.3.1 MPP (massively parallel processors) 大規模並行處理係統
這樣的係統是由許多鬆耦合的處理單元組成的,要注意的是這裏指的是處理單元而不是處理器。每個單元內的CPU都有自己私有的資源,如總線,內存,硬盤等。在每個單元內都有操作係統和管理數據庫的實例複本。這種結構最大的特點在於不共享資源。
2.3.2 Cluster集群
集群應該是大家最常見的,就是一堆相同或者類似的機器通過網絡連起來組成一個計算機群,相互之間通過網絡進行通信。
2.3.3 Grid網格係統
網格係統其實和集群差不多,都是一堆機器通過網絡連接起來,但兩者還是不同的東西:
1)集群中機器都是同質的,所謂“物以群分”;而網格中是異質的,可能一個大型機、一台PC機、一台手機都是網格係統中的一個機器;
2)集群中的機器都是屬於某一個實體的,需要“集中管理”,例如一個公司、一個組織、一個人;而網格中的機器屬於不同的實體的,隻需要“分散管理”即可,甚至大家都不知道有哪些機器在這個網格中。
3)大部分情況下,集群是通過局域網進行連接,網格是通過互聯網連接。s
仔細數了數,和並行係統相關的名詞就有10個了,本文知識提綱挈領的將這些並行係統介紹了一下,詳細的研究還需要各位根據自己的情況親自完成了。
==========================未完待續===============================
最後更新:2017-04-02 03:42:36