消息傳遞并行編程環(huán)境.ppt_第1頁
消息傳遞并行編程環(huán)境.ppt_第2頁
消息傳遞并行編程環(huán)境.ppt_第3頁
消息傳遞并行編程環(huán)境.ppt_第4頁
消息傳遞并行編程環(huán)境.ppt_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

消息傳遞并行編程環(huán)境王彥棡2010年5月 MPI 123456789123456789123456789 11111111122222222333333334444444455555555 MPI OPENMP MPI MPI MPI是一種實(shí)現(xiàn)手段 進(jìn)程 單個(gè)進(jìn)程 process 進(jìn)程與程序相聯(lián) 程序一旦在操作系統(tǒng)中運(yùn)行即成為進(jìn)程 進(jìn)程擁有獨(dú)立的執(zhí)行環(huán)境 內(nèi)存 寄存器 程序計(jì)數(shù)器等 是操作系統(tǒng)中獨(dú)立存在的可執(zhí)行的基本程序單位串行應(yīng)用程序編譯形成的可執(zhí)行代碼 分為 指令 和 數(shù)據(jù) 兩個(gè)部分 并在程序執(zhí)行時(shí) 獨(dú)立地申請和占有 內(nèi)存空間 且所有計(jì)算均局限于該內(nèi)存空間 內(nèi)存 進(jìn)程 單機(jī)內(nèi)多個(gè)進(jìn)程多個(gè)進(jìn)程可同時(shí)存在于單機(jī)內(nèi)同一操作系統(tǒng) 操作系統(tǒng)負(fù)責(zé)調(diào)度分時(shí)共享處理機(jī)資源 CPU 內(nèi)存 存儲(chǔ) 外設(shè)等 進(jìn)程間相互獨(dú)立 內(nèi)存空間不相交 在操作系統(tǒng)調(diào)度下各自獨(dú)立地運(yùn)行 例如多個(gè)串行應(yīng)用程序在同一臺(tái)計(jì)算機(jī)運(yùn)行進(jìn)程間可以相互交換信息 例如數(shù)據(jù)交換 同步等待 消息是這些交換信息的基本單位 消息傳遞是指這些信息在進(jìn)程間的相互交換 是實(shí)現(xiàn)進(jìn)程間通信的唯一方式 進(jìn)程 包含于通過網(wǎng)絡(luò)聯(lián)接的不同處理器的多個(gè)進(jìn)程進(jìn)程獨(dú)立存在 并位于不同的處理器 由各自獨(dú)立的操作系統(tǒng)調(diào)度 享有獨(dú)立的CPU和內(nèi)存資源進(jìn)程間相互信息交換 可依靠消息傳遞最基本的消息傳遞操作包括發(fā)送消息send 接受消息receive 進(jìn)程同步barrier 歸約reduction等 線程 將一個(gè)進(jìn)程分解成兩個(gè)部分 一部分由其資源特征構(gòu)成 仍稱之為進(jìn)程一部分由其執(zhí)行特征構(gòu)成 稱之為線程進(jìn)程可由單個(gè)線程來執(zhí)行進(jìn)程也可由多個(gè)線程來并行執(zhí)行多個(gè)線程將共享該進(jìn)程的所有資源特征 線程 單進(jìn)程多線程執(zhí)行示意圖 OpenMP OpenMP應(yīng)用編程接口API是在共享存儲(chǔ)體系結(jié)構(gòu)上的一個(gè)編程模型包含編譯制導(dǎo) CompilerDirective 運(yùn)行庫例程 RuntimeLibrary 和環(huán)境變量 EnvironmentVariables 支持增量并行化 IncrementalParallelization OpenMP 什么是OpenMP應(yīng)用編程接口API ApplicationProgrammingInterface 由三個(gè)基本API部分 編譯指令 運(yùn)行部分和環(huán)境變量 構(gòu)成是C C 和Fortan等的應(yīng)用編程接口已經(jīng)被大多數(shù)計(jì)算機(jī)硬件和軟件廠家所標(biāo)準(zhǔn)化OpenMP不包含的性質(zhì)不是建立在分布式存儲(chǔ)系統(tǒng)上的不是在所有的環(huán)境下都是一樣的不是能保證讓多數(shù)共享存儲(chǔ)器均能有效的利用 OpenMP 基于線程的并行編程模型 ProgrammingModel OpenMP使用Fork Join并行執(zhí)行模型 OpenMP intmain intargc char argv pragmaompparallelforfor inti 0 i 10 i printf i d n i return0 消息傳遞平臺(tái)MPI 什么是MPI MessagePassingInterface 是函數(shù)庫規(guī)范 而不是并行語言 操作如同庫函數(shù)調(diào)用是一種標(biāo)準(zhǔn)和規(guī)范 而非某個(gè)對它的具體實(shí)現(xiàn) MPICH等 與編程語言無關(guān)是一種消息傳遞編程模型 并成為這類編程模型的代表Whatisthemessage DATA ENVELOPEMPI的目標(biāo)較高的通信性能較好的程序可移植性強(qiáng)大的功能 消息傳遞平臺(tái)MPI MPI程序編譯與運(yùn)行程序編譯C mpicc ompiprogmpisrc cFortran77 mpif77 ompiprogmpisrc f程序運(yùn)行 mpirun np4mpiprog程序執(zhí)行過程中不能動(dòng)態(tài)改變進(jìn)程的個(gè)數(shù)申請的進(jìn)程數(shù)np與實(shí)際處理器個(gè)數(shù)無關(guān) 例子 include mpi h intmain intargc char argv intmyid numprocs intnamelen charprocessor name MPI MAX PROCESSOR NAME MPI Init 頭文件 相關(guān)變量聲明 程序開始 程序結(jié)束 程序體計(jì)算與通信 MPI基礎(chǔ)知識 MPI重要概念MPI函數(shù)一般形式MPI原始數(shù)據(jù)類型MPI程序基本結(jié)構(gòu)MPI幾個(gè)基本函數(shù)并行編程模式 MPI重要概念 進(jìn)程組 processgroup 指MPI程序的全部進(jìn)程集合的一個(gè)有序子集且進(jìn)程組中每個(gè)進(jìn)程被賦于一個(gè)在該組中唯一的序號 rank 用于在該組中標(biāo)識該進(jìn)程 序號的取值范圍是 0 進(jìn)程數(shù) 1 通信器 communicator 理解為一類進(jìn)程的集合即一個(gè)進(jìn)程組 且在該進(jìn)程組 進(jìn)程間可以相互通信任何MPI通信函數(shù)均必須在某個(gè)通信器內(nèi)發(fā)生MPI系統(tǒng)提供省缺的通信器MPI COMM WORLD組內(nèi)通信器和組間通信器 MPI重要概念 進(jìn)程序號 rank MPI程序中的進(jìn)程由進(jìn)程組或通信器序號唯一確定 序號相對于進(jìn)程組或通信器而言 假設(shè)np個(gè)處理器 標(biāo)號0 np 1 同一個(gè)進(jìn)程在不同的進(jìn)程組或通信器中可以有不同的序號 進(jìn)程的序號是在進(jìn)程組或通信器被創(chuàng)建時(shí)賦予的MPI系統(tǒng)提供了一個(gè)特殊的進(jìn)程序號MPI PROC NULL 它代表空進(jìn)程 不存在的進(jìn)程 與MPI PROC NULL間的通信實(shí)際上沒有任何作用消息 message 分為數(shù)據(jù) data 和包裝 envelope 兩個(gè)部分包裝由接收進(jìn)程序號 發(fā)送進(jìn)程序號 消息標(biāo)號和通信器三部分組成 數(shù)據(jù)包含用戶將要傳遞的內(nèi)容 MPI函數(shù)一般形式 C error MPI Xxxxx parameter MPI Xxxxx parameter 整型錯(cuò)誤碼由函數(shù)值返回除MPI Wtime 和MPI Wtick 外 所有MPI的C函數(shù)均返回一個(gè)整型錯(cuò)誤碼 成功時(shí)返回MPI SUCCESS 其他錯(cuò)誤代碼依賴于執(zhí)行Fortran CALLMPI XXXXX parameter IERROR 整型錯(cuò)誤碼由函數(shù)的參數(shù)返回除MPI WTIME 和MPI WTICK 外為子函數(shù)程序 function Fortran77的所有MPI過程都是Fortran77的子例行程序 subroutine MPI原始數(shù)據(jù)類型 MPI BYTE一個(gè)字節(jié)MPI PACKED打包數(shù)據(jù) MPI原始數(shù)據(jù)類型 MPI幾個(gè)基本函數(shù) MPI InitMPI InitializedMPI Comm sizeMPI Comm rankMPI FinalizeMPI AbortMPI Get processor nameMPI Get versionMPI Wtime MPI幾個(gè)基本函數(shù) 初始化MPI系統(tǒng)C intMPI Init int argc char argv Fortran77 MPI INIT IERROR INTEGERIERROR通常為第一個(gè)調(diào)用的MPI函數(shù) 除MPI Initialized外在C接口中 MPI系統(tǒng)通過argc和argv得到命令行參數(shù) 并且會(huì)把MPI系統(tǒng)專用的參數(shù)刪除 留下用戶的解釋參數(shù) MPI幾個(gè)基本函數(shù) 獲取通信器的進(jìn)程數(shù)和進(jìn)程在通信器中的標(biāo)號C intMPI Comm size MPI Commcomm int size intMPI Comm rank MPI Commcomm int rank Fortran77 MPI COMM SIZE COMM SIZE IERROR MPI COMM RANK COMM RANK IERROR INTEGERCOMM SIZE RANK IERROR MPI幾個(gè)基本函數(shù) 退出MPI系統(tǒng)C intMPI Finalize void Fortran77 MPI FINALIZE IERROR 每個(gè)進(jìn)程都必須調(diào)用 使用后不準(zhǔn)許調(diào)用任何MPI函數(shù)若不執(zhí)行MPI退出函數(shù) 進(jìn)程可能被懸掛用戶在調(diào)用該函數(shù)前 應(yīng)確保非阻塞通訊結(jié)束 MPI幾個(gè)基本函數(shù) 異常終止MPI程序C intMPI Abort MPI Commcomm interrorcode Fortran77 MPI ABORT COMM ERRORCODE IERROR INTEGERCOMM ERRORCODE IERROR在出現(xiàn)了致命錯(cuò)誤而希望異常終止MPI程序時(shí)執(zhí)行MPI系統(tǒng)會(huì)設(shè)法終止comm通信器中所有進(jìn)程輸入整型參數(shù)errorcode 將被作為進(jìn)程的退出碼返回給系統(tǒng) MPI幾個(gè)基本函數(shù) 獲取處理器的名稱C MPI Get processor name char name int resultlen Fortran77 MPI GET PROCESSOR NAME NAME RESULTLEN IERR 在返回的name中存儲(chǔ)所在處理器的名稱resultlen存放返回名字所占字節(jié)應(yīng)提供參數(shù)name不少于MPI MAX PRCESSOR NAME個(gè)字節(jié)的存儲(chǔ)空間 MPI幾個(gè)基本函數(shù) 獲取墻上時(shí)間C doubleMPI Wtime void Fortran77 DOUBLEPRECISIONMPI WTIME 返回調(diào)用時(shí)刻的墻上時(shí)間 用浮點(diǎn)數(shù)表示秒數(shù)經(jīng)常用來計(jì)算程序運(yùn)行時(shí)間 Sample HelloWorld C C MPI include mpi h include includevoidmain intargc char argv intmyid numprocs namelen charprocessor name MPI MAX PROCESSOR NAME MPI Init Sample HelloWorld Fortran Fortran MPIprogrammaininclude mpif h character MPI MAX PROCESSOR NAME processor nameintegermyid numprocs namelen rc ierrcallMPI INIT ierr callMPI COMM RANK MPI COMM WORLD myid ierr callMPI COMM SIZE MPI COMM WORLD numprocs ierr callMPI GET PROCESSOR NAME processor name namelen ierr write HelloWorld Process myid of numprocs on processor namecallMPI FINALIZE ierr end Sample HelloWorld 單處理器 tp5 運(yùn)行4個(gè)進(jìn)程 4個(gè)處理器 tp1 tp2 tp3 tp4 分別運(yùn)行4個(gè)進(jìn)程 Sample HelloWorld 點(diǎn)對點(diǎn)通信 定義 兩個(gè)進(jìn)程之間的通信源進(jìn)程發(fā)送消息到目標(biāo)進(jìn)程目標(biāo)進(jìn)程接受消息通信發(fā)生在同一個(gè)通信器內(nèi)進(jìn)程通過其在通信器內(nèi)的標(biāo)號表示MPI系統(tǒng)的通信方式都建立在點(diǎn)對點(diǎn)通信之上 阻塞式點(diǎn)對點(diǎn)通信 阻塞式消息發(fā)送C intMPI Send void buf intcount MPI Datatypedatatype intdest inttag MPI Commcomm Fortran77 MPI SEND BUF COUNT DATATYPE DEST TAG COMM IERROR count不是字節(jié)數(shù) 而是指定數(shù)據(jù)類型的個(gè)數(shù)datatype可是原始數(shù)據(jù)類型 或?yàn)橛脩糇远x類型dest取值范圍是0 np 1 或MPI PROC NULL np是comm中的進(jìn)程總數(shù) tag取值范圍是0 MPI TAG UB 用來區(qū)分消息 阻塞式點(diǎn)對點(diǎn)通信 阻塞式消息接收C intMPI Recv void buf intcount MPI Datatypedatatype intsource inttag MPI Commcomm MPI Status status Fortran77 MPI RECV BUF COUNT DATATYPE SOURCE TAG COMM STATUS IERROR count是接受緩存區(qū)的大小 表示接受上界 具體接受長度可用MPI Get count獲得source取值范圍是0 np 1 或MPI PROC NULL和MPI ANY SOURCEtag取值范圍是0 MPI TAG UB 或MPI ANY TAG 阻塞式點(diǎn)對點(diǎn)通信 消息 message 阻塞式點(diǎn)對點(diǎn)通信 標(biāo)準(zhǔn)阻塞式通信 是否對發(fā)送數(shù)據(jù)進(jìn)行緩存 由MPI系統(tǒng)決定 而非程序員阻塞 發(fā)送成功 意味 1 消息成功發(fā)送 2 或者消息被緩存接收成功 意味消息已被成功接收 阻塞式點(diǎn)對點(diǎn)通信 消息傳遞成功發(fā)送進(jìn)程需指定一個(gè)有效的目標(biāo)接收進(jìn)程接收進(jìn)程需指定一個(gè)有效的源發(fā)送進(jìn)程接收和發(fā)送消息的進(jìn)程要在同一個(gè)通信器內(nèi)接收和發(fā)送消息的tag要相同接收緩存區(qū)要足夠大 例子 其他點(diǎn)對點(diǎn)通信 捆綁發(fā)送和接收MPI SENDRECV SENDBUFF SENDCOUNT SENDTYPE DEST SENDTAG RECVBUFF RECVCOUNT RECVTYPE SOURCE RECVTAG COMM STATUS IERR 捆綁發(fā)送和接收 收發(fā)使用同一緩存區(qū)MPI SENDRECV REPLACE BUFF COUNT DATATYPE DEST SENDTAG SOURCE RECVTAG COMM STATUS IERR 緩存消息發(fā)送函數(shù)同步消息發(fā)送函數(shù)就緒消息發(fā)送函數(shù) MPI Bsend MPI Ssend MPI Rsend 非阻塞式點(diǎn)對點(diǎn)通信 阻塞式通信與非阻塞式通信 非阻塞式點(diǎn)對點(diǎn)通信 阻塞型與非阻塞型通信函數(shù) 聚合通信 定義 一個(gè)通信器的所有進(jìn)程參與 所有進(jìn)程都調(diào)用聚合通信函數(shù)MPI系統(tǒng)保證聚合通信函數(shù)與點(diǎn)對點(diǎn)調(diào)用不會(huì)混淆聚合通信不需要消息標(biāo)號聚合通信函數(shù)都為阻塞式函數(shù)聚合通信的功能 通信 同步 計(jì)算等 三種通信方式 一對多 多對一 多對多 聚合函數(shù)列表 MPI BarrierMPI BcastMPI Gather MPI GathervMPI Allgather MPI AllgathervMPI Scatter MPI ScattervMPI Alltoall MPI AlltoallvMPI Reduce MPI Allreduce MPI Reduce scatterMPI Scan 同步 該函數(shù)用于進(jìn)程同步 即一個(gè)進(jìn)程調(diào)用該函數(shù)后需等待通信器內(nèi)所有進(jìn)程調(diào)用該函數(shù)后返回 Sample Fortran CALLMPI COMM RANK COMM RANK IERR IF RANK EQ 0 THENCALLWORK0 ELSECALLWORK1 CALLMPI BARRIER COMM IERR CALLWORK2 CALLMPI COMM RANK COMM RANK IERR IF RANK EQ 0 THENCALLWORK0 CALLMPI BARRIER COMM IERR ELSECALLWORK1 CALLWORK2 廣播 廣播 廣播 通信器中root進(jìn)程將自己buffer內(nèi)的數(shù)據(jù)發(fā)給通信器內(nèi)所有進(jìn)程非root進(jìn)程用自己的buffer接收數(shù)據(jù) Sample C includeintmain intargc char argv intrank doubleparam MPI Init ProgramOutputP 0afterbroadcastparameteris23 000000P 6afterbroadcastparameteris23 000000P 5afterbroadcastparameteris23 000000P 2afterbroadcastparameteris23 000000P 3afterbroadcastparameteris23 000000P 7afterbroadcastparameteris23 000000P 1afterbroadcastparameteris23 000000P 4afterbroadcastparameteris23 000000 收集 散發(fā) 收集 MPI Gather 收集 MPI Gather 所有進(jìn)程 包括根進(jìn)程 將sendbuf的數(shù)據(jù)傳輸給根進(jìn)程 根進(jìn)程按著進(jìn)程號順序依次接收到recvbuf發(fā)送與接收的數(shù)據(jù)類型相同 sendcount和recvcount相同非根進(jìn)程接收消息緩沖區(qū)被忽略 但需要提供 散發(fā) MPI Scatter 散發(fā) MPI Scatter 根進(jìn)程有np個(gè)數(shù)據(jù)塊 每塊包含sendcount個(gè)類型為sendtype的數(shù)據(jù) 根進(jìn)程將這些數(shù)據(jù)塊按著進(jìn)程號順序依次散發(fā)到各個(gè)進(jìn)程 包含根進(jìn)程 的recvbuf發(fā)送與接收的數(shù)據(jù)類型相同 sendcount和recvcount相同非根進(jìn)程發(fā)送消息緩沖區(qū)被忽略 但需要提供 Sample C聚合通信 includeintmain intargc char argv intrank size i j doubleparam 400 mine intsndcnt revcnt MPI Init ProgramOutputP 0mineis23 000000P 1mineis24 000000P 2mineis25 000000P 3mineis26 000000 根進(jìn)程向所有進(jìn)程次序分發(fā)1個(gè)數(shù)組元素 歸約 歸約 MPI Reduce 各進(jìn)程提供數(shù)據(jù) sendbuf co

溫馨提示

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

評論

0/150

提交評論