MPI并行編程【技術(shù)專(zhuān)攻】
《MPI并行編程【技術(shù)專(zhuān)攻】》由會(huì)員分享,可在線閱讀,更多相關(guān)《MPI并行編程【技術(shù)專(zhuān)攻】(35頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、MPI并行編程1專(zhuān)業(yè)課大綱 MPI并行編程簡(jiǎn)介 Linux下MPI并行編程環(huán)境的搭建 MPI并行程序設(shè)計(jì) 實(shí)例分析:矩陣乘法2專(zhuān)業(yè)課1.1 什么是并行計(jì)算進(jìn)程進(jìn)程 1 發(fā)送信息發(fā)送信息進(jìn)程進(jìn)程 2 接收信息接收信息傳統(tǒng)的串行計(jì)算串行計(jì)算,分為“指令”和“數(shù)據(jù)”兩個(gè)部分,并在程序執(zhí)行時(shí)“獨(dú)立地申請(qǐng)和占有”內(nèi)存空間,且所有計(jì)算均局限于該內(nèi)存空間。并行計(jì)算并行計(jì)算將進(jìn)程相對(duì)獨(dú)立的分配于不同的節(jié)點(diǎn)上,由各自獨(dú)立的操作系統(tǒng)調(diào)度,享有獨(dú)立的CPU和內(nèi)存資源(內(nèi)存可以共享);進(jìn)程間相互信息交換通過(guò)消息傳遞;進(jìn)程進(jìn)程 1 進(jìn)程進(jìn)程 2 3專(zhuān)業(yè)課1.2 并行計(jì)算在電力行業(yè)的研究和應(yīng)用中國(guó)電科院發(fā)明專(zhuān)利“電力系統(tǒng)
2、潮流潮流分網(wǎng)并行計(jì)算方法”獲得中國(guó)專(zhuān)利金獎(jiǎng)(發(fā)明人:周孝信、吳中習(xí)、郭劍、李亞樓、田芳)2010.11 大規(guī)模電網(wǎng)并行潮流潮流算法2008電力系統(tǒng)狀態(tài)估計(jì)狀態(tài)估計(jì)的分布式并行處理2003電力系統(tǒng)最優(yōu)潮流潮流的分布式并行算法2003電網(wǎng)在線安全分析安全分析的并行處理方法 1996基于GPU的電力系統(tǒng)并行潮流潮流計(jì)算的實(shí)現(xiàn) 2010基于MPI和PQ分解法的電力系統(tǒng)潮流潮流并行算法的研究2005 基于并行計(jì)算的電力系統(tǒng)風(fēng)險(xiǎn)評(píng)估風(fēng)險(xiǎn)評(píng)估2009基于并行協(xié)調(diào)算法的電力系統(tǒng)狀態(tài)估計(jì)狀態(tài)估計(jì)2007基于改進(jìn)并行遺傳算法的電網(wǎng)狀態(tài)估計(jì)狀態(tài)估計(jì)2006應(yīng)用網(wǎng)格平臺(tái)的潮流潮流計(jì)算并行算法2009基于MPI電力系統(tǒng)
3、潮流潮流PQ分解法的并行算法20082008電網(wǎng)控制中心新技術(shù)綜述20094專(zhuān)業(yè)課1.3 并行編程標(biāo)準(zhǔn) 多線程庫(kù)標(biāo)準(zhǔn)多線程庫(kù)標(biāo)準(zhǔn) Win32 API.POSIX threads.編譯制導(dǎo)標(biāo)準(zhǔn)編譯制導(dǎo)標(biāo)準(zhǔn) OpenMP 可移植共享存儲(chǔ)并行編程標(biāo)準(zhǔn).消息傳遞庫(kù)標(biāo)準(zhǔn)消息傳遞庫(kù)標(biāo)準(zhǔn) MPI PVM5專(zhuān)業(yè)課1.4 1.4 M Massage assage P Passing assing I Interface(MPI)nterface(MPI)MPI 是由MPI 委員會(huì)(MPI Forum)在1992年到1994年舉行的一系列會(huì)議上逐漸產(chǎn)生的一個(gè)消息傳遞標(biāo)準(zhǔn)(http:/www.mpi-forum.o
4、rg/)。發(fā)展MPI 1.1:1995 MPICH:是MPI最流行的非專(zhuān)利實(shí)現(xiàn),由Argonne國(guó)家實(shí)驗(yàn)室和密西西比州立大學(xué)聯(lián)合開(kāi)發(fā),具有更好的可移植性.MPI 1.2(1997).MPI 2.2(2009-09)6專(zhuān)業(yè)課MPI是一個(gè)庫(kù),而不是一門(mén)語(yǔ)言是一個(gè)庫(kù),而不是一門(mén)語(yǔ)言 這個(gè)標(biāo)準(zhǔn)支持 C 語(yǔ)言和 FORTRAN 語(yǔ)言 MPI庫(kù)可以被FORTRAN77/C/Fortran90/C+調(diào)用 它遵守所有對(duì)庫(kù)函數(shù)/過(guò)程的調(diào)用規(guī)則,和一般的函數(shù)/過(guò)程沒(méi)有什么區(qū)別7專(zhuān)業(yè)課MPI是一種標(biāo)準(zhǔn)或規(guī)范,而不是具體實(shí)現(xiàn)是一種標(biāo)準(zhǔn)或規(guī)范,而不是具體實(shí)現(xiàn)實(shí)現(xiàn):Mpich、OpenMPI、Chimp、Lam MPIC
5、H的實(shí)現(xiàn)int MPI_Init(int*argc,char*argv)static const char FCNAME=MPI_Init;int mpi_errno=MPI_SUCCESS;int rc;。OpenMPI的實(shí)現(xiàn)int MPI_Init(int*argc,char*argv)int err;int provided;char*env;int required=MPI_THREAD_SINGLE;。8專(zhuān)業(yè)課MPI是一種消息傳遞編程模型是一種消息傳遞編程模型 節(jié)點(diǎn)間基于節(jié)點(diǎn)間基于消息消息進(jìn)行通訊進(jìn)行通訊9專(zhuān)業(yè)課2.1 MPICH的實(shí)驗(yàn)環(huán)境實(shí)驗(yàn)環(huán)境:RedHat 9.0+Vmware
6、 6.0+MPICH 2-1.0Fedora 14+Dell Blade*1(主節(jié)點(diǎn))+Dell PC*2(從節(jié)點(diǎn))+MPICH 2-1.2.1p110專(zhuān)業(yè)課2.2 MPICH的搭建步驟搭建步驟1-掛載文件系統(tǒng)實(shí)現(xiàn)分節(jié)點(diǎn)內(nèi)容與主節(jié)點(diǎn)內(nèi)容的同步更新和自動(dòng)目錄對(duì)應(yīng)2-配置公鑰認(rèn)證實(shí)現(xiàn)MPI節(jié)點(diǎn)間用戶的無(wú)密碼訪問(wèn)各節(jié)點(diǎn)間進(jìn)行消息傳遞3-至NFS目錄4-修改各種文件5-試運(yùn)行example文件夾中的例子11專(zhuān)業(yè)課3.1 基于MPI的Hello World(C)#include#include mpi.h“main(int argc,char*argv)MPI_Init(&argc,&argv);pri
7、ntf(Hello,world!n);MPI_Finalize();12專(zhuān)業(yè)課3.2 MPI程序的的編譯與運(yùn)行 mpif77 hello.f 或 mpicc hello.c 默認(rèn)生成a.out的可執(zhí)行代碼.(mpicc hello.c)mpif77 o hello hello.f 或 mpicc o hello hello.c 生成hello的可執(zhí)行代碼.mpirun np 4 a.out mpirun np 4 hello 4 指定np的實(shí)參,表示進(jìn)程數(shù),由用戶指定.a.out/hello 要運(yùn)行的MPI并行程序.%小寫(xiě)o%np:The Number of Process.13專(zhuān)業(yè)課3.3
8、運(yùn)行MPI程序 dairnode01$mpicc-o hello hello.c dairnode01$./hello ()0 Aborting program!Could not create p4 procgroup.Possible missing fileor program started without mpirun.dairnode01$mpirun-np 4 hello ()Hello World!Hello World!Hello World!Hello World!dairnode01$計(jì)算機(jī)打印字符我們輸入的命令14專(zhuān)業(yè)課3.4 Hello World是如何被執(zhí)行的?SP
9、MD:Single Program Multiple Data(SPMD):#include mpi.h#include main(int argc,char*argv)MPI_Init(&argc,&argv);printf(Hello,world!n);MPI_Finalize();#include mpi.h#include main(int argc,char*argv)MPI_Init(&argc,&argv);printf(Hello,world!n);MPI_Finalize();#include mpi.h#include main(int argc,char*argv)MPI
10、_Init(&argc,&argv);printf(Hello,world!n);MPI_Finalize();#include mpi.h#include main(int argc,char*argv)MPI_Init(&argc,&argv);printf(Hello,world!n);MPI_Finalize();Hello World!Hello World!Hello World!Hello World!#include mpi.h#include main(int argc,char*argv)MPI_Init(&argc,&argv);printf(Hello,world!n)
11、;MPI_Finalize();15專(zhuān)業(yè)課MPI程序的執(zhí)行過(guò)程16專(zhuān)業(yè)課3.5 進(jìn)一步的MPI并行程序 在寫(xiě)MPI程序時(shí),我們常需要知道以下兩個(gè)問(wèn)題的答案:任務(wù)由任務(wù)由多少多少個(gè)進(jìn)程來(lái)進(jìn)行并行計(jì)算?個(gè)進(jìn)程來(lái)進(jìn)行并行計(jì)算?(多少個(gè)節(jié)(多少個(gè)節(jié)目)目)我是我是哪一個(gè)哪一個(gè)進(jìn)程進(jìn)程?(節(jié)目名程)好比是晚會(huì)導(dǎo)演安排節(jié)目次序,每個(gè)節(jié)目拿到的是相同的節(jié)目單。對(duì)號(hào)入座 17專(zhuān)業(yè)課3.5.1 MPI相關(guān)接口 MPI 提供了下列函數(shù)來(lái)回答這些問(wèn)題:用用MPI_Comm_size 獲得進(jìn)程個(gè)數(shù) p int MPI_Comm_size(MPI_Comm comm,int*size);用用MPI_Comm_rank
12、獲得進(jìn)程的一個(gè)叫rank的值,該 rank值為0到p-1間的整數(shù),相當(dāng)于進(jìn)程的IDint MPI_Comm_rank(MPI_Comm comm,int*rank);18專(zhuān)業(yè)課3.5.2 更新的Hello World(c)#include#include mpi.hmain(int argc,char*argv)int myid,numprocs;MPI_Init(&argc,&argv);MPI_Comm_rank(MPI_COMM_WORLD,&myid);MPI_Comm_size(MPI_COMM_WORLD,&numprocs);printf(“I am%d of%dn,myid,n
13、umprocs);MPI_Finalize();19專(zhuān)業(yè)課運(yùn)行結(jié)果 dairnode01$mpicc o hello1 hello1.c dairnode01$mpirun-np 4 hello1I am 0 of 4I am 1 of 4I am 2 of 4I am 3 of 4 dairnode01$計(jì)算機(jī)打印字符我們輸入的命令20專(zhuān)業(yè)課3.6.1 MPI消息 消息:指在進(jìn)程間進(jìn)行的一次數(shù)據(jù)交換。一個(gè)消息由源地址、數(shù)據(jù)個(gè)數(shù)、數(shù)據(jù)類(lèi)型、目標(biāo)地址、消息標(biāo)識(shí)和通信體構(gòu)成。消息包括信封和數(shù)據(jù)兩個(gè)部分,信封指出了發(fā)送或接收消息的對(duì)象及相關(guān)信息,而數(shù)據(jù)是本消息將要傳遞的內(nèi)容。MPI_Send(buf
14、,count,datatype,dest,tag,comm)消息數(shù)據(jù)消息信封21專(zhuān)業(yè)課3.6.2 消息傳遞過(guò)程22專(zhuān)業(yè)課3.6.3 MPI點(diǎn)對(duì)點(diǎn)通信函數(shù) MPI_Send (void *buf,int count,MPI_Datatype datatype,int dest,int tag,MPI_Comm comm)被發(fā)送消息的地址被發(fā)送消息的地址被發(fā)送數(shù)據(jù)項(xiàng)的個(gè)數(shù)被發(fā)送數(shù)據(jù)項(xiàng)的個(gè)數(shù)消息數(shù)據(jù)的類(lèi)型消息數(shù)據(jù)的類(lèi)型目標(biāo)進(jìn)程的序號(hào)目標(biāo)進(jìn)程的序號(hào)消息標(biāo)志消息標(biāo)志通信體通信體23專(zhuān)業(yè)課3.6.3 MPI點(diǎn)對(duì)點(diǎn)通信函數(shù) MPI_Recv (void *buf,int count,MPI_Datatype
15、 datatype,int source,int tag,MPI_Comm comm,MPI_Status *status)被接收消息的地址被接收消息的地址被接收數(shù)據(jù)項(xiàng)的個(gè)數(shù)被接收數(shù)據(jù)項(xiàng)的個(gè)數(shù)消息數(shù)據(jù)的類(lèi)型消息數(shù)據(jù)的類(lèi)型源進(jìn)程的序號(hào)源進(jìn)程的序號(hào)消息標(biāo)志消息標(biāo)志通信體通信體返回的通信狀態(tài)返回的通信狀態(tài)24專(zhuān)業(yè)課3.6.4 加入消息傳遞的HelloWorld(c)#include#include mpi.h“main(int argc,char*argv)int numprocs;/*進(jìn)程數(shù),該變量為各處理器中的同名變量,存儲(chǔ)是分布的*/int myid;/*我的進(jìn)程ID,存儲(chǔ)也是分布的*/MPI
16、_Status status;/*消息接收狀態(tài)變量,存儲(chǔ)也是分布的*/char message100;/*消息buffer,存儲(chǔ)也是分布的*/*初始化MPI*/MPI_Init(&argc,&argv);/*該函數(shù)被各進(jìn)程各調(diào)用一次,得到自己的進(jìn)程rank值*/MPI_Comm_rank(MPI_COMM_WORLD,&myid);/*該函數(shù)被各進(jìn)程各調(diào)用一次,得到進(jìn)程數(shù)*/MPI_Comm_size(MPI_COMM_WORLD,&numprocs);25專(zhuān)業(yè)課3.6.4 加入消息傳遞的HelloWorld(c)(續(xù))if(myid!=0)/*建立消息*/sprintf(message,“H
17、elloWorld from process%d!,myid);/*發(fā)送長(zhǎng)度取strlen(message)+1,使0也一同發(fā)送出去*/MPI_Send(message,strlen(message)+1,MPI_CHAR,0,99,MPI_COMM_WORLD);else/*my_rank=0*/for(source=1;source numprocs;source+)MPI_Recv(message,100,MPI_CHAR,source,99,MPI_COMM_WORLD,&status);printf(“%sn,message);/*關(guān)閉MPI,標(biāo)志并行代碼段的結(jié)束*/MPI_Fina
18、lize();/*End main*/26專(zhuān)業(yè)課進(jìn)程 0進(jìn)程 0rank=0rank=0.Send()Send().進(jìn)程 1進(jìn)程 1rank=1rank=1進(jìn)程 2進(jìn)程 2rank=2rank=2進(jìn)程 3進(jìn)程 3rank=3rank=3.Send()Send().Send()Send().Recv()Recv().問(wèn)題:進(jìn)程1、2、3誰(shuí)先向進(jìn)程0發(fā)送消息?27專(zhuān)業(yè)課運(yùn)行結(jié)果 dairnode01$mpicc o hello2 hello2.c dairnode01$mpirun-np 4 hello2 HelloWorld from process 1!HelloWorld from proc
19、ess 2!HelloWorld from process 3!dairnode01$計(jì)算機(jī)打印字符我們輸入的命令28專(zhuān)業(yè)課3.7 最基本的MPIMPI調(diào)用借口的總數(shù)雖然龐大(幾百個(gè)),但根據(jù)實(shí)際編寫(xiě)MPI的經(jīng)驗(yàn),常用的MPI調(diào)用的個(gè)數(shù)確實(shí)有限。下面是6個(gè)最基本的MPI函數(shù)。1.MPI_Init();2.MPI_Comm_size();3.MPI_Comm_rank();4.MPI_Send();5.MPI_Recv();6.MPI_Finalize();MPI_Init();并行代碼;MPI_Fainalize();只能有串行代碼;29專(zhuān)業(yè)課3.8 MPI程序的總體結(jié)構(gòu) C語(yǔ)言MPI程序的典
20、型結(jié)構(gòu):#include“mpi.h”int main(int argc,char*argv)int myid,numprocs;int namelen;char processor_nameMPI_MAX_PROCESSOR_NAME;MPI_Init(&argc,&argv);MPI_Comm_rank(MPI_COMM_WORLD,&myid);MPI_Comm_size(MPI_COMM_WORLD,&numprocs);MPI_Get_processor_name(processor_name,&namelen);MPI_Finalize();頭文件頭文件主程序主程序相關(guān)變量聲明相關(guān)
21、變量聲明MPI程序開(kāi)始程序開(kāi)始MPI程序執(zhí)行部分程序執(zhí)行部分MPI程序結(jié)束程序結(jié)束30專(zhuān)業(yè)課3.9 MPI程序流程圖 MPI_Init()MPI_Comm_rank()MPI_Comm_size()建立新的通信器、定義新的數(shù)據(jù)類(lèi)型和進(jìn)程拓?fù)浣Y(jié)構(gòu)應(yīng)用程序?qū)嶓w:計(jì)算控制程序體;進(jìn)程間通信;MPI_Finalize()退出MPI系統(tǒng)程序參數(shù)說(shuō)明End31專(zhuān)業(yè)課3.10 MPI的數(shù)據(jù)類(lèi)型MPI(與與 C 綁定綁定)C MPI_CHAR signed char MPI_DOUBLE double MPI_FLOAT float MPI_INT int MPI_LONG long MPI_LONG_DOUBLE long double MPI_SHORT short MPI_UNSIGNED_CHAR unsigned char MPI_UNSIGNED unsigned int MPI_UNSIGNED_LONG unsigned long MPI_UNSIGNED_SHORT unsigned short32專(zhuān)業(yè)課4.1 實(shí)例分析:矩陣向量相乘)1,1,0(10mibaCnjjijip0p1p233專(zhuān)業(yè)課4.2 串行代碼vs.并行代碼34專(zhuān)業(yè)課謝謝!35專(zhuān)業(yè)課
- 溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 第七章-透射電子顯微鏡
- 群落的結(jié)構(gòu)(課件)
- 焊接基礎(chǔ)知識(shí)
- 水文地質(zhì)學(xué)課件
- 某公司員工工傷安全管理規(guī)定
- 消防培訓(xùn)課件:安全檢修(要點(diǎn))
- 某公司安全生產(chǎn)考核與獎(jiǎng)懲辦法范文
- 安全作業(yè)活動(dòng)安全排查表
- 某公司危險(xiǎn)源安全辨識(shí)、分類(lèi)和風(fēng)險(xiǎn)評(píng)價(jià)、分級(jí)辦法
- 某公司消防安全常識(shí)培訓(xùn)資料
- 安全培訓(xùn)資料:危險(xiǎn)化學(xué)品的類(lèi)別
- 中小學(xué)寒假學(xué)習(xí)計(jì)劃快樂(lè)度寒假充實(shí)促成長(zhǎng)
- 紅色插畫(huà)風(fēng)輸血相關(guān)知識(shí)培訓(xùn)臨床輸血流程常見(jiàn)輸血不良反應(yīng)
- 14.應(yīng)急救援隊(duì)伍訓(xùn)練記錄
- 某公司各部門(mén)及人員安全生產(chǎn)責(zé)任制