並行演算法筆記(三) 並行演算法設計(二)

2021-09-08 09:54:09 字數 1931 閱讀 1312

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​≤

lj​batcher雙調歸併演算法步驟如下:

遞迴劃分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 平衡樹方法...