MPI綜合實驗報告_第1頁
MPI綜合實驗報告_第2頁
MPI綜合實驗報告_第3頁
MPI綜合實驗報告_第4頁
MPI綜合實驗報告_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、MPI綜合實驗報告 目前三次MPI實驗已經(jīng)結(jié)束,結(jié)合之前所寫的實驗報告,對總體的實驗內(nèi)容做一個總結(jié)。參考資料:MPI簡介多線程是一種便捷的模型,其中每個線程都可以訪問其它線程的存儲空間。因此,這種模型只能在共享存儲系統(tǒng)之間移植。一般來講,并行機不一定在各處理器之間共享存儲,當面向非共享存儲系統(tǒng)開發(fā)并行程序時,程序的各部分之間通過來回傳遞消息的方式通信。要使得消息傳遞方式可移植,就需要采用標準的消息傳遞庫。這就促成的消息傳遞接口(Message Passing Interface, MPI)的面世,MPI是一種被廣泛采用的消息傳遞標準1。與OpenMP并行程序不同,MPI是一種基于消息傳遞的并行

2、編程技術(shù)。消息傳遞接口是一種編程接口標準,而不是一種具體的編程語言。簡而言之,MPI標準定義了一組具有可移植性的編程接口。各個廠商或組織遵循這些標準實現(xiàn)自己的MPI軟件包,典型的實現(xiàn)包括開放源代碼的MPICH、LAM MPI以及不開放源代碼的Intel MPI。由于MPI提供了統(tǒng)一的編程接口,程序員只需要設(shè)計好并行算法,使用相應(yīng)的MPI庫就可以實現(xiàn)基于消息傳遞的并行計算。MPI支持多種操作系統(tǒng),包括大多數(shù)的類UNIX和Windows系統(tǒng)。三次實驗總結(jié)第一次實驗:實驗要求:配置好MPI運行的基本環(huán)境,測試MPI的基本通信程序。程序:#include "stdafx.h"#in

3、clude <mpi.h>void main( void ) MPI_Status status; char string="xxxxx" int myid; MPI_Init(NULL,NULL); MPI_Comm_rank(MPI_COMM_WORLD,&myid); if(myid=2) MPI_Send("HELLO",5,MPI_CHAR,7,1234,MPI_COMM_WORLD); if(myid=7) MPI_Recv(string,5,MPI_CHAR,2,MPI_ANY_TAG,MPI_COMM_WORLD,&a

4、mp;status); printf("Got %s from P%d,tag %dn",string,status,status.MPI_SOURCE,status.MPI_TAG); MPI_Finalize();運行環(huán)境配置過程:(這個是在根據(jù)網(wǎng)上的環(huán)境配置教程做的)1、 安裝軟件MPICH2,本次操作安裝在C:Program FilesMPICH2文件夾中。2、 打開安裝好的MPICH2目錄,打開bin文件夾中的wmpiregister.exe文件,進行注冊。填入本機的用戶名和密碼。3、 建立一個控制臺應(yīng)用程序空文檔,MY MPI,輸入程序4、添加庫和包含文件打開T

5、ool->Options對話框選擇項目和解決方案下的VC+目錄一欄,如下圖所示:分別添加包含文件C:Program FilesMPICH2include和庫文件C:Program FilesMPICH2lib5、 取消預(yù)編譯頭打開Project->Property,設(shè)置框如下圖所示展開C/C+項,選擇與編譯頭,在創(chuàng)建/使用預(yù)編譯頭中選擇 :不使用預(yù)編譯頭6、打開Project->Property,設(shè)置框如下圖所示將配置屬性中的常規(guī)項中的字符集設(shè)置成未設(shè)置展開連接器中輸入項,在附件依賴項中添加mpi.lib7、 自定義多線程運行打開MPICH2安裝目錄顯得mpiexec.exe

6、裝入運行產(chǎn)生的.exe文件并選擇線程數(shù),運行結(jié)果如下圖所示第二次實驗實驗要求:MPI實驗第二部分1. 了解計算粒度、問題規(guī)模(計算負載)、并行程度概念;2. 測試基于MPI的Pi并行計算程序;3. 完成實驗報告(MPI程序代碼、運行結(jié)果截屏、實驗分析總結(jié))在這次的實驗過程中,我們的程序是通過數(shù)值方法計算 的值來觀察運行時間。程序:#include "stdafx.h"#include <stdio.h>#include "mpi.h"static long num_steps = 100000; void main(int argc, cha

7、r* argv) int i_start, i_end, i, myid, numprocs; double pi, mypi, x, step, sum = 0.0; double start, end; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &numprocs); MPI_Comm_rank(MPI_COMM_WORLD, &myid); if(myid = 0) start = MPI_Wtime(); MPI_Bcast(&num_steps, 1, MPI_INT, 0, M

8、PI_COMM_WORLD); i_start = myid * (num_steps / numprocs); i_end = i_start + (num_steps / numprocs); step = 1.0 / (double) num_steps; for( i = i_start; i < i_end; i+) x = (i + 0.5) * step; sum = sum + 4.0 / (1.0 + x * x); mypi = step * sum; MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0,

9、MPI_COMM_WORLD);if(myid = 0) printf("Pi = %fn", pi);end = MPI_Wtime();printf("Run time is : %.10fn", end - start);fflush(stdout);MPI_Finalize();實驗原理:利用公式PI的近似值計算圓周率7,定積分的計算可以轉(zhuǎn)化為求一個曲邊梯形的面積問題。將積分區(qū)間等分成n個小的子區(qū)間,可將每個小的子區(qū)間上的曲邊梯形近似地看成矩形,這些矩形面積的和就近似地等于原來曲邊梯形的面積。這樣最終將求圓周率的問題轉(zhuǎn)化成了一個面積迭加的計算。

10、當進程數(shù)為2時,運算時間很小,要比進程數(shù)為1時時間要短,說明該情況下,多進程的運行效率要比單進程高。然后,我使用了幾臺計算機在同一局域網(wǎng)之下構(gòu)成了集群計算機系統(tǒng),采用非共享內(nèi)存方式利用多進程完成任務(wù)。在兩臺機器構(gòu)成的集群計算機系統(tǒng)之下,我分別測了多組進程之下并行計算的時間比較,運算結(jié)果如下所示:做表格比較之:進程數(shù)1481216運行時間0.00044419050.00120518110.00111410810.00133368910.0012272509結(jié)果分析:因為計算規(guī)模較小,集群計算機系統(tǒng)并行多進程計算并不能很明顯的表現(xiàn)出計算優(yōu)勢。反而,經(jīng)過驗證,在較大規(guī)模計算量之下,集群計算機系統(tǒng)的計

11、算速度優(yōu)越性得到明顯展現(xiàn)。第三次實驗實驗要求:1. 理解同步(synchronous)計算和同步路障(barrier)2. 測試基于MPI_Barrier()的并行程序3. 完成實驗報告(MPI程序代碼、運行結(jié)果截屏、實驗分析總結(jié))程序:#include "stdafx.h"#include <stdio.h>#include "mpi.h"int main(int argc, char* argv) int taskid, ntasks; int ierr;MPI_Init(&argc, &argv);MPI_Comm_ra

12、nk(MPI_COMM_WORLD, &taskid);MPI_Comm_size(MPI_COMM_WORLD, &ntasks);if(taskid = 0) printf("nnnnnn"); ierr = MPI_Barrier(MPI_COMM_WORLD);if(taskid = 0) printf("Hel"); fflush(stdout);if(taskid = 1) printf("lo "); fflush(stdout);if(taskid = 2) printf("Wor"

13、); fflush(stdout);if(taskid = 3) printf("ld!"); fflush(stdout);ierr = MPI_Barrier(MPI_COMM_WORLD);if(taskid = 0) printf(" (Unordered)n"); fflush(stdout);if(taskid = 0) printf("Hel"); fflush(stdout);ierr = MPI_Barrier(MPI_COMM_WORLD);if(taskid = 1) printf("lo "

14、); fflush(stdout);ierr = MPI_Barrier(MPI_COMM_WORLD);if(taskid = 2) printf("Wor"); fflush(stdout);ierr = MPI_Barrier(MPI_COMM_WORLD);if(taskid = 3) printf("ld!"); fflush(stdout);ierr = MPI_Barrier(MPI_COMM_WORLD);if(taskid = 0) printf(" (Ordered)nnnnn"); MPI_Finalize();

15、return 0;實驗原理:同步計算和同步路障Barriers:Blocks until all processes in the communicator have reached this routine.A point at which all processes must wait until all other processes have reached that point.Synchronous & Barrier:In a fully synchronous application, all the processes synchronized at a regular points.實驗結(jié)果截屏:結(jié)果分析:如果大于等于4個進程的話,輸出的語句就是順序的,正常的,但是如果進程數(shù)目小于4,由于同步路障的存在,只有當所有進程到來之時才會被同步,這樣由于進程數(shù)小于要求進程數(shù),所以同步會出現(xiàn)問題,所以輸出的語句會出現(xiàn)亂碼。MPI實驗總結(jié)通過這次實驗,我們對MPI有了一個初步了解。MP

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論