[筆記] 平行計算 Ch2 part 5 Processor Arrays

本系列是 Parallel Programming in C with MPI and OpenMP 這本書的讀書心得!

Processor Arrays



書上定義:

Processor array: many identical, synchronized

arithmetic processing elements

我的理解:

平行計算中對於要處理的process (程序?)會加以同步化,要做到這點,就會同時使用多個處理器(processor),

所以processor array多個處理器排成的陣列,用來排排站等待分配下來的任務同時進行!

課本投影片是這樣寫的

Why Processor Arrays?

• Historically, high cost of a control unit

• Scientific applications have data parallelism


(圖片來源:課本投影片)

圖上的P是 Processor,M是Memory ,Processor array會把要用資料先複製一份搬過來處理完再搬回去!

Processor Array Performance



這邊來定義一下效能Performance

電腦中的效能就是每秒鐘可以執行多少 process

至於如何評估 process array的效能呢?

直接來解個例子就能理解,下圖是這本課本投影片裡面的例子



1. 上面的例子是說有1024個 processor,

2. 每個processor執行一道指令(把兩個整數相加的指令),執行的時間是 1 u秒 也就是10^-6 秒 = 0.000001 秒

3. 他這裡問如果要把1024個元素陣列相加,也就把1024對整數相加,效能如何?

解:因為上面第2點有提及,加一對整數需要一個operation,所以1024對整數相加需要1024個operation (很直觀!)

Performance的定義是每一秒可以做幾個operation

由上面第2點可知1024個處理器,每 1 u 秒就可以執行一道operation !

所以一秒鐘可以執行有 1024 / 10^-6 = 1.024 * 10^9 個operation/每秒

第二個例子:



條件都跟第一個例子一樣,只是這次processor只有512個

而要相加整數共有600對

但是推想一下可知道512 個processor 每 1 u 秒只能處理掉 512 個 operation

所以600個必須要分兩次做,總共花掉 2 u秒,第二次就只做 600 - 512 = 88 道operation !

求出來的performance如上圖就是 3x10^6 operations/ second

上面實在太文言文了

白話文:

假如你有1024個人,每人搬一本書要一分鐘,要同時搬1024本書

就只需要一次就可以做完,總共就一分鐘!

假如你有512個人,每個人的能力一樣一分鐘搬一本書,但是要搬600本書的時候就要分兩趟搬

花費的時間就是兩分鐘!

接著來看兩張課本的圖





這兩張圖是在講,平行化的程式如何優化 if 的指令,

簡單來說就是把情況A 跟 情況B 的兩種結果都同時地算好等待!

如果A符合這次的if條件,就可以立即把A的結果回傳!

如果B符合這次的if條件,就可以立即把B的結果回傳!

綜合以上

Processor Array 的短處是

並非所有的問題都是可以data-parallel 可以用這招來平行的

而且如剛剛的兩個計算例題所示

如果資料量處理不是processor數量他的整倍數,就會有浪費的情形

(下集待續)

留言

這個網誌中的熱門文章

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

[ML筆記] Batch Normalization

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

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