




已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
2020年1月 1 55 并行程序設計簡介 曙光信息產(chǎn)業(yè) 北京 有限公司 2020年1月 2 55 講座內(nèi)容提示 基本概念基本的MPI點到點通信 Pointtopoint MPI中API的主要內(nèi)容 為MPI最基本 最重要的內(nèi)容MPI程序的編譯和運行實例 2020年1月 3 55 參考文獻 MPI thecompletereference MarcSnir MITPress 1998 ISBN0262692155 0262692163 UsingMPI portableparallelprogrammingwiththemessage passinginterface WilliamGropp MITPress 1999 2ndedition ISBN0262571323 UsingMPI 2 advancedfeaturesofthemessage passinginterface WilliamGropp MITPress 1999 ISBN0262571331 高性能計算并行編程技術(shù) MPI并行程序設計 都志輝 清華大學出版社 2001年8月 2020年1月 4 55 多線程庫標準 Win32API POSIXthreads 編譯制導標準 OpenMP 可移植共享存儲并行編程標準 消息傳遞庫標準 MPI PVM 并行編程標準 本討論的重點 2020年1月 5 55 消息傳遞并行程序設計 消息傳遞并行程序設計指用戶必須通過顯式地發(fā)送和接收消息來實現(xiàn)處理機間的數(shù)據(jù)交換 在這種并行編程中 每個并行進程均有自己獨立的地址空間 相互之間訪問不能直接進行 必須通過顯式的消息傳遞來實現(xiàn) 這種編程方式是大規(guī)模并行處理機 MPP 和機群 Cluster 采用的主要編程方式 并行計算粒度大 特別適合于大規(guī)模可擴展并行算法由于消息傳遞程序設計要求用戶很好地分解問題 組織不同進程間的數(shù)據(jù)交換 并行計算粒度大 特別適合于大規(guī)??蓴U展并行算法 消息傳遞是當前并行計算領(lǐng)域的一個非常重要的并行程序設計方式 2020年1月 6 55 什么是MPI MassagePassingInterface 是消息傳遞函數(shù)庫的標準規(guī)范 由MPI論壇開發(fā) 支持Fortran和C一種新的庫描述 不是一種語言 共有上百個函數(shù)調(diào)用接口 在Fortran和C語言中可以直接對這些函數(shù)進行調(diào)用MPI是一種標準或規(guī)范的代表 而不是特指某一個對它的具體實現(xiàn)MPI是一種消息傳遞編程模型 并成為這種編程模型的代表和事實上的標準 2020年1月 7 55 MPI的發(fā)展過程 發(fā)展的兩個階段MPI1 1 1995MPICH 是MPI最流行的非專利實現(xiàn) 由Argonne國家實驗室和密西西比州立大學聯(lián)合開發(fā) 具有更好的可移植性 MPI1 2 2 0 動態(tài)進程 并行I O 遠程存儲訪問 支持F90和C 1997 2020年1月 8 55 為什么要用MPI 高可移植性MPI已在IBMPC機上 MSWindows上 所有主要的Unix工作站上和所有主流的并行機上得到實現(xiàn) 使用MPI作消息傳遞的C或Fortran并行程序可不加改變地運行在IBMPC MSWindows Unix工作站 以及各種并行機上 2020年1月 9 55 從簡單入手 Init和Finalize 下面我們首先分別以C語言和Fortran語言的形式給出一個最簡單的MPI并行程序Hello 下頁 該程序在終端打印出HelloWorld 字樣 HelloWorld 一聲來自新生兒的問候 2020年1月 10 55 Helloworld C include include mpi h main intargc char argv MPI Init 2020年1月 11 55 Helloworld Fortran programmaininclude mpif h integerierrcallMPI INIT ierr print Hello world callMPI FINALIZE ierr end 2020年1月 12 55 C和Fortran中MPI函數(shù)約定 C必須包含mpi h MPI函數(shù)返回出錯代碼或MPI SUCCESS成功標志 MPI 前綴 且只有MPI以及MPI 標志后的第一個字母大寫 其余小寫 Fortran必須包含mpif h 通過子函數(shù)形式調(diào)用MPI 函數(shù)最后一個參數(shù)為返回值 MPI 前綴 且函數(shù)名全部為大寫 MPI函數(shù)的參數(shù)被標志為以下三種類型 IN 參數(shù)在例程的調(diào)用中不會被修正 OUT 參數(shù)在例程的調(diào)用中可能會被修正 INOUT 參數(shù)有初始值 且在例程的調(diào)用中可能會被修正 2020年1月 13 55 MPI初始化 MPI INIT intMPI Init int argc char argv MPI INIT IERROR MPI INIT是MPI程序的第一個調(diào)用 它完成MPI程序的所有初始化工作 所有的MPI程序的第一條可執(zhí)行語句都是這條語句 啟動MPI環(huán)境 標志并行代碼的開始 并行代碼之前 第一個mpi函數(shù) 除MPI Initialized 外 要求main必須帶參數(shù)運行 否則出錯 2020年1月 14 55 MPI結(jié)束 MPI FINALIZE intMPI Finalize void MPI FINALIZE IERROR MPI FINALIZE是MPI程序的最后一個調(diào)用 它結(jié)束MPI程序的運行 它是MPI程序的最后一條可執(zhí)行語句 否則程序的運行結(jié)果是不可預知的 標志并行代碼的結(jié)束 結(jié)束除主進程外其它進程 之后串行代碼仍可在主進程 rank 0 上運行 如果必須 2020年1月 15 55 MPI程序的的編譯與運行 mpif77hello f或mpicchello c默認生成a out的可執(zhí)行代碼 mpif77 ohellohello f或mpicc ohellohello c生成hello的可執(zhí)行代碼 mpirun np4a outmpirun np4hello4指定np的實參 表示進程數(shù) 由用戶指定 a out hello要運行的MPI并行程序 小寫o np Thenumberofprocess 2020年1月 16 55 運行我們的MPI程序 dair node01 mpicc ohellohello c dair node01 hello 0 Abortingprogram Couldnotcreatep4procgroup Possiblemissingfileorprogramstartedwithoutmpirun dair node01 mpirun np4hello HelloWorld HelloWorld HelloWorld HelloWorld dair node01 計算機打印字符 我們輸入的命令 2020年1月 17 55 Hello是如何被執(zhí)行的 SPMD SingleProgramMultipleData SIMD include mpi h includemain intargc char argv MPI Init include mpi h includemain intargc char argv MPI Init include mpi h includemain intargc char argv MPI Init include mpi h includemain intargc char argv MPI Init HelloWorld HelloWorld HelloWorld HelloWorld include mpi h includemain intargc char argv MPI Init rsh ssh 2020年1月 18 55 開始寫MPI并行程序 Comm size和Comm rank 在寫MPI程序時 我們常需要知道以下兩個問題的答案 任務由多少個進程來進行并行計算 我是哪一個進程 2020年1月 19 55 MPI提供了下列函數(shù)來回答這些問題 用MPI Comm size獲得進程個數(shù)pintMPI Comm size MPI Commcomm int size 用MPI Comm rank獲得進程的一個叫rank的值 該rank值為0到p 1間的整數(shù) 相當于進程的IDintMPI Comm rank MPI Commcomm int rank 2020年1月 20 55 更新的HelloWorld c include include mpi h main intargc char argv intmyid numprocs MPI Init 2020年1月 21 55 更新的HelloWorld F77 programmaininclude mpif h integerierr myid numprocscallMPI INIT ierr callMPI COMM RANK MPI COMM WORLD myid ierr callMPI COMM SIZE MPI COMM WORLD numprocs ierr print Iam myid of numprocscallMPI FINALIZE ierr end 2020年1月 22 55 運行結(jié)果 dair node01 mpicc ohello1hello1 c dair node01 mpirun np4hello1Iam0of4Iam1of4Iam2of4Iam3of4 dair node01 計算機打印字符 我們輸入的命令 2020年1月 23 55 寫MPI并行通信程序 Send和Recv Greeting執(zhí)行過程 2020年1月 24 55 有消息傳遞greetings c include include mpi h main intargc char argv intnumprocs myid source MPI Statusstatus charmessage 100 MPI Init 2020年1月 25 55 有消息傳遞greetings c if myid 0 strcpy message HelloWorld MPI Send message strlen message 1 MPI CHAR 0 99 MPI COMM WORLD else myid 0 for source 1 source numprocs source MPI Recv message 100 MPI CHAR source 99 MPI COMM WORLD endmain 2020年1月 26 55 解剖greetings程序 頭文件 mpi h mpif h intMPI Init int argc char argv 啟動MPI環(huán)境 標志并行代碼的開始 并行代碼之前 第一個mpi函數(shù) 除MPI Initialize 外 要求main必須帶參數(shù)運行 否則出錯 通信域 通信空間 MPI COMM WORLD 一個通信空間是一個進程組和一個上下文的組合 上下文可看作為組的超級標簽 用于區(qū)分不同的通信域 在執(zhí)行函數(shù)MPI Init之后 一個MPI程序的所有進程形成一個缺省的組 這個組的通信域即被寫作MPI COMM WORLD 該參數(shù)是MPI通信操作函數(shù)中必不可少的參數(shù) 用于限定參加通信的進程的范圍 2020年1月 27 55 解剖greetings程序 intMPI Comm size MPI Commcomm int size 獲得通信空間comm中規(guī)定的組包含的進程的數(shù)量 指定一個communicator 也指定了一組共享該空間的進程 這些進程組成該communicator的group intMPI Comm rank MPI Commcomm int rank 得到本進程在通信空間中的rank值 即在組中的邏輯編號 從0開始 intMPI Finalize 標志并行代碼的結(jié)束 結(jié)束除主進程外其它進程 之后串行代碼仍可在主進程 rank 0 上運行 如果必須 2020年1月 28 55 講座內(nèi)容提示 基本的MPI基本概念點到點通信 Pointtopoint MPI中API的主要內(nèi)容 為MPI最基本 最重要的內(nèi)容MPI程序的編譯和運行深入MPI用戶自定義 派生 數(shù)據(jù)類型 User defined Derived datatype 事實上MPI的所有數(shù)據(jù)類型均為MPI自定義類型支持異構(gòu)系統(tǒng)允許消息來自不連續(xù)的或類型不一致的存儲區(qū) 結(jié)構(gòu) 數(shù)組散元 集合通信 Collective 數(shù)據(jù)移動 數(shù)據(jù)聚集 同步基于pointtopoint構(gòu)建MPI環(huán)境管理函數(shù)組 上下文和通信空間 通信域的管理實例 2020年1月 29 55 PointtoPoint通信 單個進程對單個進程的通信 重要且復雜術(shù)語Blocking 阻塞 一個例程須等待操作完成才返回 返回后用戶可以重新使用調(diào)用中所占用的資源 Non blocking 非阻塞 一個例程不必等待操作完成便可返回 但這并不意味著所占用的資源可被重用 Local 本地 過程的完成僅依賴于本地正在執(zhí)行的進程 Non local 非本地 如果過程的完成要求其他進程的MPI過程完成 2020年1月 30 55 BlockingSend intMPI Send void buf intcount MPI Datatypedatatype intdest inttag MPI Commcomm INbuf發(fā)送緩沖區(qū)的起始地址INcount要發(fā)送信息的元素個數(shù)INdatatype發(fā)送信息的數(shù)據(jù)類型INdest目標進程的rank值INtag消息標簽INcomm通信域 2020年1月 31 55 BlockingReceive intMPI Recv void buf intcount MPI Datatypedatatype intsource inttag MPI Commcomm MPI Status status OUTbuf發(fā)送緩沖區(qū)的起始地址INcount要發(fā)送信息的元素個數(shù)INdatatype發(fā)送信息的數(shù)據(jù)類型INdest目標進程的rank值INtag消息標簽INcomm通信域OUTstatusstatus對象 包含實際接收到的消息的有關(guān)信息 2020年1月 32 55 MPI消息 MPI消息包括信封和數(shù)據(jù)兩個部分 信封指出了發(fā)送或接收消息的對象及相關(guān)信息 而數(shù)據(jù)是本消息將要傳遞的內(nèi)容數(shù)據(jù) 信封 2020年1月 33 55 2020年1月 34 55 消息數(shù)據(jù) 由count個類型為datatype的連續(xù)數(shù)據(jù)空間組成 起始地址為buf不是以字節(jié)數(shù) 而是以元素的個數(shù)指定消息的長度count可以是零 這種情況下消息的數(shù)據(jù)部分是空的MPI基本數(shù)據(jù)類型相應于宿主語言的基本數(shù)據(jù)類型 2020年1月 35 55 MPI基本數(shù)據(jù)類型 2020年1月 36 55 MPI標識一條消息的信息包含四個域 Source 發(fā)送進程隱式確定 由進程的rank值唯一標識Destination Send函數(shù)參數(shù)確定Tag Send函數(shù)參數(shù)確定 用于識別不同的消息 0 UB UB MPI TAG UB 32767 Communicator 缺省MPI COMM WORLDGroup 有限 N 有序 Rank 0 1 2 N 1 Contex Super tag 用于標識該通訊空間 消息信封 2020年1月 37 55 status參數(shù) 當使用MPI ANY SOURCE或 和MPI ANY TAG接收消息時如何確定消息的來源source和tag值呢 在C中 結(jié)構(gòu) status MPI SOURCE status MPI TAG 在Fortran中 數(shù)組 source status MPI SOURCE tag status MPI TAG Status還可用于返回實際接收到消息的長度intMPI Get count MPI Statusstatus MPI Datatypedatatype int count INstatus接收操作的返回值 INdatatype接收緩沖區(qū)中元素的數(shù)據(jù)類型 OUTcount接收消息中的元素個數(shù) 2020年1月 38 55 消息匹配 接收buffer必須至少可以容納count個由datatype參數(shù)指明類型的數(shù)據(jù) 如果接收buf太小 將導致溢出 出錯 消息匹配參數(shù)匹配dest tag comm source tag commSource MPI ANY SOURCE 接收任意處理器來的數(shù)據(jù) 任意消息來源 Tag MPI ANY TAG 匹配任意tag值的消息 任意tag消息 Source destination是允許的 但是不安全的 可能導致死鎖 消息傳送被限制在同一個communicator 在send函數(shù)中必須指定唯一的接收者 Push pull通訊機制 2020年1月 39 55 分析greetings include include mpi h main intargc char argv intnumprocs 進程數(shù) 該變量為各處理器中的同名變量 存儲是分布的 intmyid 我的進程ID 存儲也是分布的 MPI Statusstatus 消息接收狀態(tài)變量 存儲也是分布的 charmessage 100 消息buffer 存儲也是分布的 初始化MPI MPI Init 2020年1月 40 55 分析greetings if myid 0 建立消息 sprintf message Greetingsfromprocess d myid 發(fā)送長度取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 Endmain 2020年1月 41 55 Greetings執(zhí)行過程 假設進程數(shù)為3 進程0 進程1 進程2 rank 0 rank 1 rank 2 Recv Recv Send Send 問題 進程1和2誰先開始發(fā)送消息 誰先完成發(fā)送 2020年1月 42 55 運行g(shù)reetings dair node01 mpicc ogreetinggreeting c dair node01 mpirun np4greetingGreetingsfromprocess1 Greetingsfromprocess2 Greetingsfromprocess3 dair node01 計算機打印字符 我們輸入的命令 2020年1月 43 55 最基本的MPI MPI調(diào)用借口的總數(shù)雖然龐大 但根據(jù)實際編寫MPI的經(jīng)驗 常用的MPI調(diào)用的個數(shù)非常有限 上面介紹的是6個最基本的MPI函數(shù) MPI Init MPI Comm size MPI Comm rank MPI Send MPI Recv MPI Finalize MPI Init 并行代碼 MPI Fainalize 只能有串行代碼 2020年1月 44 55 現(xiàn)在您已經(jīng)能夠用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人薪資收入及社保繳納情況證明(7篇)
- 體育賽事組織與推廣合作合同
- 文化創(chuàng)意產(chǎn)業(yè)品牌代理合作協(xié)議
- 深度分析2025年經(jīng)濟法考試題型試題及答案
- 經(jīng)濟法概論核心考點及試題及答案
- 崗位要求測試題及答案
- 發(fā)電廠消防試題及答案
- 水利水電工程對外交流試題及答案
- 2025年市政工程考試復習策略試題及答案
- 食堂顧客忠誠計劃協(xié)議
- 2024年西安交通大學少年班初試數(shù)學試題真題(答案詳解)
- 武漢市2024屆高中畢業(yè)生四月調(diào)研考試(四調(diào))政治試卷(含答案)
- 第七章-瀝青課件
- 2024中國醫(yī)藥行業(yè)人才發(fā)展報告-智聯(lián)招聘-202404
- 全新版《大學英語》綜合教程-第一冊-教案
- 2024年01月青海大學附屬醫(yī)院招考聘用116人預選筆試近6年高頻考題難、易錯點薈萃答案帶詳解附后
- 公司產(chǎn)品與服務的特點與優(yōu)勢
- 政協(xié)專項調(diào)研方案
- 基于數(shù)字孿生的產(chǎn)線設備實時監(jiān)控方法與實現(xiàn)
- 年產(chǎn)500噸IMD高端環(huán)保油墨研發(fā)生產(chǎn)項目環(huán)境信息公示
- 為什么你的學生不思考
評論
0/150
提交評論