並行演算法設計

2021-08-19 22:30:13 字數 2257 閱讀 5372

求和例子總結

資料並行

其他任務劃分方法

假定已有求解問題的序列演算法,我們將 其改為並行版本

並行演算法與體系結構緊密相關!

設計乙個並行演算法

計算任務的分解

❑ 如何將平行計算工作分解,交由眾多程序/執行緒併發執行

保持依賴關係

❑ 計算結果與序列演算法保持一致

額外開銷

❑ 有多種型別的開銷,要盡量降低

競爭條件與資料依賴

執行結果依賴於兩個或更多事件的時序, 則存在競爭條件(race condition)資料依賴(data dependence)就是兩個內 存操作的序,為了保證結果的正確性,

必須保持這個序

同步(synchronization)用來將多個執行緒 的執行序列化,或是將併發資料訪問串 行化

n 個數求和的例子

1.序列演算法

sum = 0;

for (i = 0; i

< n; i++)

2. 並行演算法

版本1:計算任務劃分

假定每個核心計算連續n/t個元素的部分和(t為執行緒數或處理器數)

int block_length_per_thread = n/t;

int start = id * block_length_per_thread;

for (i=start; i...);

sum += x; }

分析1. 迴圈步之間的求和運算存在依賴→ 執行緒間依賴

❑ 但可以重排順序,因為加法運算滿足結合律

2. 取數-加法-存結果必須是原子操作,以保持結果與序列執行一致

3. 定義

原子性(atomicity):一組操作要麼全部執行要麼全不執行,則稱其是原子的。即不會得到部分執行的結果。

互斥(mutual exclusion):任何時刻都只有乙個執行緒在執行.

版本2:加鎖

插入互斥(mutex),保證任何時刻只有乙個執行緒讀數-加法-存結果——原子操作

int block_length_per_thread = n/t;

mutex m;

int start = id * block_length_per_thread;

for (i=start; i...); mutex_lock(m);

sum += my_x;

mutex_unlock(m);

}

版本3:粗粒度

在將區域性和加到全域性和時才加鎖

int block_length_per_thread = n/t;

mutex m;

int my_sum;

int start = id * block_length_per_thread;

for (i=start; i...);

my_sum += my_x;

}mutex_lock(m);

sum += my_sum;

mutex_unlock(m);

版本4:消除鎖

「主「執行緒完成部分和相加

int block_length_per_thread = n/t;

mutex m;

shared my_sum[t];

int start = id * block_length_per_thread;

for (i=start; i...);

my_sum[id] += my_x; }

if (id == 0)

synchronize_cores(); // 所有參與執行緒都設定障礙

if (id == 0) { // 主線程

sum = my_sum[0];

for (i=1; i版本6:多核並行求全域性和

求和例子總結如何設計並行演算法

任務並行

將求解問題的計算分解為任務,分配給多個核心

資料並行

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

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...

並行演算法 並行演算法的設計技術和並行程式開發

目前普遍使用的並行演算法的設計技術 1 流水線技術 將任務分割成許多子任務,每個處理器完成其中乙個,且第乙個處理器完成第乙個子任務後,第二個處理器可以開始完成第二個子任務 2 分治策略 將原問題分成若干個特徵相同的子問題,分別處理。類似超執行緒技術 常見的分治策略 任務分割 資料分割 3 平衡樹方法...

並行演算法 並行演算法的初步認識

今年的課程中增加了,並行演算法的課程,我一看,一門課程都掛上 演算法 了,肯定厲害呀。這我可要認真學習它。我把我自己的見解和大家分享一下,要是有錯誤的地方一定要指出啊。這是我畫的乙個思維導圖,好像是什麼也看不出來。咱們按照順序乙個乙個的介紹哈。我不知道大家是什麼情況,我是從小學開始,學什麼都是從定理...