




已閱讀5頁,還剩63頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
消息傳遞并行編程環(huán)境王彥棡2010年5月 MPI 123456789123456789123456789 11111111122222222333333334444444455555555 MPI OPENMP MPI MPI MPI是一種實現(xiàn)手段 進程 單個進程 process 進程與程序相聯(lián) 程序一旦在操作系統(tǒng)中運行即成為進程 進程擁有獨立的執(zhí)行環(huán)境 內(nèi)存 寄存器 程序計數(shù)器等 是操作系統(tǒng)中獨立存在的可執(zhí)行的基本程序單位串行應(yīng)用程序編譯形成的可執(zhí)行代碼 分為 指令 和 數(shù)據(jù) 兩個部分 并在程序執(zhí)行時 獨立地申請和占有 內(nèi)存空間 且所有計算均局限于該內(nèi)存空間 內(nèi)存 進程 單機內(nèi)多個進程多個進程可同時存在于單機內(nèi)同一操作系統(tǒng) 操作系統(tǒng)負責(zé)調(diào)度分時共享處理機資源 CPU 內(nèi)存 存儲 外設(shè)等 進程間相互獨立 內(nèi)存空間不相交 在操作系統(tǒng)調(diào)度下各自獨立地運行 例如多個串行應(yīng)用程序在同一臺計算機運行進程間可以相互交換信息 例如數(shù)據(jù)交換 同步等待 消息是這些交換信息的基本單位 消息傳遞是指這些信息在進程間的相互交換 是實現(xiàn)進程間通信的唯一方式 進程 包含于通過網(wǎng)絡(luò)聯(lián)接的不同處理器的多個進程進程獨立存在 并位于不同的處理器 由各自獨立的操作系統(tǒng)調(diào)度 享有獨立的CPU和內(nèi)存資源進程間相互信息交換 可依靠消息傳遞最基本的消息傳遞操作包括發(fā)送消息send 接受消息receive 進程同步barrier 歸約reduction等 線程 將一個進程分解成兩個部分 一部分由其資源特征構(gòu)成 仍稱之為進程一部分由其執(zhí)行特征構(gòu)成 稱之為線程進程可由單個線程來執(zhí)行進程也可由多個線程來并行執(zhí)行多個線程將共享該進程的所有資源特征 線程 單進程多線程執(zhí)行示意圖 OpenMP OpenMP應(yīng)用編程接口API是在共享存儲體系結(jié)構(gòu)上的一個編程模型包含編譯制導(dǎo) CompilerDirective 運行庫例程 RuntimeLibrary 和環(huán)境變量 EnvironmentVariables 支持增量并行化 IncrementalParallelization OpenMP 什么是OpenMP應(yīng)用編程接口API ApplicationProgrammingInterface 由三個基本API部分 編譯指令 運行部分和環(huán)境變量 構(gòu)成是C C 和Fortan等的應(yīng)用編程接口已經(jīng)被大多數(shù)計算機硬件和軟件廠家所標(biāo)準(zhǔn)化OpenMP不包含的性質(zhì)不是建立在分布式存儲系統(tǒng)上的不是在所有的環(huán)境下都是一樣的不是能保證讓多數(shù)共享存儲器均能有效的利用 OpenMP 基于線程的并行編程模型 ProgrammingModel OpenMP使用Fork Join并行執(zhí)行模型 OpenMP intmain intargc char argv pragmaompparallelforfor inti 0 i 10 i printf i d n i return0 消息傳遞平臺MPI 什么是MPI MessagePassingInterface 是函數(shù)庫規(guī)范 而不是并行語言 操作如同庫函數(shù)調(diào)用是一種標(biāo)準(zhǔn)和規(guī)范 而非某個對它的具體實現(xiàn) MPICH等 與編程語言無關(guān)是一種消息傳遞編程模型 并成為這類編程模型的代表Whatisthemessage DATA ENVELOPEMPI的目標(biāo)較高的通信性能較好的程序可移植性強大的功能 消息傳遞平臺MPI MPI程序編譯與運行程序編譯C mpicc ompiprogmpisrc cFortran77 mpif77 ompiprogmpisrc f程序運行 mpirun np4mpiprog程序執(zhí)行過程中不能動態(tài)改變進程的個數(shù)申請的進程數(shù)np與實際處理器個數(shù)無關(guān) 例子 include mpi h intmain intargc char argv intmyid numprocs intnamelen charprocessor name MPI MAX PROCESSOR NAME MPI Init 頭文件 相關(guān)變量聲明 程序開始 程序結(jié)束 程序體計算與通信 MPI基礎(chǔ)知識 MPI重要概念MPI函數(shù)一般形式MPI原始數(shù)據(jù)類型MPI程序基本結(jié)構(gòu)MPI幾個基本函數(shù)并行編程模式 MPI重要概念 進程組 processgroup 指MPI程序的全部進程集合的一個有序子集且進程組中每個進程被賦于一個在該組中唯一的序號 rank 用于在該組中標(biāo)識該進程 序號的取值范圍是 0 進程數(shù) 1 通信器 communicator 理解為一類進程的集合即一個進程組 且在該進程組 進程間可以相互通信任何MPI通信函數(shù)均必須在某個通信器內(nèi)發(fā)生MPI系統(tǒng)提供省缺的通信器MPI COMM WORLD組內(nèi)通信器和組間通信器 MPI重要概念 進程序號 rank MPI程序中的進程由進程組或通信器序號唯一確定 序號相對于進程組或通信器而言 假設(shè)np個處理器 標(biāo)號0 np 1 同一個進程在不同的進程組或通信器中可以有不同的序號 進程的序號是在進程組或通信器被創(chuàng)建時賦予的MPI系統(tǒng)提供了一個特殊的進程序號MPI PROC NULL 它代表空進程 不存在的進程 與MPI PROC NULL間的通信實際上沒有任何作用消息 message 分為數(shù)據(jù) data 和包裝 envelope 兩個部分包裝由接收進程序號 發(fā)送進程序號 消息標(biāo)號和通信器三部分組成 數(shù)據(jù)包含用戶將要傳遞的內(nèi)容 MPI函數(shù)一般形式 C error MPI Xxxxx parameter MPI Xxxxx parameter 整型錯誤碼由函數(shù)值返回除MPI Wtime 和MPI Wtick 外 所有MPI的C函數(shù)均返回一個整型錯誤碼 成功時返回MPI SUCCESS 其他錯誤代碼依賴于執(zhí)行Fortran CALLMPI XXXXX parameter IERROR 整型錯誤碼由函數(shù)的參數(shù)返回除MPI WTIME 和MPI WTICK 外為子函數(shù)程序 function Fortran77的所有MPI過程都是Fortran77的子例行程序 subroutine MPI原始數(shù)據(jù)類型 MPI BYTE一個字節(jié)MPI PACKED打包數(shù)據(jù) MPI原始數(shù)據(jù)類型 MPI幾個基本函數(shù) MPI InitMPI InitializedMPI Comm sizeMPI Comm rankMPI FinalizeMPI AbortMPI Get processor nameMPI Get versionMPI Wtime MPI幾個基本函數(shù) 初始化MPI系統(tǒng)C intMPI Init int argc char argv Fortran77 MPI INIT IERROR INTEGERIERROR通常為第一個調(diào)用的MPI函數(shù) 除MPI Initialized外在C接口中 MPI系統(tǒng)通過argc和argv得到命令行參數(shù) 并且會把MPI系統(tǒng)專用的參數(shù)刪除 留下用戶的解釋參數(shù) MPI幾個基本函數(shù) 獲取通信器的進程數(shù)和進程在通信器中的標(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幾個基本函數(shù) 退出MPI系統(tǒng)C intMPI Finalize void Fortran77 MPI FINALIZE IERROR 每個進程都必須調(diào)用 使用后不準(zhǔn)許調(diào)用任何MPI函數(shù)若不執(zhí)行MPI退出函數(shù) 進程可能被懸掛用戶在調(diào)用該函數(shù)前 應(yīng)確保非阻塞通訊結(jié)束 MPI幾個基本函數(shù) 異常終止MPI程序C intMPI Abort MPI Commcomm interrorcode Fortran77 MPI ABORT COMM ERRORCODE IERROR INTEGERCOMM ERRORCODE IERROR在出現(xiàn)了致命錯誤而希望異常終止MPI程序時執(zhí)行MPI系統(tǒng)會設(shè)法終止comm通信器中所有進程輸入整型參數(shù)errorcode 將被作為進程的退出碼返回給系統(tǒng) MPI幾個基本函數(shù) 獲取處理器的名稱C MPI Get processor name char name int resultlen Fortran77 MPI GET PROCESSOR NAME NAME RESULTLEN IERR 在返回的name中存儲所在處理器的名稱resultlen存放返回名字所占字節(jié)應(yīng)提供參數(shù)name不少于MPI MAX PRCESSOR NAME個字節(jié)的存儲空間 MPI幾個基本函數(shù) 獲取墻上時間C doubleMPI Wtime void Fortran77 DOUBLEPRECISIONMPI WTIME 返回調(diào)用時刻的墻上時間 用浮點數(shù)表示秒數(shù)經(jīng)常用來計算程序運行時間 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 運行4個進程 4個處理器 tp1 tp2 tp3 tp4 分別運行4個進程 Sample HelloWorld 點對點通信 定義 兩個進程之間的通信源進程發(fā)送消息到目標(biāo)進程目標(biāo)進程接受消息通信發(fā)生在同一個通信器內(nèi)進程通過其在通信器內(nèi)的標(biāo)號表示MPI系統(tǒng)的通信方式都建立在點對點通信之上 阻塞式點對點通信 阻塞式消息發(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ù)類型的個數(shù)datatype可是原始數(shù)據(jù)類型 或為用戶自定義類型dest取值范圍是0 np 1 或MPI PROC NULL np是comm中的進程總數(shù) tag取值范圍是0 MPI TAG UB 用來區(qū)分消息 阻塞式點對點通信 阻塞式消息接收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 阻塞式點對點通信 消息 message 阻塞式點對點通信 標(biāo)準(zhǔn)阻塞式通信 是否對發(fā)送數(shù)據(jù)進行緩存 由MPI系統(tǒng)決定 而非程序員阻塞 發(fā)送成功 意味 1 消息成功發(fā)送 2 或者消息被緩存接收成功 意味消息已被成功接收 阻塞式點對點通信 消息傳遞成功發(fā)送進程需指定一個有效的目標(biāo)接收進程接收進程需指定一個有效的源發(fā)送進程接收和發(fā)送消息的進程要在同一個通信器內(nèi)接收和發(fā)送消息的tag要相同接收緩存區(qū)要足夠大 例子 其他點對點通信 捆綁發(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 非阻塞式點對點通信 阻塞式通信與非阻塞式通信 非阻塞式點對點通信 阻塞型與非阻塞型通信函數(shù) 聚合通信 定義 一個通信器的所有進程參與 所有進程都調(diào)用聚合通信函數(shù)MPI系統(tǒng)保證聚合通信函數(shù)與點對點調(diào)用不會混淆聚合通信不需要消息標(biāo)號聚合通信函數(shù)都為阻塞式函數(shù)聚合通信的功能 通信 同步 計算等 三種通信方式 一對多 多對一 多對多 聚合函數(shù)列表 MPI BarrierMPI BcastMPI Gather MPI GathervMPI Allgather MPI AllgathervMPI Scatter MPI ScattervMPI Alltoall MPI AlltoallvMPI Reduce MPI Allreduce MPI Reduce scatterMPI Scan 同步 該函數(shù)用于進程同步 即一個進程調(diào)用該函數(shù)后需等待通信器內(nèi)所有進程調(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進程將自己buffer內(nèi)的數(shù)據(jù)發(fā)給通信器內(nèi)所有進程非root進程用自己的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 所有進程 包括根進程 將sendbuf的數(shù)據(jù)傳輸給根進程 根進程按著進程號順序依次接收到recvbuf發(fā)送與接收的數(shù)據(jù)類型相同 sendcount和recvcount相同非根進程接收消息緩沖區(qū)被忽略 但需要提供 散發(fā) MPI Scatter 散發(fā) MPI Scatter 根進程有np個數(shù)據(jù)塊 每塊包含sendcount個類型為sendtype的數(shù)據(jù) 根進程將這些數(shù)據(jù)塊按著進程號順序依次散發(fā)到各個進程 包含根進程 的recvbuf發(fā)送與接收的數(shù)據(jù)類型相同 sendcount和recvcount相同非根進程發(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 根進程向所有進程次序分發(fā)1個數(shù)組元素 歸約 歸約 MPI Reduce 各進程提供數(shù)據(jù) sendbuf co
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年晉城澤州縣人民醫(yī)院招聘考試真題
- 2024年保山市隆陽區(qū)永昌街道社區(qū)衛(wèi)生服務(wù)中心招聘考試真題
- 2025寶雞中北職業(yè)學(xué)院單招《物理》自我提分評估【新題速遞】附答案詳解
- 沖孔機培訓(xùn)課件
- 流感培訓(xùn)課件講解
- 2025年文秘專業(yè)求職自薦信12篇
- 我們的策展課件
- 福建省2025年房地產(chǎn)經(jīng)紀人:房地產(chǎn)中介的特點考試試題
- 2024年云浮市郁南縣招聘公益性崗位人員筆試真題
- 2024-2025學(xué)年漳州衛(wèi)生職業(yè)學(xué)院單招《職業(yè)適應(yīng)性測試》模擬試題【原創(chuàng)題】附答案詳解
- 2025年中國大米加工行業(yè)發(fā)展?jié)摿Ψ治黾巴顿Y方向研究報告
- 2023-2024學(xué)年四川省廣安市高二下學(xué)期期末教學(xué)質(zhì)量檢測數(shù)學(xué)試題 (解析版)
- 夾具考試題及答案
- (高清版)DB31∕T 1530-2024 心理咨詢機構(gòu)服務(wù)規(guī)范
- 青海省消防救援總隊招聘消防文員筆試真題2024
- 便秘科普宣傳課件
- 浙江潔普斯清潔設(shè)備有限公司年產(chǎn)11萬臺清洗機技改項目環(huán)評報告
- 高校資產(chǎn)管理十五五規(guī)劃方案
- 2024年威寧自治縣在職在編教師考調(diào)真題
- 小學(xué)生反洗錢課件
- 酒店前廳部管理制度
評論
0/150
提交評論