中科院計(jì)算流體力學(xué)最新講義CFD2011-第13講-MPI并行程序設(shè)計(jì)初步1.ppt_第1頁(yè)
中科院計(jì)算流體力學(xué)最新講義CFD2011-第13講-MPI并行程序設(shè)計(jì)初步1.ppt_第2頁(yè)
中科院計(jì)算流體力學(xué)最新講義CFD2011-第13講-MPI并行程序設(shè)計(jì)初步1.ppt_第3頁(yè)
中科院計(jì)算流體力學(xué)最新講義CFD2011-第13講-MPI并行程序設(shè)計(jì)初步1.ppt_第4頁(yè)
中科院計(jì)算流體力學(xué)最新講義CFD2011-第13講-MPI并行程序設(shè)計(jì)初步1.ppt_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、計(jì)算流體力學(xué)講義2011 第13講 MPI并行程序設(shè)計(jì) (1) 李新亮 ;力學(xué)所主樓219; 82543801,知識(shí)點(diǎn): MPI程序的運(yùn)行機(jī)制 拷貝N份,給每個(gè)進(jìn)程一份 MPI的基本庫(kù)函數(shù)6個(gè)庫(kù)函數(shù) “對(duì)等式”編程方法 站在單個(gè)進(jìn)程的角度思考,1,講義、課件上傳至 (流體中文網(wǎng)) - “流體論壇” -“ CFD基礎(chǔ)理論 ”,Copyright by Li Xinliang,Copyright by Li Xinliang,2,Part 1: 基本概念及MPI并行編程入門(mén),并行計(jì)算基本概念 MPI并行編程入門(mén) 1)MPI 簡(jiǎn)介 2)MPI 的基本函數(shù)及消息傳遞 3)MPI的常用函數(shù) 4)對(duì)等式編

2、程思想的舉例說(shuō)明 全收集、矩陣相乘,一、 基本概念,并行計(jì)算機(jī)簡(jiǎn)介 大規(guī)模并行計(jì)算超級(jí)計(jì)算(Supercomputing)/高性能計(jì)算 (HPC) 為何需要超級(jí)計(jì)算? 應(yīng)用領(lǐng)域的巨大計(jì)算需求 單CPU的計(jì)算能力有限,應(yīng)用對(duì)計(jì)算資源的需求,3,Copyright by Li Xinliang, CFD的計(jì)算資源依賴(lài)性 計(jì)算量大流動(dòng)的多尺度性 (湍流) 大飛機(jī)全部流動(dòng)細(xì)節(jié)完全分辨: 最小尺度:mm mm 量級(jí); 計(jì)算網(wǎng)格: 1012-1016 ; 需計(jì)算量: 1020-30 ; 工程需求: 8個(gè)小時(shí)之內(nèi)完成計(jì)算 預(yù)計(jì): LES: 2045年; DNS: 2080年,最大尺度 m,mm,幾種我們常見(jiàn)

3、的并行計(jì)算機(jī),并行計(jì)算機(jī)體系結(jié)構(gòu),5,Copyright by Li Xinliang,內(nèi)存帶寬瓶頸,訪存沖突機(jī)制控制復(fù)雜,虛擬共享存儲(chǔ)“NUMA” 訪存沖突機(jī)制控制復(fù)雜,克服了訪存沖突及內(nèi)存瓶頸,訪存的局部性 對(duì)網(wǎng)絡(luò)要求不嚴(yán),6,Copyright by Li Xinliang,低價(jià)格 可擴(kuò)展,自行搭建的簡(jiǎn)易機(jī)群,7,Copyright by Li Xinliang,并行機(jī)群: 搭建簡(jiǎn)單 簡(jiǎn)單的局域網(wǎng),并行機(jī)群 = 局域網(wǎng),早期 作者搭建的簡(jiǎn)易機(jī)群,機(jī)群軟件:Linux/Windows; 套件OSCAR; MPICH.NT, ,我國(guó)最早搭建的機(jī)群: LSEC 張林波 搭建的32節(jié)點(diǎn)機(jī),Cop

4、yright by Li Xinliang,8,美洲虎/1700萬(wàn)億次,曙光5000A/160萬(wàn)億次,天河1號(hào) 千萬(wàn)億次 CPU+GPU混合系統(tǒng),聯(lián)想深騰7000/106萬(wàn)億次,單精度千萬(wàn)億次的 GPU系統(tǒng) Mole-xx,頂級(jí)的超級(jí)計(jì)算機(jī),目標(biāo): 每秒 1摩爾次浮點(diǎn)運(yùn)算 (1 mole=6.02*1023),Copyright by Li Xinliang,9,Top5 超級(jí)計(jì)算機(jī) (2010-11),2. 并行程序設(shè)計(jì)工具,1) 共享存儲(chǔ)式 自動(dòng)并行(并行編譯器) Intel Fortran/C 編譯器 ifc aa.for -parallel 編譯目標(biāo): 多線(xiàn)程程序 OpenMP,編譯指

5、示符: !omp parallel ,10,Copyright by Li Xinliang,Cluster 系統(tǒng),2) 分布存儲(chǔ)式 HPF (High-Performance Fortran) 基于數(shù)據(jù)并行,程序改動(dòng)較小 效率較低 PVM (Parallel Virtual Machine) MPI (Message Passing Interface) 基于消息傳遞 效率較高,11,Copyright by Li Xinliang,MPI 的編譯、運(yùn)行環(huán)境 1) 并行計(jì)算機(jī) (力學(xué)所機(jī)群、深騰7000,曙光5000A) 編譯: mpif90 / mpif77/mpicc f90/f77 -

6、I/usr/local/mpi/include -L/usr/local/mpi/lib -lm -lmpi 運(yùn)行: mpirun / bsub 2)MPI for NT (Windows 2000,XP) 編譯環(huán)境:Visual Fortran/ MS Develop Studio 設(shè)置:頭文件路徑、連接路徑 運(yùn)行: mpirun,二、MPI并行編程入門(mén) 1. 簡(jiǎn)介,12,Copyright by Li Xinliang,Copyright by Li Xinliang,13,設(shè)置Windows下的MPI環(huán)境,Step 1: 下載并安裝mpich.nt.1.2.5安裝包; Step 2: 更

7、改Visual Fortran的環(huán)境設(shè)置,添加MPICH的 include 及l(fā)ib 路徑 1) Tools-options- Directories; 在“show directories for:” 欄目選擇 “include files”; 在“Directories:” 下的對(duì)話(huà)框里面添加MPICH include 的路徑,例如 “C:/Porgram files/mpich/SDK/include” (根據(jù)安裝的具體位置而定) 在“show directories for:” 的欄目選擇“Library files”, 在 “Directories:”下的對(duì)話(huà)框里面添加 MPICH

8、Lib 的路徑, 例如 “C:/Porgram files/mpich/SDK/lib” 2) 程序編譯時(shí),請(qǐng)把mpich.lib 添加在鏈接庫(kù)里。 project-settings-link ; 在 objcet/Library modules 下的對(duì)話(huà)框里面添加 mpich.lib (例如 “kernel32.lib” 變更為 “kernel32.lib ; mpich.lib”) Step3: 編譯程序,生成可執(zhí)行文件,Copyright by Li Xinliang,14,Step 4: 利用mpirun 運(yùn)行程序。 (該工具在Windows桌面的 “開(kāi)始- 程序- mpich - m

9、pd - MPIRun”) 在“Application:”對(duì)話(huà)框里面選擇剛編譯生成的可執(zhí)行文件。 在“Number of Processes” 對(duì)話(huà)框里面選擇運(yùn)行運(yùn)行的進(jìn)程數(shù) (即所謂“CPU個(gè)數(shù)”)。 在“Advanced options ” 對(duì)話(huà)框里面選擇 “Always prompt for password ”。 MPIRun 運(yùn)行時(shí)會(huì)要求用戶(hù)輸入計(jì)算機(jī)的用戶(hù)名和密碼。 點(diǎn)擊“Run”即可運(yùn)行 (需要輸入計(jì)算機(jī)的用戶(hù)名和密碼)。,注意: 如果程序?yàn)閒90 程序,請(qǐng)修改mpif.h 。將行首的注釋符 “C” 替換為“!”, 否則編譯會(huì)出錯(cuò)。(mpif.h 在安裝路徑的include 目錄

10、下,通常在 C:/Porgram files/mpich/SDK/include里面) 通常MPIRun需要以計(jì)算機(jī)管理員的身份運(yùn)行,需要對(duì)計(jì)算機(jī)設(shè)置用戶(hù)名和密碼。如果計(jì)算機(jī)沒(méi)有設(shè)置密碼,則需要在控制面板中設(shè)置。 些防火墻及殺毒軟件會(huì)阻止MPIRun的運(yùn)行,如出現(xiàn)問(wèn)題需要關(guān)閉這些防火墻及殺毒軟件。,MPI 程序的運(yùn)行原理: 服務(wù)器(前端機(jī))編譯 可執(zhí)行代碼復(fù)制 N 份,每個(gè)節(jié)點(diǎn)運(yùn)行一份 調(diào)用MPI庫(kù)函數(shù) 得到每個(gè)節(jié)點(diǎn)號(hào) my_id 根據(jù)my_id 不同,程序執(zhí)行情況不同 調(diào)用MPI 庫(kù)函數(shù)進(jìn)行通訊,MPI 編程的基本思想: 主從式,對(duì)等式,重要!,15,Copyright by Li Xinl

11、iang,重點(diǎn):對(duì)等式程序設(shè)計(jì),Copyright by Li Xinliang,16,a.exe,對(duì)等式 設(shè)計(jì),“對(duì)等式”程序設(shè)計(jì)思想,如果我是其中一個(gè)進(jìn)程; 我應(yīng)當(dāng)做 完成我需要完成的任務(wù),站在其中一個(gè)進(jìn)程的角度思考,一個(gè)簡(jiǎn)單的MPI程序 hello.f90 include mpif.h integer myid,numprocs,ierr call MPI_Init(ierr) callMPI_Comm_rank(MPI_COMM_WORLD,myid,ierr) call MPI_Comm_size(MPI_COMM_WORLD,numprocs,ierr) Print*, Hello

12、 World! my id is :,myid ! 添加自己的程序 ! call MPI_Finalize(ierr) end,17,Copyright by Li Xinliang,運(yùn)行結(jié)果:,18,Copyright by Li Xinliang,基本MPI函數(shù) (MPI 子集) 1) MPI初始化 call MPI_Init(ierr) (out) Integer: ierr 2) MPI結(jié)束 call MPI_Finalize(ierr) (out) Integer: ierr,19,Copyright by Li Xinliang,(in) : 輸入?yún)?shù); (out) : 輸出參數(shù);

13、,整數(shù),返回值非0表示出錯(cuò),3) 得到當(dāng)前進(jìn)程標(biāo)識(shí) callMPI_Comm_rank(MPI_COMM_WORLD,myid,ierr) (In) Integer: MPI_COMM_WORLD 為進(jìn)程所在的通信域 (Out) Integer: myid, ierr 4) 得到通信域包含的進(jìn)程數(shù) CallMPI_Comm_size(MPI_COMM_WORLD,numprocs,ierr) (In) Integer: MPI_COMM_WORLD (Out) Integer: numprocs,ierr,20,Copyright by Li Xinliang,進(jìn)程的ID號(hào) (從0開(kāi)始) 最重

14、要的參數(shù)!,MPI_COMM_WORLD: MPI預(yù)定義的通信域; 可換成創(chuàng)建的通信域Comm,基本概念: 通信域(通信子),0,1,2,3,4,5,6,7,8,9,10,11,0,1,2,3,4,5,0,1,2,3,4,5,MPI_COMM_WORLD,MPI_Comm_1,MPI_Comm_2,21,Copyright by Li Xinliang,把全班分成幾個(gè)組,執(zhí)行任務(wù)更方便,“班名”, 包含全班同學(xué) MPI 預(yù)定義,my_id “學(xué)號(hào)”,組的名字(編號(hào)),組內(nèi)編號(hào),MPI 消息傳遞函數(shù) 消息發(fā)送 MPI_Send(buf,count,datatype,dest,tag,comm,

15、ierr) MPI消息:數(shù)據(jù)描述+信封 數(shù)據(jù)描述:起始地址,數(shù)據(jù)個(gè)數(shù),數(shù)據(jù)類(lèi)型 信封: 源/目,標(biāo)簽,通信域,22,Copyright by Li Xinliang,buf: 數(shù)據(jù)起始地址 (Fortran : 變量名, C: 變量地址/指針) count: 數(shù)據(jù)數(shù)目 (以datatype為單位,必須連續(xù)),MPI_Send(buf,count,datatype,dest,tag,comm,ierr),23,Copyright by Li Xinliang,Datatype: 數(shù)據(jù)類(lèi)型 MPI_INTEGER, MPI_REAL, MPI_DOUBLE_PRECISION, MPI_COMPL

16、EX, MPI_LOGICAL, MPI_CHARACTER, MPI_BYTE, MPI_PACKED,Real*8 x(10) (給x 賦值) Call MPI_send( x(1), 10, MPI_double_precision, .),數(shù)據(jù)的首地址 (不是變量的值),10 個(gè)數(shù)據(jù)(不是10個(gè)字節(jié)),Fortran : 按地址傳送 : x(1) 或 x C: 按值傳送: 根進(jìn)程發(fā)送到所有進(jìn)程 if(myid .eq. 0) then A0(0)=A do id=1,Nproc-1 call MPI_Recv(A0(id),1,MPI_Real,id,99,MPI_Comm_World

17、,status,ierr) enddo else call MPI_Send(A,1,MPI_Real,0,.) endif if(myid .eq. 0) then do id=1,Nproc-1 call MPI_Send(A0,Nproc,MPI_Real,id, ) enddo else call MPI_Recv(A0,Nproc,MPI_Real,0,) endif,43,Copyright by Li Xinliang,“班長(zhǎng)”依次與所有同學(xué)通信,收集信息; 收集后依次通信,發(fā)放信息,負(fù)載不均衡 效率最低 可能會(huì)死鎖,方式2: 根進(jìn)程收集所有數(shù)據(jù); 根進(jìn)程廣播到所有進(jìn)程 if(m

18、yid .eq. 0) then A0(0)=A do id=1,Nproc-1 call MPI_Recv(A0(id),1,MPI_Real,id,99,MPI_Comm_World,status,ierr) enddo else call MPI_Send(A,1,MPI_Real,0,.) endif call MPI_Bcast(A0,Nproc,MPI_Real,0,MPI_Comm_world,ierr) 效率高于 (1) 是MPI_Allgather( )的原有的標(biāo)準(zhǔn)方式,44,Copyright by Li Xinliang,廣播的實(shí)現(xiàn)方式,“班長(zhǎng)”依次收集信息后,“廣播”給

19、全班,Copyright by Li Xinliang,45,1A,send to ID 0,0 1 2 3 N-1,1B,0 1 2 3 N-1,Step 1: “我” (my_id 進(jìn)程) 向my_id+1進(jìn)程發(fā)數(shù)據(jù); “我” 收my_id-1進(jìn)程發(fā)來(lái)的數(shù)據(jù),該步完成后: “我” (my_id 進(jìn)程)得到了my_id-1的數(shù)據(jù),全收集的實(shí)現(xiàn)圖解,方式3: 循環(huán)通信,Copyright by Li Xinliang,46,2A,send to ID 1,0 1 2 3 N-1,2B,0 1 2 3 N-1,Step 2: “我”向 my_id+2 進(jìn)程發(fā)數(shù)據(jù); “我”收 my_id-2進(jìn)程發(fā)

20、來(lái)的數(shù)據(jù);,該步完成后: “我”得到了my_id-1, my_id-2進(jìn)程的數(shù)據(jù),Step 3 :我向my_id+3發(fā)數(shù)據(jù), 我收my_id-3發(fā)來(lái)的數(shù)據(jù) Step N-1 完成后, 我得到了全部數(shù)據(jù); 全體進(jìn)程也得到了全部數(shù)據(jù),對(duì)等式編程思想:每個(gè)人做好自己的工作,全部工作就做好了,不設(shè)班長(zhǎng),所有人工作量相同,循環(huán)通訊: 由張林波研究員首次提出 do step=1,Nproc-1 id_send=myid+step; if(id_send .ge. Nproc) id_send =id_send-Nproc id_recv=myid-step; if (id_recv .lt. 0) id_

21、recv=id_recv+Nproc call MPI_Send(A,1,MPI_Real,id_send,99, if (id_send .ge. P) id_send=id_send-P id_recv=myid-step; if(id_recv .lt. 0) id_recv=id_recv+P call MPI_Send(B1,N*N/P,MPI_REAL,id_send, ) call MPI_Recv(B_tmp, N*N/P, MPI_REAL, id_recv, ) 計(jì)算出 C1(id_recv) (C1(id_recv)=A1*B_tmp) enddo,52,Copyrigh

22、t by Li Xinliang,send to ID 0,0 1 2 3 N-1,工作數(shù)組,存放接受來(lái)的矩陣Bk,回顧 MPI 程序的運(yùn)行原理: 服務(wù)器(前端機(jī))編譯 可執(zhí)行代碼復(fù)制 N 份,每個(gè)節(jié)點(diǎn)運(yùn)行一份 調(diào)用MPI庫(kù)函數(shù) 得到每個(gè)節(jié)點(diǎn)號(hào) myid 根據(jù)myid 不同,程序不同 調(diào)用MPI 庫(kù)函數(shù)進(jìn)行通訊,MPI 編程的基本思想: 主從式,對(duì)等式,推薦采用對(duì)等式編程思想,基本的MPI函數(shù)(6個(gè)) MPI初始化 MPI_Init(ierr) ; MPI結(jié)束 MPI_Finalize(ierr) 得到當(dāng)前進(jìn)程標(biāo)識(shí) MPI_Comm_rank(MPI_COMM_WORLD,myid,ierr) 得到通信域包含的進(jìn)程數(shù)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論