資源簡介
1. 設計目的、意義(功能描述)
蒙特·卡羅方法(Monte Carlo method),也稱統計模擬方法,是二十世紀四十年代中期由于科學技術的發展和電子計算機的發明,而被提出的一種以概率統計理論為指導的一類非常重要的數值計算方法。本次大作業主要是對蒙特·卡羅方法進行并行處理,通過OpenMP、MPI、.NET、Java、Win32API等一系列并行技術和并行機制對該算法進行并行處理,從而也進一步熟悉了蒙特·卡羅方法的串行算法和并行算法,實現了用蒙特·卡羅方法計算出半徑為1單位的球體的體積,體會到了并行技術在實際生活中的應用。
2. 方案分析(解決方案)
蒙特·卡羅方法(Monte Carlo method)是指使用隨機數(或更常見的偽隨機數)來解決很多計算問題的方法。球的體積可以估算為:位于點模型內隨機點個數與全體隨機點個數的比值乘以包圍盒的體積算的。
3. 設計分析
3.1 串行算法設計
假定球體用B表示,半徑r=1單位,B1是包含B的參考立方體(在本例中是邊長為2的正方體),在B1中產生N個均勻分布的偽隨機點。對每個隨機點檢測其是否在B內,假設位于B內的隨機點個數為N(in)(<=N),應用蒙特卡洛算法,則B的體積為
V=V1(N(in)/N)
其中V1是B1的體積。如果產生足夠多的隨機點,理論上可以獲得任意逼近精度。
算法描述如下:
BEGIN
N=_MAX;
FOR I=0;I<_MAX;I++
X=RANDOM();
Y=RANDOM();
Z=RANDOM();
IF (X*X+Y*Y+Z*Z)<=1
COUNT++;
END IF;
END FOR;
BULK=V1*(COUNT/_MAX);
END;
本算法主要是在參考立方體的選取上和定義的_MAX的值對結果影響較大,所以應該選擇合適的數。
3.2 并行算法設計
對FOR循環進行劃分使用兩個處理器完成計算。例如對一個長為n的序列,首先劃分得到兩個長為n/2的序列,將其交給兩個處理器分別處理;而后進一步劃分得到四個長為n/4的序列,再分別交給四個處理器處理;如此遞歸下去最終得到結果。當然這是理想的劃分情況,如果劃分步驟不能達到平均分配的目的,那么結果的效率會相對較差。
偽代碼如下:
BEGIN
N=_MAX;
FOR1 I=0;I<_MAX/2;I++
X1=RANDOM();
Y1=RANDOM();
Z1=RANDOM();
IF (X1*X1+Y1*Y1+Z1*Z1)<=1
COUNT1++;
END IF;
END FOR1;
FOR2 I=_MAX/2+1;I<_MAX;I++
X2=RANDOM();
Y2=RANDOM();
Z2=RANDOM();
IF (X2*X2+Y2*Y2+Z2*Z2)<=1
COUNT2++;
END IF;
END FOR2;
BULK=V1*((COUNT1+ COUNT2)/_MAX);
END;
3.3 理論加速比分析
實驗中大量數據所產生的加速比比小量數據所產生的加速比要體現得更明顯,并且數據生成的并行加速比隨著處理器核的增加而增加。設處理器個數為p,數據量為n,由于正常情況下該快速排序算法的復雜度為O(nlogn),并行處理的時間復雜度為O(klogk),其中k=n/p,所以并行算法的時間復雜度為O((n/p)log(n/p)),理論加速比為nlogn/((n/p)log(n/p))=p+logp.
4. 功能模塊實現與最終結果分析
4.1 基于OpenMP的并行算法實現
4.1.1 主要功能模塊
代碼片段和文件信息
- 上一篇:jsp+sql洗衣店管理系統
- 下一篇:oppoR11ST無root 改全網通
評論
共有 條評論