天天看點

分布式,網格及并行計算

:D :D :D [color=red]先說分布式計算和并行計算的異同:[/color]

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

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

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

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

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

分布式的編寫一般用的是C++(也有用JAVA的,但是都是娛樂性質的項目了,不是主流),基本不用MPI接口。并行計算用MPI或者OpenMP。如果把網格計算算做分布式計算(網格計算是分布式計算的一種特例,但是有差別,差別僅僅在程式設計方法和實際應用的範圍上),網格計算使用中間件!而且對聯網的各台計算機的作業系統的要求比較特殊。

:D :D :D [color=red]再說說網格計算和分布式計算的聯系和差別。[/color]

網格計算是分布式運算的進化型,每個人打開電腦,網格就像電力網一樣,可以用起來,你把CPU能力貢獻出來,那麼你可以用全世界的CPU之和。詳細的說,就是:計算機組成的網格類似于輸電網:當我們使用電器的時候,從來沒有關心電力來自哪個發電廠,以及經過了什麼電壓變換。我們隻是簡單的把電器插入牆壁上的電源插座。然而隐藏在插座後面的則是許多發電廠和把它們連接配接在一起的輸電線路。計算機網格模仿了輸電網。當你把一台電腦接入計算機網格的時候,就相當于尋求使用計算機網格的“計算力”。你不用關心資料是由什麼計算機儲存和計算的,正如你并不關心電源插座後面的故事。網格計算就如同建立計算機的輸電網。一個發電廠多餘的發電能力可以通過輸電網傳送給遠方的城市使用者,一台計算機多餘的計算能力遠可以通過計算網格,讓遠方的使用者加以利用。

照上面的說法,我個人的了解是,分布式計算是将大任務化分為小任務,各台參與計算的電腦之間是在實體地域上的分布,一般有伺服器作為“中央”,參與計算的電腦不用了解工作原理,僅僅隻是就自己感興趣的項目做貢獻而已,注意,是“向别人”無償的做貢獻,不是自己“直接”受益;而網格計算是自己“直接”受益的,她通過一個平台允許你調用别人計算機的處理資源,而别人根本就不知道你在用他的資源!這就是說,分布式計算是你和其他人一起組成“一台”專供某些科研組織使用的超級處理機,網格計算是将所有網内其他人的電腦組成一台專供你自己使用的超級處理機。

分布式計算強調參與的計算機自願參與!!!網格計算平台暗箱操作,不管别人是否願意,隻要聯入網内,就要成為另外某人的“處理機”!!!

分布式更偏向于計算任務的分解!将計算任務化整為零,将大家的處理能力化零為整;網格計算更偏向于計算能力的集中!相當于集百家之精華,融你一人之荟粹!!