平行處理的程式(FFT)

國立中山大學應數系碩士班一年級

顏俊育

8724615

 

作法:同時利用多個processor一起作處理,程式中主要程式分為兩個地方。一個是作FFT function,另外一部份為每個processor之間的傳遞資料。程式中先知道需要處理processor的個數,然後將每個processor需要處理的資料部分分好。就開始處理,以下為處理的步驟:(假設處理矩陣大小為I X Jprocessor number P

  1. 將矩陣以I mod P I / P 就可以知道每個矩陣必須處理哪些row.
  2. 每個processor 對所需處理的rowFFT轉換
  3. 做完之後傳到特定的processor(node 0)
  4. 特定的processor收集完所有processor做完之後的資料,再broadcast給全部的processor(node 0 ..node 7)
  5. 同上步驟對columnFFT轉換
  6. 做完之後傳回node 0
  7. 完成整個矩陣的FFT轉換

下面的數據是處理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都完成rowfft運算共需要8.317817秒,從收集全部資料到分配資料共需要差不多4秒,第三步驟每個node完成colnumfft差不多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

上表表示使用4Cpu處理整個過程花費時間,第一個步驟全部Cpu都完成rowfft運算共需要12秒,從收集全部資料到分配資料需要差不多2秒的時間,第三步驟每個node完成colnumfft的時間差不多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

上表表示使用1Cpu處理整個過程花費時間,第一個步驟完成rowfft時間都不一樣,可能是因為每個Cpu當時的loadprocess不一樣,所以處理一樣的東西,會有時間長短不一樣。

 

討論:根據上面的表格,8Cpu4顆快,4顆比1顆快,但是在時間上來說並沒有差很多。原因在於多個Cpu之間,需要在nodenode之間作傳遞的工作會比較多次,所以雖然使用多個Cpu作處理,理論上會縮短處理時間,但是會花費比較多的時間在傳遞訊息上面,所以相對來看,處理簡短的時間並不會很多。再說,若是當時候有某一顆Cpu處理的速度特別慢,也就是那個Cpu有很多人再使用,則可能多顆Cpu會比單顆Cpu慢。

原始程式碼