1. 程式人生 > >分散式計算和平行計算的異同

分散式計算和平行計算的異同

轉載:http://www.equn.com/forum/thread-4876-1-1.html

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

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

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



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

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


分散式的編寫一般用的是C++(也有用JAVA的,但是都是娛樂性質的專案了,不是主流),基本不用MPI介面。平行計算用MPI或者OpenMP。如果把網格計算算做分散式計算(網格計算是分散式計算的一種特例,但是有區別,區別僅僅在程式設計方法和實際應用的範圍上),網格計算使用中介軟體!而且對聯網的各臺計算機的作業系統的要求比較特殊。

轉載:http://blog.sina.com.cn/s/blog_62e6d9c20100jgb4.html

1. 什麼是平行計算

平行計算(Parallel Computing)是指在平行計算機上,將一個應用分解成多個子任務,分配給不同的處理器,各個處理器之間相互協同,並行地執行子任務,從而達到加快求解速度,或者提高求解應用問題規模的目的。

2. 平行計算必須具備的3個基本條件

(1)平行計算機。平行計算機至少包含兩臺或兩臺以上處理機,這此處理機通過網際網路絡相互連線,相互通訊。

(2)應用問題必須具有並行度。也就是說,應用可以分解為多個子任務,這些子任務可以並行地執行。將一個應用分解為多個子任務的過程,稱為並行演算法的設計。

(3)並行程式設計。在平行計算機提供的並行程式設計環境上,具體實現並行演算法,編制並行程式並執行該程式,從而達到並行求解應用問題的目的。

3. 平行計算與分佈計算的區別

平行計算不同於分散式計算(Distributed Computing)。後者主要是指,通過網路相互連線的兩個以上的處理機相互協調、各自執行相互依賴的不同應用,從而達到協調資源訪問,提高資源使用效率的目的。但是,它無法達到平行計算所倡導的加快求解同一個應用的速度,或者提高求解同一個應用的問題規模的目的。對於一些複雜應用系統,分散式計算與平行計算通常相互配合,既要通過分散式計算協調不同應用之間的關係,又要通過平行計算提高求解單個應用的能力。

下面給出平行計算和分散式計算的幾個例子,以示區別。

例1 (平行計算)N個數被分佈儲存在P臺處理器,P臺處理器並行執行N個數的累加和。首先,各個處理器累加它們各自擁有的區域性資料,得到累加和;然後,P臺處理器執行全域性通訊操作,累加所有部分和,得到全域性累加和。

例2 (分散式計算)觀眾點播、遠端駕馭式視覺化、電視會議等。