平行處理的程式(FFT)
國立中山大學應數系碩士班一年級
顏俊育
8724615
作法:同時利用多個processor
一起作處理,程式中主要程式分為兩個地方。一個是作FFT function,另外一部份為每個processor之間的傳遞資料。程式中先知道需要處理processor的個數,然後將每個processor需要處理的資料部分分好。就開始處理,以下為處理的步驟:(假設處理矩陣大小為I X J,processor number P)下面的數據是處理512*512 Matrix
| Cpu編號 | Finish row fft | Message send | Finish column fft |
| 0 | 4.434024 | 12.626719 | 14.745791 |
| 1 | 8.317817 | 15.200956 | |
| 2 | 4.026164 | 14.081597 | |
| 3 | 2.965605 | 13.801227 | |
| 4 | 3.526097 | 14.090672 | |
| 5 | 3.096276 | 14.178071 | |
| 6 | 3.491216 | 14.452695 | |
| 7 | 2.053618 | 13.964450 | |
| 17.987263 | |||
上表表示使用8Cpu
處理整個過程花費時間,第一個步驟全部Cpu都完成row的fft運算共需要8.317817秒,從收集全部資料到分配資料共需要差不多4秒,第三步驟每個node完成colnum的fft差不多2.5秒,收集完資料完成需要差不多3秒。
| Cpu編號 | Finish row fft | Message send | Finish colunm fft |
| 0 | 5.767487 | 14.492488 | 19.142014 |
| 1 | 12.207932 | 22.139247 | |
| 2 | 7.189827 | 18.734513 | |
| 3 | 4.594667 | 17.843497 | |
| 23.579879 | |||
上表表示使用4
顆Cpu處理整個過程花費時間,第一個步驟全部Cpu都完成row的fft運算共需要12秒,從收集全部資料到分配資料需要差不多2秒的時間,第三步驟每個node完成colnum的fft的時間差不多4.5秒,收集完資料完成需要差不多5秒。
| Cpu編號 | Finish row fft | Finish column fft |
| 0 | 19.065284 | 36.320865 |
| 1 | 42.772854 | 79.860540 |
| 2 | 20.750241 | 38.622858 |
| 3 | 15.978189 | 29.429231 |
| 4 | 18.474914 | 34.209541 |
| 5 | 17.608869 | 33.608366 |
| 6 | 12.322444 | 23.989972 |
| 7 | 12.185275 | 23.111982 |
上表表示使用1
顆Cpu處理整個過程花費時間,第一個步驟完成row的fft時間都不一樣,可能是因為每個Cpu當時的load的process不一樣,所以處理一樣的東西,會有時間長短不一樣。
討論:根據上面的表格,8
顆Cpu比4顆快,4顆比1顆快,但是在時間上來說並沒有差很多。原因在於多個Cpu之間,需要在node和node之間作傳遞的工作會比較多次,所以雖然使用多個Cpu作處理,理論上會縮短處理時間,但是會花費比較多的時間在傳遞訊息上面,所以相對來看,處理簡短的時間並不會很多。再說,若是當時候有某一顆Cpu處理的速度特別慢,也就是那個Cpu有很多人再使用,則可能多顆Cpu會比單顆Cpu慢。 原始程式碼