1. 程式人生 > >平行計算與分散式處理的區別

平行計算與分散式處理的區別

一、一些概念

1.1 物理處理器: 
    一個單核CPU,多核CPU的某個核心,都是一個物理處理器;
 
1.2 邏輯處理器:
    通過超執行緒技術可以將一個物理處理器模擬成多個邏輯處理器,
    超執行緒技術的目的是提高物理處理器的利用效率,開銷是模擬的多個邏輯處理器在工作切換時,有不少的資料儲存和恢復工作,因此實際處理效能的提升要弱於多核CPU的多個物理處理器;雙核CPU的兩個物理處理器,通過超執行緒技術也可以模擬成四個邏輯處理器,但隨著多核心CPU的物理處理器數量增多,就不必使用開銷較大的超執行緒技術了。為避免概念混淆,後續描述中若無特別指明,處理器都是指物理處理器,不再討論超執行緒技術。

1.3 平行計算

平行計算或稱平行計算是相對於序列計算來說的。
所謂平行計算可分為時間上的並行和空間上的並行。時間上的並行就是指流水線技術,而空間上的並行則是指用多個處理器併發的執行計算。 
平行計算(Parallel Computing)是指同時使用多種計算資源解決計算問題的過程。
為執行平行計算,計算資源應包括一臺配有多處理機(並行處理)的計算機、一個與網路相連的計算機專有編號,或者兩者結合使用。平行計算的主要目的是快速解決大型且複雜的計算問題。 

1.3分散式計算

分散式計算是一門電腦科學,它研究如何把一個需要非常巨大的計算能力才能解決的問題分成許多小的部分,然後把這些部分分配給許多計算機進行處理,最後把這些計算結果綜合起來得到最終的結果。 

分散式計算專案已經被用於使用世界各地成千上萬位志願者的計算機的閒置計算能力,通過因特網,您可以分析來自外太空的電訊號,尋找隱蔽的黑洞,並探索可能存在的外星智慧生命;您可以尋找超過1000萬位數字的梅森質數;您也可以尋找並發現對抗艾滋病病毒的更為有效的藥物。這些專案都很龐大,需要驚人的計算量,僅僅由單個的電腦或是個人在一個能讓人接受的時間內計算完成是決不可能的。 
所謂分散式計算就是在兩個或多個軟體互相共享資訊,這些軟體既可以在同一臺計算機上執行,也可以在通過網路連線起來的多臺計算機上執行。
分散式計算比起其它演算法具有以下幾個優點: 
1、稀有資源可以共享。
2、通過分散式計算可以在多臺計算機上平衡計算負載。
3、可以把程式放在最適合執行它的計算機上。其中,共享稀有資源和平衡負載

是計算機分散式計算的核心思想之一。


1.4處理單元: 
    一個獨立的軟/硬體系統,可以是一臺PC,或者一個虛擬機器系統;

1.5分散式處理系統:
    某種處理任務被分解到多個處理器上,系統為扁平結構,一般上層有一個控制中心,下層有多個處理單元,通過下層多個處理單元的數量/功能擴充套件,來提高整個系統的處理效能;
    處理任務有兩種分解方法:一種是同類處理任務的分解,屬於數量擴充套件;另一種是按功能不同進行分解,屬於功能擴充套件;兩種分解方法一般都混合使用。
 
1.6集中式處理系統:
    某種處理任務被集中到一個處理單元上,系統為星型結構,一般只有一個核心處理單元;即使核心處理單元有雙機備份,也屬於集中式處理系統。

2.區別

解決物件上:都是大任務化為小任務,這是他們共同之處。


分散式的任務包互相之間有獨立性,上一個任務包的結果未返回或者是結果處理錯誤,對下一個任務包的處理幾乎沒有什麼影響。因此,分散式的實時性要求不高,而且允許存在計算錯誤(因為每個計算任務給好幾個參與者計算,上傳結果到伺服器後要比較結果,然後對結果差異大的進行驗證)


分散式要處理的問題一般是基於“尋找”模式的
。所謂的“尋找”,就相當於窮舉法!為了嘗試到每一個可能存在的結果,一般從0~N( 某一數值)被一個一個的測試,直到我們找到所要求的結果。事實上,為了易於一次性探測到正確的結果,我們假設結果是以某個特殊形式開始的。在這種型別的搜尋裡,我們也許幸運的一開始就找到答案;也許不夠走運以至於到最後才找到答案,這都很公平。


然而,並行程式並行處理的任務包之間有很大的聯絡,而且平行計算的每一個任務塊都是必要的,沒有浪費的分割的,就是每個任務包都要處理,而且計算結果相互影響,就要求每個的計算結果要絕對正確,而且在時間上要儘量做到同步,而分散式的很多工塊可以根本就不處理,有大量的無用資料塊,所以說分散式計算的速度儘管很快,但是真正的“效率”是低之再低 的,可能一直在尋找,但是永遠都找不到,也可能一開始就找到了;而並行處理不同,它的任務包個數相對有限,在一個有限的時間應該是可能完成的。


分散式計算提出了一個讓工作站端能夠在後臺持許工作的方法,而使用者完全不需關心任何東西。這種實現基於兩個原則,其一是任務連續分配和空閒優先權,其二是寫一個螢幕保護程式。現在的排程程式已經不錯了,而空閒優先任務將在人們完全不用關心任何東西的情況下自動執行。利用螢幕保護程式可以利用計算機閒置的時間計算工作任務。


三、技術範疇


分散式的編寫一般用的是C++(也有用JAVA的,但是都不是主流),基本不用MPI介面。


平行計算用MPI或者OpenMP。

軟體開發技術:
(1)系統層面 -> 集中式處理系統 - 物件是一個處理單元
               -> 包含一個處理器 -> 併發計算,排程優化
                                 -> 平行計算之指令優化(特例)
               -> 包含多個處理器 -> 平行計算
           
            -> 分散式處理系統 - 物件是多個處理單元
               -> 任務的數量分解,數量空間擴充套件;
               -> 任務的功能分解,功能空間擴充套件;
 
(2)演算法層面 -> 一個處理器
               -> 併發計算
                  -> 分時排程 -> 新就緒的高優先順序任務
                                 -> 可搶佔
                                 -> 不可搶佔,如Linux程序的核心態
                              -> 新就緒的低優先順序任務
                                 -> 預留時間片,保證排程,延遲可預知
                  -> 多工排程 -> 新就緒的高優先順序任務
                                   -> 可搶佔
                                   -> 不可搶佔
                                -> 新就緒的低優先順序任務
                                   -> 不保證及時排程,延遲不可預知
            -> 多個處理器
               -> 平行計算
                  -> 並行演算法
                      -> 空間複用多個處理器的演算法專題,略
                  -> 並行排程
                      -> 新就緒的高優先順序任務->優先分配到空閒的處理器
                      -> 新就緒的低優先順序任務->負荷分擔分配到各個處理器
 
3、多核心CPU的技術展望
多核心CPU -> 一個處理單元
             -> 包含多個處理器 -> 平行計算 -> 並行演算法 -> ...
                                           -> 並行排程 -> ...
          -> 虛擬機器技術 -> 分散式處理系統
                           -> 多個處理單元
                              -> 任務的數量分解,數量空間擴充套件;
                              -> 任務的功能分解,功能空間擴充套件。
 
未來多核CPU的不同核心,如果賦予不同的功能,則更加容易組織成一個強大的分散式處理系統,規避了軟體開發在平行計算方面的困難。