平行演算法期末作業

 

課題 : Computing the Mandelbrot set

任課老師 : 楊昌彪

學生 : 潘志實

 


簡介

Mandelbrot set 是一個由複數的函數 g(z)=z^2 + c , 在一區間內 ,將

所有的點帶入 g 函數中作80次疊代 , 如果在疊代的過程中超過

2 , 則紀錄在超過時所疊代的次數 , 在將這些不同的值用顏色畫

出 , 如下圖是一個在區間(x,y)x = [ -2 , 1 ] , y = [ -1.1 , 1.1 ] 的圖 ,

且在 x 的區間取 698點 , 在 y 的區間取512點的圖形 .

 

 


演算法

單CPU的演算法 :

如同簡介所表示 , 將所取的每一點帶入計算 , 檢查其值大於 2

時疊代的次數 , 即可求得 .

Step 1 : 取得區間及所取的點數

Step 2 : 將每一點逐一帶入 g(z) = z^2 +c 中作疊代 , 並記錄疊代

次數

 

多CPU的演算法 :

將點平分給多顆CPU去計算 , 不過由於在每個點所要疊代的次

數不一定 , 如果分塊切割 , 很容易造成計算量不平均 , 但如果是

對附近的點作切割 , 則可使計算量較平均

Step 1 : 取得區間及所取的點數 , 並傳給每顆CPU .

Step 2 : 將所有的點排成一個array , 第 i 點就由 i mod p (CPU總

數)負責計算

Step 3 : 在將每顆CPU的資料分批寫入檔案(耗很多時間)

 

Source code :

單CPU : sp.c

多CPU : mp.c

 


計算時間

 

CPU數量

1

2

3

4

5

6

7

8

時間()

15.782

8.582

5.663

4.412

3.871

3.293

2.971

2.411

以上為取 698x512 點計算的時間

 

CPU數量

1

2

3

4

5

6

7

8

時間()

3.282

2.260

1.512

0.989

0.859

0.775

0.683

0.593

以上為取 349x256 點計算的時間

紅線代表取點698x512

藍線代表取點349x256

( ps : 以上的數據都沒有加上寫入檔案的時間)


結論

在一般情況之下 , N 顆CPU所計算的時間會是 1 顆的1/N倍 , 因

為上述的分割方法是很單純的分割 , 不需要太大的Broadcast時

間 , 不過由於每個點計算量有差 , 且可能差很大 , 所以也無法估

計單顆CPU所需要的時間 , 但是因為是用較有效的分割 , 所以在

時間上也差不多是 1 顆CPU時間的1/N .