分布內(nèi)存并行程序開發(fā)課件_第1頁
分布內(nèi)存并行程序開發(fā)課件_第2頁
分布內(nèi)存并行程序開發(fā)課件_第3頁
分布內(nèi)存并行程序開發(fā)課件_第4頁
分布內(nèi)存并行程序開發(fā)課件_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、MPI分布內(nèi)存并行程序開發(fā) 第一章并行計算概述2 為什麼要采用并行計算?串行程序速度提升緩慢可以加快速度更短的時間內(nèi)解決相同的問題;相同的時間內(nèi)解決更多更復(fù)雜的問題可以加大規(guī)模計算更大規(guī)模的問題3 并行計算設(shè)計的分類 共享內(nèi)存ccNUMA; SMP 分布式內(nèi)存MPP; Cluster4 并行化分解方法任務(wù)分解多任務(wù)并發(fā)執(zhí)行功能分解分解被執(zhí)行的計算區(qū)域分解分解被執(zhí)行的數(shù)據(jù)6 分布內(nèi)存并行方式任務(wù)并行不同參數(shù)的大量工況計算區(qū)域分解并行大規(guī)模多節(jié)點分塊并行計算7 MPI的歷史MPI初稿:美國并行計算中心工作會議(92年4月)MPI-1公布:第一屆MPI大會(93年1月);MPI標準正式發(fā)布:1994

2、年5月;MPI-2發(fā)布:MPI論壇(97年)。9MPICH:最重要的MPI實現(xiàn)(/mpi/ mpich),與MPI-1規(guī)范同步發(fā)展的版本,支持部分MPI-2的特征如動態(tài)生成進程等。CHIMP:EPCC(Edinburgh Parallel Computing Center)開發(fā)。ftp:/ftp.epcc.ed.ac.uk/pub/packages/chimp/release下載。LAM(Local Area Multicomputer):Ohio State University開發(fā)。/download/下載。 MPI的實現(xiàn)10 第三章 MPI編程11 MPI為程序員提供一個并行環(huán)境庫,程序

3、員通過調(diào)用MPI的庫程序來達到程序員所要達到的并行目的,可以只使用其中的6個最基本的函數(shù)就能編寫一個完整的MPI程序去求解很多問題。這6個基本函數(shù),包括啟動和結(jié)束MPI環(huán)境,識別進程以及發(fā)送和接收消息:MPI_INIT: 啟動MPI環(huán)境MPI_COMM_SIZE: 確定進程數(shù)MPI_COMM_RANK: 確定自己的進程標識符MPI_SEND: 發(fā)送一條消息MPI_RECV: 接收一條消息MPI_FINALIZE: 結(jié)束MPI環(huán)境12 程序1、 簡單例子 program maininclude mpif.h character * (MPI_MAX_PROCESSOR_NAME) process

4、or_nameinteger myid,numprocs,namelen,rc,ierr call MPI_INIT(ierr)call MPI_COMM_RANK(MPI_COMM_WORLD,myid,ierr)call MPI_COMM_SIZE(MPI_COMM_WORLD,numprocs,ierr)call MPI_GET_PROCESSOR_NAME(processor_name,namelen,ierr)write (*,10) myid,numprocs,processor_name10 FORMAT(Hello World! Process,I2, of ,I1, on ,

5、20A)call MPI_FINALIZE(rc) end13 程序1、 簡單例子#include “mpi.h”main(int argc, char *argv) int numprocs,myrank,i,j,k; MPI_Status status; char msg20; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myrank); if(myrank = 0) strcpy(msg,”Hello World”); MPI_Send(msg,

6、strlen(msg) + 1,MPI_CHAR,1,99,MPI_COMM_WORLD); else if(myrank =1) MPI_Recv(msg,20,MPI_CHAR,0,99,MPI_COMM_WORLD,&status); printf(“Receive message = %sn”,msg); MPI_Finalize();14 頭文件MPI程序要求:所有包含MPI調(diào)用的程序文件頭應(yīng)加入:16 編譯,執(zhí)行:mpicc -o hello hello.c:生成執(zhí)行文件hellompirun -np n hello: 加載n個進程運行,0號進程發(fā)送,1號進程接受并打印字符串17

7、進程號(rank)在一個通信因子中,每個進程都有一個唯一的整數(shù)標識符,稱作“進程ID”,進程號是從0開始的連續(xù)整數(shù)。if (rank =0) 第0進程運行的程序段 else if(rank = 1) 第1進程運行的程序段19 MPI消息MPI消息包括信封和數(shù)據(jù)兩個部分,信封指出了發(fā)送或接收消息的對象及相關(guān)信息,而數(shù)據(jù)是本消息將要傳遞的內(nèi)容。數(shù)據(jù):信封:20 MPI的基本函數(shù)MPI_InitMPI_Comm_sizeMPI_Comm_rankMPI_SendMPI_RecvMPI_Finalize21 MPI_Init()MPI的初始化例行函數(shù),用于初始化MPI運行環(huán)境。必須調(diào)用;首先調(diào)用;調(diào)用

8、一次。MPI_Init (*argc,*argv) 。每個進程都有一個參數(shù)表。22 MPI_Comm_size()該函數(shù)返回與該組通信因子相關(guān)的進程數(shù),顯然這里的通訊因子必須是組內(nèi)通訊因子。MPI_Comm_size (comm,*size) 23 MPI_Comm_rank()該函數(shù)返回該進程在指定通信因子中的進程號(0 進程數(shù)-1),一個進程在不同通信因子中的進程號可能不同:MPI_Comm_rank (comm,*rank) 24 MPI_Recv()該函數(shù)從指定的進程source接收消息,并且該消息的數(shù)據(jù)類型和消息標識和本接收進程指定的數(shù)據(jù)類型和消息標識相一致,收到的消息所包含的數(shù)據(jù)元

9、素的個數(shù)最多不能超過count.MPI_Recv(buf,count,datatype,source,comm,status)26 MPI_Finalize()結(jié)束MPI執(zhí)行環(huán)境。該函數(shù)一旦被應(yīng)用程序調(diào)用時,就不能調(diào)用MPI的其它例行函數(shù)(包括MPI_Init),用戶必須保證在進程調(diào)用MPI_Finalize之前把與完成進程有關(guān)的所有通信結(jié)束。MPI_Finalize ()27 緩沖區(qū)(buffer)指應(yīng)用程序定義地用于發(fā)送或接收數(shù)據(jù)的消息緩沖區(qū)。29 數(shù)據(jù)個數(shù)(count)指發(fā)送或接收指定數(shù)據(jù)類型的個數(shù)。數(shù)據(jù)類型的長度 * 數(shù)據(jù)個數(shù)的值為用戶實際傳遞的消息長度。30 數(shù)據(jù)類型(type)MP

10、I定義了一些缺省的數(shù)據(jù)類型,用戶也可以根據(jù)需要建立自己的數(shù)據(jù)類型31續(xù)上頁32 目的地 (dest)發(fā)送進程指定的接收該消息的目的進程,也就是接收進程的進程號(注意組間通訊的情況)。33 源 (source)接收進程指定的發(fā)送該消息的源進程,也就是發(fā)送進程的進程號。如果該值為MPI_ANY_SOURCE表示接收任意源進程發(fā)來的消息。34 標識符(tag)由程序員指定地為標識一個消息的唯一非負整數(shù)值(0-32767),發(fā)送操作和接收操作的標識符一定要匹配,但對于接收操作來說,如果tag指定為MPI_ANY_TAG則可與任何發(fā)送操作的tag相匹配。35 通信因子(comm)包含源與目的進程的一組上

11、下文相關(guān)的進程集合,除非用戶自己定義(創(chuàng)建)了新的通信因子,否則一般使用系統(tǒng)預(yù)先定義的全局通信因子MPI_COMM_WORLD。36 狀態(tài)(status)對于接收操作,包含了接收消息的源進程(source)和消息的標識符(tag)。在FORTRAN程序中,這個參數(shù)是包含MPI_STATUS_SIZE個整數(shù)的數(shù)組,status(MPI_SOURCE)、status(MPI_TAG)和status(MPI_ERROR)分別表示數(shù)據(jù)的進程標識、發(fā)送數(shù)據(jù)使用tag 標識和接收操作返回的錯誤代碼。相當于一種在接受方對消息的監(jiān)測機制,并且以其為依據(jù)對消息作出不同的處理(當用通配符接受消息時)。37 程序1

12、、簡單例子#include “mpi.h”main(int argc, char *argv) int numprocs,myrank,i,j,k; MPI_Status status; char msg20; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myrank); if(myrank = 0) strcpy(msg,”Hello World”); MPI_Send(msg,strlen(msg) + 1,MPI_CHAR,1,99,MPI_CO

13、MM_WORLD); else if(myrank =1) MPI_Recv(msg,20,MPI_CHAR,0,99,MPI_COMM_WORLD,&status); printf(“Receive message = %sn”,msg); MPI_Finalize();38 程序2、 的計算 #include “mpi.h” #include #include double f(double x);/*定義函數(shù)f(x) */ return(4.0/(1.0+x*x); int main (int argc,char * argv) int done =0,n,myid,numprocs,i

14、; double PI25DT=3.141592653589793238462643; double mypi,pi,h,sum,x; double startwtime=0.0,endwtime; int namelen; char processor_nameMPI_MAXPROCESSOR_NAME; MPI_Status status; 01-1-1139 MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid); MPI_Get_process

15、or_name(processor_name,&namelen); fprint(stdout,”Process %d of %d on % sn”,myid,numprocs, processor_name); n=0; if (myid=0) printf(“Please give N=”); scanf(&n); startwtime=MPI_Wtime(); for (j=1;jnumprocs;j+) MPI_Send(&n,1,MPI_INT,j,99,MPI_COMM_WORLD); 40 else MPI_Recv(&n,1,MPI_INT,MPI_ANY_SOURCE,99,

16、MPI_COMM_WORLD,&status); h=1.0/(double) n; sum=0.0; for(i=myid+1;i=n;i+=numprocs)/* 每一個進程計算一部分矩形的面積,若進程總數(shù)numprocs為4, 將 0-1區(qū)間劃分為100個矩形,則各個進程分別計算矩形塊 0進程 1,5,9,13,97 1進程 2,6,10,14,98 2進程 3,7,11,15,99 3進程 4,8,12,16,100 */41 x=h*(double)i-0.5); sum+=f(x); mypi=h*sum; /*各進程并行計算得到的部分和*/ /*將部分和累加得到所有矩形的面積,該面積和即為近似PI值*/ if (myid != 0) MPI_Send(&mypi,1,MPI_DOUBLE,0,myid,MPI_COMM_WORLD); else pi=0.0;pi=pi+mypi;42 for (j=1;jnumprocs;j+) MPI_Recv(&mypi,1,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

提交評論