閱讀568 返回首頁    go 微軟 go windows


多核時代:並行程序設計探討(1)——並行係統

 

並行程序設計探討(1)——並行係統

大家可能會有疑問:你一會兒並行,一會兒多核,到底是誰跟誰啊?

我開始也有這個疑問,甚至以為並行就是多核,其實兩個並不能對等,一句話就是:多核是並行的一種。

並行本身是一個廣泛的概念,其實早在多核之前並行處理就已經存在N久了,大家想想看:IBMSUNHP的小型機,哪個不是多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

根據這個原則,一般分為如下幾種:

共享內存:SMPNUMA

消息驅動:DMA

2.1   SMP(symmetric multiprocessors)對稱多處理機

所有CPU都共享同一內存。

SMP又叫UMAuniform memory access),至於為什麼叫這個,看完下麵的NUMA你就會知道了。

所以按照SMP的定義,目前IntelAMD推出的多核CPU應該劃歸到SMP這一類

 

 

2.2   NUMA (nonuniform memory access) 非一致內存訪問

所有CPU共享所有的內存,但不同的CPU訪問不同的內存時速度不一樣。

中文翻譯為“非一致內存訪問”,我感覺很拗口,還不如直接翻譯成“牛馬”, 牛馬本來就不是一個東東,而且正好牛和馬一快一慢:)。

下麵的圖是從《並行程序設計模式》中摘出來的,圖畫的有點誤導人,從圖中來看好像是內存之間進行了連接,實際上內存之間是沒有連接的,CPU訪問離自己近的內存是通過本地s直接訪問的(像馬一樣快),訪問離自己遠的內存是通過總線訪問(像牛一樣慢)的,因此很明顯兩者速度差別很大,這也是之所以叫做nonuniform的原因。

 

 

NUMA類似的還有一個ccNUMA,前綴cccache-coherent(一致性高速緩存)的縮寫。 為什麼會冒出這樣一個係統呢?其實就是為了解決nonuniform的問題,即:解決訪問不同內存速度不一樣的問題。

 

2.3   DM (Distributed memory)分布式內存

每個CPU都有自己的內存,CPU之間通過消息來通信

 

 

根據interconnect network的不同,DM又分為兩種:MPPClusterGrid。三者的差別簡單的來說就是: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

  上一篇:go ssh框架整合實例子-業務層
  下一篇:go Xpath in JavaScript (第一部分)