[筆記] 平行計算 Ch3 part 2 效能分析

延續上篇

關於Mapping還有一些重點

Decision Tree of Mapping Strategy

分 static number of task 與 dynamic number of task 兩種

static number of task : 這是在說Task的數量是固定的已知的!

例如100x100的矩陣相乘需要的計算量

是固定要做1000次的

dynamic number of task:這是說Task的數量是未知,未固定的。

例如抓網頁的程式,我不會預先知道要抓幾頁才會完

dynamic load balancing

我在算 他在休息,就把工作塞給他

動態地分配,只要有在休息的就可以配置task

run-time task scheduling : 切成很多很多短短的工作,並且不斷地動態配置工作!

一個task給很多處理器

很多個task給處理器

分不平均:一個處理器很多task 

負責分配工作的這件事是個bottleneck 當很多很多人在等他分工作時,就可能造成等待,所以如果task與processor的數量比沒辦法分到1:1的話

那就請超過 10:1 吧 ratio of tasks to processors is at least 10:1



Finding Global Sum in logarithmic time 
這是要把下面的陣列全部加起來的方法,必須在log時間內算出來!



首先先做一回合的兩兩一組相加,



相加後的結果再做一回合的兩兩相加





如此做法可在四回合算完 4x4 個元素

以二為底 log (16) = 4 回合 



檢視一下我們做的步驟,觀察結果發現



其實左上,右上,左下,右下四個區塊等同於把區塊內的元素全部加起來的效果

這一步驟是做 Agglomeration整合 and Mapping 分配任務的結果

n tasks mapped to p processors

定義變數:n 個任務分配給 p 個處理器去做!

由上述的分析可得知

n/p primitive tasks

with 1 value

⇓

1 primitive tasks

with n/p values

這裡是在講 其實每區塊(四個task相加)整合後得到一個總和的結果

如此可把每四個一組的任務整合成一件單純的總和的任務

如此全部有 n = 16 個任務點,就整合成 (n/p) = (16/4) = 四件單純的總和的task得到一個總和的value

定義兩個變數



x 念做 "開" :定義成做這個operation所需的時間,

入 念做"lamda" :定義成訊息傳輸的延遲時間

如此:分給四個處理器同時運算時所花的時間為:



這裡是表示把(n/p) = (16/4) = 四個元素相加起來的任務運算

共需要做 4-1 = 3 次的相加。

而在做task之間的reduction整合的任務之中所需時間為

 "lamda" 加 "開" ,意即訊息傳遞時間延遲加上做operation的時間

如此的p個處理器做p個task,整合時的任務共有 log p 個 communication steps

所以得到全部時間總和為:



這裡好抽象... 希望大家不要覺得我在講外星語 ><

留言

這個網誌中的熱門文章

[筆記] CRLF跟LF之區別 --- 隱形的 bug

[ML筆記] Batch Normalization

[筆記] 統計實習(1) SAS 基礎用法 (匯入資料並另存SAS新檔,SUBSTR,計算總和與平均,BMI)

[ML筆記] Ensemble - Bagging, Boosting & Stacking