Parallel Algorithm term project
FFT
Faster Fourier transforms 在單CPU中是以divide-and-conquer的方法,在多CPU的版本中也是以這個方法做。先以一個Node隨機產生一組數據,在這個程式中取65536個複數,然後將這些數據平均分配給所要執行的Node﹙在這個程式中為1、2、4或8個Node﹚,每個Node各自用divide-and-conquer的方法算出所分配到數據的FFT,然後將結果merge,就可以得到這65536個數據的FFT。
測試環境:
以ibm26和SP2比較單CPU和多CPU的效能,因為在SP2上每個Node的效能相差蠻大的,所以在測試一個Node以上的效能時以所有Node的平均時間來代表這次的執行時間。在這個測試中用兩種方法計算時間,一種是以profile計算出CPU的執行時間,另外用一個function MPI_Wtime()來計算實計執行時間,在執行時Node1因為不明原因使得執行時間比其他的Node多出快一倍。使用MPI_Wtime()計算時間已經去掉了產生數據的時間,所以Node0的load不會比其他Node重。
下面是這個程式的測試結果:
By profile:
|
|
ibm26 |
PROCS=1 |
PROCS=2 |
PROCS=4 |
PROCS=8 |
|
TEST1 |
7.64 |
2.76 |
1.78 |
1.16 |
1.13 |
|
TEST2 |
7.31 |
2.84 |
1.73 |
1.25 |
0.93 |
|
TEST3 |
7.24 |
2.77 |
1.81 |
1.18 |
1.08 |
|
AVERAGE |
7.39 |
2.79 |
1.77 |
1.20 |
1.05 |
Figure. 1
By MPI_Wtime:
|
Node |
Total time |
FFT time |
|
|
Procs=1 |
0 |
4.698823 |
4.698806 |
|
Procs=2 |
0 |
8.334131 |
2.470133 |
|
1 |
8.950267 |
6.148421 |
|
|
Procs=4 |
0 |
9.483698 |
1.660628 |
|
1 |
10.002514 |
3.636658 |
|
|
2 |
7.527628 |
1.696125 |
|
|
3 |
8.278793 |
2.697357 |
|
|
Procs=8 |
0 |
9.944759 |
0.804520 |
|
1 |
10.591172 |
1.732505 |
|
|
2 |
8.119782 |
0.968247 |
|
|
3 |
8.443638 |
1.299631 |
|
|
4 |
5.571468 |
0.545411 |
|
|
5 |
5.984920 |
0.869353 |
|
|
6 |
5.972702 |
0.506324 |
|
|
7 |
5.591751 |
0.268720 |
Figure. 2
由以上的數據發現Node個數愈多,所得到的效果愈少,這是因為這個程式是由一個Node產生數據再分給其他Node,所以會造成某些Nodes需要等待,而且merge的時候也會使得某些Nodes等待。
圖表:
這個圖是由figure 1的數據所畫成的,可以看出由procs=1 到 procs=2時,運算速度約快1.6倍,由procs=2 到 procs=4,速度約快1.5倍,而由 procs=4 到 procs=8,速度只增加1.14倍,可以說是沒有增加多少效能,可能是因為測試的數量不夠大,所以增加的效能被傳輸時間抵消掉了。
