目前普遍使用的並行演算法的設計技術:
1).流水線技術
將任務分割成許多子任務,每個處理器完成其中乙個,且第乙個處理器完成第乙個子任務後,第二個處理器可以開始完成第二個子任務…
2).分治策略
將原問題分成若干個特徵相同的子問題,分別處理。(類似超執行緒技術)
常見的分治策略:任務分割;資料分割
3).平衡樹方法
將輸入元素作為葉子節點構造二叉平衡樹。
4).倍增技術(指標跳躍技術)
適合處理鍊錶、有向圖等資料結構;經常應用於通訊系統中。
5).加速級聯策略
將最優演算法(計算速度慢)和最快演算法(不是最優)級聯起來。
乙個軟體開發環境主要由硬體平台、作業系統、支撐語言、軟體開發工具、應用軟體包等組成。並行程式開發主要在於並行程式的設計、除錯、維護和監控。
現在研究重點是擴充現有的編譯系統的並行語言功能,主要為:
資料級並行(利用fortran等開發);
任務級並行(利用mpi、linda等開發)
現在大多並行開發語言為fortran、pascal和c語言。並行環境常用的有pvm(parallel virtual machine並行虛擬機器)、mpi(message passing inte***ce 訊息傳遞介面)和express
並行程式的設計有多種方式,主要分為:
共享變數方法;訊息傳遞方法;資料並行程式設計;物件導向的並行程式設計;函式程式設計方法;邏輯程式設計方法。
選擇並實現一種並行程式設計方法前,需要重點考慮:成熟性、易程式設計性、靈活性、效率、可移植性和成本。
成熟性:主要指編譯器和訊息傳遞器的成熟性,有時也考慮開發工具的支援水平和完善程度。
易程式設計性:程式設計方法容易實現並容易產生維護**。
效率:保持編譯器和執行系統操作所有的程序通訊和同步。
1.確定性:並行應用普遍會產生不可預知的結果,這類問題往往很難發現並有效修復。這就需要為並行程式設計提供乙個可靠的、可預知的環境。
2.問題劃分:不同的處理機有時需要執行不同的程式,如何對個各個處理機進行任務劃分。
3.負載平衡:任務的分配可以是靜態的,也可以是動態的,如何保證各個計算節點具有相當的工作量。
4.資料的分配和收集:程式設計時必須考慮資料的分配(初始資料和計算環節中的過程資料)以及**(計算結果的返回)。
5.效能調整:未達到希望的效率是,必須對程式進行調整。
6.執行環境:一般情況下,並行程式要適應多種平行計算環境。
7.開銷:並行程式需要哪些額外開銷,如通訊開銷和程式管理開銷等。
並行演算法設計
求和例子總結 資料並行 其他任務劃分方法 假定已有求解問題的序列演算法,我們將 其改為並行版本 並行演算法與體系結構緊密相關 設計乙個並行演算法 計算任務的分解 如何將平行計算工作分解,交由眾多程序 執行緒併發執行 保持依賴關係 計算結果與序列演算法保持一致 額外開銷 有多種型別的開銷,要盡量降低 ...
並行演算法筆記(三) 並行演算法設計(二)
case1 並行歸併排序 對n個元素a 1 n 排序,則將a均勻分為p組,其中p為處理器個數,按如下過程排序 case2 歸併演算法 valiant歸併 對長度為p,q的有序陣列a和b歸併,則將a均勻分為p sqrt p 組,每組有p sqrt p 個元素,將b劃分為q sqrt q 組,每組q s...
並行演算法 並行演算法的初步認識
今年的課程中增加了,並行演算法的課程,我一看,一門課程都掛上 演算法 了,肯定厲害呀。這我可要認真學習它。我把我自己的見解和大家分享一下,要是有錯誤的地方一定要指出啊。這是我畫的乙個思維導圖,好像是什麼也看不出來。咱們按照順序乙個乙個的介紹哈。我不知道大家是什麼情況,我是從小學開始,學什麼都是從定理...