本系列是 Parallel Programming in C with MPI and OpenMP 這本書的讀書心得!
書上定義:
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會把要用資料先複製一份搬過來處理完再搬回去!
這邊來定義一下效能Performance
電腦中的效能就是每秒鐘可以執行多少 process
至於如何評估 process array的效能呢?
直接來解個例子就能理解,下圖是這本課本投影片裡面的例子
上面的例子是說有1024個 processor,
每個processor執行一道指令(把兩個整數相加的指令),執行的時間是 1 u秒 也就是10^-6 秒 = 0.000001 秒
他這裡問如果要把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數量他的整倍數,就會有浪費的情形
(下集待續)