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
\sqrt
q個元素,按如下過程排序:
並行歸併
對數劃分的並行歸併和平方劃分類似,通過將b劃分為長度為log
(q)log(q)
log(q)
大小的段並將a對應分段,遞迴歸併完成。
將輸入劃分為若干規模相等的子問題
並行遞迴求解子問題
並行歸併子問題的解,獲得原問題的解
與劃分的主要區別為劃分重點在原問題的劃分方法上,而分治則主要考慮子問題計算結果的歸併。
case3:雙調歸併網路
雙調序列即先增後減或先減後增的序列,或通過迴圈可以獲得上述性質的序列。雙調歸併即輸入乙個雙調序列,x,輸出非降(增)有序數列y。
batcher定理:對於i和i+n/2組成的n/2對元素,其最大值/最小值組成的序列s/l仍為雙調序列,且∀i,
j∈ra
nge(
0,n/
2),s
i≤lj
\forall i,j\in range(0,n/2), s_i\leq l_j
∀i,j∈r
ange
(0,n
/2),
si≤
ljbatcher雙調歸併演算法步驟如下:
遞迴劃分s,l
s,ls,
l,最終按照s,l順序合併兩序列即可。
在實際應用中,雙調歸併可以直接由硬體通過簡單邏輯門實現,如下圖:
case4:計算字首和
經典演算法,有點類似線段樹的思想,一張圖即可看懂:
兩次傳遞,時間複雜度為o(l
ogn)
o(logn)
o(logn
) 又稱指標跳躍(pointer jumping)技術,特別適合於處理 鍊錶或有向樹之類的資料結構。當遞迴呼叫時,所要處理資料之間的距離逐步加倍, 經過k步後即可完成距離為2k的所有資料的計算。
case5:表序問題
給定單向鍊錶l,計算每個節點在鍊錶中的位置。
演算法如下(每個節點分配乙個處理器,迴圈後設立全域性障):
重複下列操作logn次
rank(k)=distance(k)
即按照指數增長步長,直到達到鍊錶尾,此演算法時間複雜度為o(l
ogn)
o(logn)
o(logn
)(計算字首和也有類似演算法)
case6:求根節點
和表序問題類似,每次迭代中更新指標指向父節點的父節點,時間複雜度為o(l
ogn)
o(logn)
o(logn
) 將演算法流程劃分成p個前後銜接的任務片斷,每個任 務片斷的輸出作為下乙個任務片斷的輸入。所有任務片斷按同樣的速率產生出結果。
case7:dft計算(脈動演算法,systolic algorithm)
由於dft核矩陣的特殊性,可以使用秦九韶演算法將其分解為序列運算:
因此可以利用流水線逐層平行計算,即上級的計算結果作為下級的宿儒。
並行演算法設計
求和例子總結 資料並行 其他任務劃分方法 假定已有求解問題的序列演算法,我們將 其改為並行版本 並行演算法與體系結構緊密相關 設計乙個並行演算法 計算任務的分解 如何將平行計算工作分解,交由眾多程序 執行緒併發執行 保持依賴關係 計算結果與序列演算法保持一致 額外開銷 有多種型別的開銷,要盡量降低 ...
並行演算法 並行演算法的初步認識
今年的課程中增加了,並行演算法的課程,我一看,一門課程都掛上 演算法 了,肯定厲害呀。這我可要認真學習它。我把我自己的見解和大家分享一下,要是有錯誤的地方一定要指出啊。這是我畫的乙個思維導圖,好像是什麼也看不出來。咱們按照順序乙個乙個的介紹哈。我不知道大家是什麼情況,我是從小學開始,學什麼都是從定理...
並行演算法 並行演算法的設計技術和並行程式開發
目前普遍使用的並行演算法的設計技術 1 流水線技術 將任務分割成許多子任務,每個處理器完成其中乙個,且第乙個處理器完成第乙個子任務後,第二個處理器可以開始完成第二個子任務 2 分治策略 將原問題分成若干個特徵相同的子問題,分別處理。類似超執行緒技術 常見的分治策略 任務分割 資料分割 3 平衡樹方法...