版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、MPI分布內(nèi)存并行程序開發(fā) 第一章并行計(jì)算概述2 為什麼要采用并行計(jì)算?串行程序速度提升緩慢可以加快速度更短的時間內(nèi)解決相同的問題;相同的時間內(nèi)解決更多更復(fù)雜的問題可以加大規(guī)模計(jì)算更大規(guī)模的問題3 并行計(jì)算設(shè)計(jì)的分類 共享內(nèi)存ccNUMA; SMP 分布式內(nèi)存MPP; Cluster4 并行化分解方法任務(wù)分解多任務(wù)并發(fā)執(zhí)行功能分解分解被執(zhí)行的計(jì)算區(qū)域分解分解被執(zhí)行的數(shù)據(jù)6 分布內(nèi)存并行方式任務(wù)并行不同參數(shù)的大量工況計(jì)算區(qū)域分解并行大規(guī)模多節(jié)點(diǎn)分塊并行計(jì)算7 MPI的歷史MPI初稿:美國并行計(jì)算中心工作會議(92年4月)MPI-1公布:第一屆MPI大會(93年1月);MPI標(biāo)準(zhǔn)正式發(fā)布:1994
2、年5月;MPI-2發(fā)布:MPI論壇(97年)。9MPICH:最重要的MPI實(shí)現(xiàn)(/mpi/ mpich),與MPI-1規(guī)范同步發(fā)展的版本,支持部分MPI-2的特征如動態(tài)生成進(jìn)程等。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的實(shí)現(xiàn)10 第三章 MPI編程11 MPI為程序員提供一個并行環(huán)境庫,程序
3、員通過調(diào)用MPI的庫程序來達(dá)到程序員所要達(dá)到的并行目的,可以只使用其中的6個最基本的函數(shù)就能編寫一個完整的MPI程序去求解很多問題。這6個基本函數(shù),包括啟動和結(jié)束MPI環(huán)境,識別進(jìn)程以及發(fā)送和接收消息:MPI_INIT: 啟動MPI環(huán)境MPI_COMM_SIZE: 確定進(jìn)程數(shù)MPI_COMM_RANK: 確定自己的進(jìn)程標(biāo)識符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個進(jìn)程運(yùn)行,0號進(jìn)程發(fā)送,1號進(jìn)程接受并打印字符串17
7、進(jìn)程號(rank)在一個通信因子中,每個進(jìn)程都有一個唯一的整數(shù)標(biāo)識符,稱作“進(jìn)程ID”,進(jìn)程號是從0開始的連續(xù)整數(shù)。if (rank =0) 第0進(jìn)程運(yùn)行的程序段 else if(rank = 1) 第1進(jìn)程運(yùn)行的程序段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運(yùn)行環(huán)境。必須調(diào)用;首先調(diào)用;調(diào)用
8、一次。MPI_Init (*argc,*argv) 。每個進(jìn)程都有一個參數(shù)表。22 MPI_Comm_size()該函數(shù)返回與該組通信因子相關(guān)的進(jìn)程數(shù),顯然這里的通訊因子必須是組內(nèi)通訊因子。MPI_Comm_size (comm,*size) 23 MPI_Comm_rank()該函數(shù)返回該進(jìn)程在指定通信因子中的進(jìn)程號(0 進(jìn)程數(shù)-1),一個進(jìn)程在不同通信因子中的進(jìn)程號可能不同:MPI_Comm_rank (comm,*rank) 24 MPI_Recv()該函數(shù)從指定的進(jìn)程source接收消息,并且該消息的數(shù)據(jù)類型和消息標(biāo)識和本接收進(jìn)程指定的數(shù)據(jù)類型和消息標(biāo)識相一致,收到的消息所包含的數(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),用戶必須保證在進(jìn)程調(diào)用MPI_Finalize之前把與完成進(jìn)程有關(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ù)的值為用戶實(shí)際傳遞的消息長度。30 數(shù)據(jù)類型(type)MP
10、I定義了一些缺省的數(shù)據(jù)類型,用戶也可以根據(jù)需要建立自己的數(shù)據(jù)類型31續(xù)上頁32 目的地 (dest)發(fā)送進(jìn)程指定的接收該消息的目的進(jìn)程,也就是接收進(jìn)程的進(jìn)程號(注意組間通訊的情況)。33 源 (source)接收進(jìn)程指定的發(fā)送該消息的源進(jìn)程,也就是發(fā)送進(jìn)程的進(jìn)程號。如果該值為MPI_ANY_SOURCE表示接收任意源進(jìn)程發(fā)來的消息。34 標(biāo)識符(tag)由程序員指定地為標(biāo)識一個消息的唯一非負(fù)整數(shù)值(0-32767),發(fā)送操作和接收操作的標(biāo)識符一定要匹配,但對于接收操作來說,如果tag指定為MPI_ANY_TAG則可與任何發(fā)送操作的tag相匹配。35 通信因子(comm)包含源與目的進(jìn)程的一組上
11、下文相關(guān)的進(jìn)程集合,除非用戶自己定義(創(chuàng)建)了新的通信因子,否則一般使用系統(tǒng)預(yù)先定義的全局通信因子MPI_COMM_WORLD。36 狀態(tài)(status)對于接收操作,包含了接收消息的源進(jìn)程(source)和消息的標(biāo)識符(tag)。在FORTRAN程序中,這個參數(shù)是包含MPI_STATUS_SIZE個整數(shù)的數(shù)組,status(MPI_SOURCE)、status(MPI_TAG)和status(MPI_ERROR)分別表示數(shù)據(jù)的進(jìn)程標(biāo)識、發(fā)送數(shù)據(jù)使用tag 標(biāo)識和接收操作返回的錯誤代碼。相當(dāng)于一種在接受方對消息的監(jiān)測機(jī)制,并且以其為依據(jù)對消息作出不同的處理(當(dāng)用通配符接受消息時)。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、 的計(jì)算 #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)/* 每一個進(jìn)程計(jì)算一部分矩形的面積,若進(jìn)程總數(shù)numprocs為4, 將 0-1區(qū)間劃分為100個矩形,則各個進(jìn)程分別計(jì)算矩形塊 0進(jìn)程 1,5,9,13,97 1進(jìn)程 2,6,10,14,98 2進(jìn)程 3,7,11,15,99 3進(jìn)程 4,8,12,16,100 */41 x=h*(double)i-0.5); sum+=f(x); mypi=h*sum; /*各進(jìn)程并行計(jì)算得到的部分和*/ /*將部分和累加得到所有矩形的面積,該面積和即為近似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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年管涵施工與建筑廢棄物處理合同3篇
- 二零二五年度集裝箱購置與綠色港口運(yùn)營合同3篇
- 二零二五年度集資房項(xiàng)目審計(jì)與財務(wù)報表編制合同3篇
- 2024年海南經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試歷年參考題庫含答案解析
- 二零二五年戶外廣告安裝工程量清單及結(jié)算合同3篇
- 吉林省農(nóng)安縣九年級物理全冊182電功率課件新版新人教版
- 2024年河南質(zhì)量工程職業(yè)學(xué)院高職單招職業(yè)技能測驗(yàn)歷年參考題庫(頻考版)含答案解析
- 2024年河南工業(yè)和信息化職業(yè)學(xué)院高職單招職業(yè)技能測驗(yàn)歷年參考題庫(頻考版)含答案解析
- 2024年河北政法職業(yè)學(xué)院高職單招職業(yè)技能測驗(yàn)歷年參考題庫(頻考版)含答案解析
- 鐵路貨車主要輪對型式和基本尺寸
- 譯林版南京學(xué)校四年級英語上冊第一單元第1課時storytime導(dǎo)學(xué)單
- 理正深基坑之鋼板樁受力計(jì)算
- 員工入職培訓(xùn)
- 鋪種草皮施工方案(推薦文檔)
- 10KV高壓環(huán)網(wǎng)柜(交接)試驗(yàn)
- 綜合單價的確定
- 未來水電工程建設(shè)抽水蓄能電站BIM項(xiàng)目解決方案
- 張可填充顏色的中國地圖與世界地圖課件
- 9以內(nèi)除法口算(81題)
- 第十二章機(jī)翼理論
評論
0/150
提交評論