MPI綜合實(shí)驗(yàn)報(bào)告_第1頁(yè)
MPI綜合實(shí)驗(yàn)報(bào)告_第2頁(yè)
MPI綜合實(shí)驗(yàn)報(bào)告_第3頁(yè)
MPI綜合實(shí)驗(yàn)報(bào)告_第4頁(yè)
MPI綜合實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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

2、編程技術(shù)。消息傳遞接口是一種編程接口標(biāo)準(zhǔn),而不是一種具體的編程語(yǔ)言。簡(jiǎn)而言之,MPI標(biāo)準(zhǔn)定義了一組具有可移植性的編程接口。各個(gè)廠商或組織遵循這些標(biāo)準(zhǔn)實(shí)現(xiàn)自己的MPI軟件包,典型的實(shí)現(xiàn)包括開放源代碼的MPICH、LAM MPI以及不開放源代碼的Intel MPI。由于MPI提供了統(tǒng)一的編程接口,程序員只需要設(shè)計(jì)好并行算法,使用相應(yīng)的MPI庫(kù)就可以實(shí)現(xiàn)基于消息傳遞的并行計(jì)算。MPI支持多種操作系統(tǒng),包括大多數(shù)的類UNIX和Windows系統(tǒng)。三次實(shí)驗(yàn)總結(jié)第一次實(shí)驗(yàn):實(shí)驗(yàn)要求:配置好MPI運(yùn)行的基本環(huán)境,測(cè)試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();運(yùn)行環(huán)境配置過(guò)程:(這個(gè)是在根據(jù)網(wǎng)上的環(huán)境配置教程做的)1、 安裝軟件MPICH2,本次操作安裝在C:Program FilesMPICH2文件夾中。2、 打開安裝好的MPICH2目錄,打開bin文件夾中的wmpiregister.exe文件,進(jìn)行注冊(cè)。填入本機(jī)的用戶名和密碼。3、 建立一個(gè)控制臺(tái)應(yīng)用程序空文檔,MY MPI,輸入程序4、添加庫(kù)和包含文件打開T

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

6、裝入運(yùn)行產(chǎn)生的.exe文件并選擇線程數(shù),運(yùn)行結(jié)果如下圖所示第二次實(shí)驗(yàn)實(shí)驗(yàn)要求:MPI實(shí)驗(yàn)第二部分1. 了解計(jì)算粒度、問(wèn)題規(guī)模(計(jì)算負(fù)載)、并行程度概念;2. 測(cè)試基于MPI的Pi并行計(jì)算程序;3. 完成實(shí)驗(yàn)報(bào)告(MPI程序代碼、運(yùn)行結(jié)果截屏、實(shí)驗(yàn)分析總結(jié))在這次的實(shí)驗(yàn)過(guò)程中,我們的程序是通過(guò)數(shù)值方法計(jì)算 的值來(lái)觀察運(yùn)行時(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();實(shí)驗(yàn)原理:利用公式PI的近似值計(jì)算圓周率7,定積分的計(jì)算可以轉(zhuǎn)化為求一個(gè)曲邊梯形的面積問(wèn)題。將積分區(qū)間等分成n個(gè)小的子區(qū)間,可將每個(gè)小的子區(qū)間上的曲邊梯形近似地看成矩形,這些矩形面積的和就近似地等于原來(lái)曲邊梯形的面積。這樣最終將求圓周率的問(wèn)題轉(zhuǎn)化成了一個(gè)面積迭加的計(jì)算。

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

11、算速度優(yōu)越性得到明顯展現(xiàn)。第三次實(shí)驗(yàn)實(shí)驗(yàn)要求:1. 理解同步(synchronous)計(jì)算和同步路障(barrier)2. 測(cè)試基于MPI_Barrier()的并行程序3. 完成實(shí)驗(yàn)報(bào)告(MPI程序代碼、運(yùn)行結(jié)果截屏、實(shí)驗(yàn)分析總結(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;實(shí)驗(yàn)原理:同步計(jì)算和同步路障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.實(shí)驗(yàn)結(jié)果截屏:結(jié)果分析:如果大于等于4個(gè)進(jìn)程的話,輸出的語(yǔ)句就是順序的,正常的,但是如果進(jìn)程數(shù)目小于4,由于同步路障的存在,只有當(dāng)所有進(jìn)程到來(lái)之時(shí)才會(huì)被同步,這樣由于進(jìn)程數(shù)小于要求進(jìn)程數(shù),所以同步會(huì)出現(xiàn)問(wèn)題,所以輸出的語(yǔ)句會(huì)出現(xiàn)亂碼。MPI實(shí)驗(yàn)總結(jié)通過(guò)這次實(shí)驗(yàn),我們對(duì)MPI有了一個(gè)初步了解。MP

溫馨提示

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

評(píng)論

0/150

提交評(píng)論