《云計算和大數據技術 概念應用與實戰(zhàn)》第5章面向計算-MPI_第1頁
《云計算和大數據技術 概念應用與實戰(zhàn)》第5章面向計算-MPI_第2頁
《云計算和大數據技術 概念應用與實戰(zhàn)》第5章面向計算-MPI_第3頁
《云計算和大數據技術 概念應用與實戰(zhàn)》第5章面向計算-MPI_第4頁
《云計算和大數據技術 概念應用與實戰(zhàn)》第5章面向計算-MPI_第5頁
已閱讀5頁,還剩38頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

《云計算和大數據技術概念應用與實戰(zhàn)》第5章面向計算—MPIMPI的架構和特點MPI概述任務一MPICH并行環(huán)境的建立任務二MPI分布式程序設計內容導航CONTENTS

MPI的架構和特點云計算的定義中計算資源池的形成是十分重要的一項技術,MPI的核心工作就是實現大量服務器計算資源的整合輸出。MPI為分布式程序設計人員提供了最大的靈活性和自由度,但隨之而來的代價是編程的復雜性,程序設計人員需要自己實現任務在節(jié)點中的分配,并保證節(jié)點間的協調工作,當面對上千個節(jié)點的分布式系統時這種編程模式會成為程序員的噩夢。目前MPI的應用領域主要還是科學計算領域。MPI的架構

MPI的架構和特點MPI的特點程序編寫靈活,功能強大支持多種編程語言MPI對計算的支持強大,但對文件的支持較弱MPI需要程序設計人員自己實現求解問題的并行化MPI沒有提供計算失效的處理機制網絡是MPI的主要瓶頸MPI的架構和特點MPI概述任務一MPICH并行環(huán)境的建立任務二MPI分布式程序設計內容導航CONTENTS任務一MPICH并行環(huán)境的建立

MPICH并行環(huán)境的建立主要就要完成以下3項工作。(1)配置好NFS服務,實現所有節(jié)點對主節(jié)點指定文件夾的共享,該文件夾為MPICH的安裝位置、數據和程序的存儲位置,這樣就可以避免在每個節(jié)點安裝MPICH,啟動計算時也可以避免每次向各個節(jié)點分發(fā)程序。(2)配置好節(jié)點間的互信,這一步是為了實現集群內部各節(jié)點間無需密碼訪問。(3)安裝編譯環(huán)境,編譯運行MPICH。子任務1系統環(huán)境設置【任務內容】

本子任務完成4臺節(jié)點機的系統環(huán)境設置、安全設置,配置hosts,配置IP地址,檢查網絡是否連通,安裝必要的開發(fā)工具包。子任務1系統環(huán)境設置【實施步驟】1、關閉NetworkManager服務2、配置每臺節(jié)點機的IP地址,測試其連通性。3、為了方便操作,每臺節(jié)點機都關閉系統放火墻4、配置每臺節(jié)點機的hosts文件5、安裝gcc、jdk等軟件包,MPICH需要每臺節(jié)點機安裝編譯環(huán)境子任務2用戶創(chuàng)建和ssh設置【任務內容】本完成各節(jié)點機創(chuàng)建mpi用戶,完成各節(jié)點之間ssh無密碼互訪設置。子任務2用戶創(chuàng)建和ssh設置【實施步驟】1、分別在四臺節(jié)點機上創(chuàng)建用戶mpi2、生成ssh密鑰證書3、復制含有公鑰的證書到node1,node2,node3,node4節(jié)點機上4、復制含有私鑰的證書到node2,node3,node4節(jié)點機上子任務3NFS服務的安裝【任務內容】

NFS是NetworkFileSystem的縮寫,即網絡文件系統,是一種使用于分散式文件系統的協定。NFS的功能是通過網絡讓不同的機器、不同的操作系統能夠彼此分享個別的數據,讓應用程序在客戶端通過網絡訪問位于服務器磁盤中的數據,是在類Unix系統間實現磁盤文件共享的一種方法。本子任務完成NFS服務的安裝、配置和使用。子任務3NFS服務的安裝【實施步驟】1、安裝NFS服務需要nfs-utils和rpcbind兩軟件包2、編輯/etc/exports文件3、登錄node1節(jié)點機,啟動rpcbind服務和nfs服務4、修改配置文件后需要重新共享目錄5、分別登錄node2,node3,node4節(jié)點機掛載nfs共享目錄子任務4MPICH編譯運行【任務內容】

MPICH是MPI(Message-PassingInterface)的一個應用實現,是用于并行運算的工具。因特網提供開源代碼下載,需要相應的編譯包編譯。本子任務完成MPICH軟件包的編譯、運行測試。子任務4MPICH編譯運行【實施步驟】1、上傳軟件包到node1節(jié)點機的/root目錄下2、安裝mpich3、進入MPICH解壓后的目錄,執(zhí)行配置、編譯4、復制測試例子到/home/mpi目錄下,并修改文件屬性5、測試運行MPI的架構和特點MPI概述任務一MPICH并行環(huán)境的建立任務二MPI分布式程序設計內容導航CONTENTS任務二MPI分布式程序設計在并行計算時代人們更關注的是計算能力,一切以計算為中心,計算力成為了首要追逐的目標,因此人們通過將多臺服務器連接起來實現計算能力的提升,這種計算模式非常適合從事計算密集型的任務。雖然云計算時代單純的計算密集型的任務會越來越少,但了解并行計算時代的程序設計方法對我們理解云計算中的一些技術基礎和理念是有好處的,我們在實際研究工作中也體會到這點,所以本任務分幾個子任務完成MPI并行程序的編寫運行,了解采用MPI進行并行程序設計的核心技術,使讀者能由并行計算世界逐步進入云計算世界。子任務1簡單并行程序的編寫【任務內容】

MPICH提供了編寫并行程序的接口函數,簡化了并行程序的編寫,本任務完成一個最簡單的并行程序的編寫。子任務1簡單并行程序的編寫【相關知識】并行初始化函數:intMPI_Init(int*argc,char***argv)參數描述:argc為變量數目,argv為變量數組,兩個參數均來自main函數的參數。MPI_Init()是MPI程序的第一個函數調用,標志著并行程序部分的開始,它完成MPI程序的初始化工作,所有MPI程序并行部分的第一條可執(zhí)行語句都是這條語句。子任務1簡單并行程序的編寫【相關知識】并行結束函數:intMPI_Finalize()MPI_Finalize()是并行程序并行部分的最后一個函數調用,出現該函數后表明并行程序的并行部分的結束。一旦調用該函數后,將不能再調用其他的MPI函數,此時程序將釋放MPI的數據結構及操作。這條語句之后的代碼仍然可以進行串行程序的運行。該函數的調用較簡單,沒有參數。子任務1簡單并行程序的編寫【實施步驟】1、編寫并行程序以mpi用戶登錄任意節(jié)點機,編寫程序2、編譯運行編譯程序,并運行子任務2獲取進程標志和機器名【任務內容】

并行程序設計需要協調大量的計算節(jié)點參與計算,而且需要將任務分配到各個節(jié)點并實現節(jié)點間的數據和信息交換,面對成百上千的不同節(jié)點如沒有有效的管理將面臨計算的混亂,并行計算的實現將無法完成,因此各個進程需要對自己和其他進程進行識別和管理,每個進程都需要有一個唯一的ID,用于并行程序解決“我是誰”的問題,從而實現對大量計算節(jié)點的管理和控制,有效地完成并行計算任務。因此獲取進程標識和機器名是MPI需要完成的基本任務,各節(jié)點根據自己的進程ID判斷哪些任務需要自己完成。本任務完成獲取進程標志和機器名并行程序的編寫。子任務2獲取進程標志和機器名【相關知識】獲得當前進程標識函數:intMPI_Comm_rank(MPI_Commcomm,int*rank)comm為該進程所在的通信域句柄;rank為調用這一函數返回的進程在通信域中的標識號。獲取通信域包含的進程總數函數:intMPI_Comm_size(MPI_Commcomm,int*size)comm為通信域句柄,size為函數返回的通信域comm內包括的進程總數。子任務2獲取進程標志和機器名【相關知識】獲得本進程的機器名函數:intMPI_Get_processor_name(char*name,int*resultlen)name為返回的機器名字符串,resultlen為返回的機器名長度。這個函數通過字符指針*name、整型指針*resultlen返回機器名及機器名字符串的長度。MPI_MAX_PROCESSOR_NAME為機器名字符串的最大長度,它的值為128。子任務2獲取進程標志和機器名【實施步驟】1、編寫并行程序以mpi用戶登錄任意節(jié)點機,編寫程序,操作如下。$cd~/examples/(代碼參考教材)2、編譯運行編譯運行,操作如下。4個進程在4臺節(jié)點機上運行:$mpirun-n4-fnodes./who子任務3有消息傳遞功能的并行程序【任務內容】

消息傳遞是MPI編程的核心功能,也是基于MPI編程的設計人員需要深刻理解的功能,由于MPI的消息傳遞功能為我們提供了靈活方便的節(jié)點間數據交換和控制能力,掌握好MPI消息傳遞編程方法就掌握了MPI并行程序設計的核心。MPI為程序設計者提供了豐富的消息傳遞函數封裝,本任務完成一個簡單的消息傳遞功能的并行程序的編寫。子任務3有消息傳遞功能的并行程序【相關知識】消息發(fā)送函數intMPI_Send(void*buf,intcount,MPI_Datatypedatatype,

intdest,inttag,MPI_Commcomm)buf為發(fā)送緩沖區(qū)的起始地址;count將發(fā)送的數據的個數;datatype發(fā)送數據的數據類型;dest為目的進程標識號;tag為消息標志;comm為通信域。子任務3有消息傳遞功能的并行程序【相關知識】消息接收函數:intMPI_Recv(void*buf,intcount,MPI_Datatypedatatype,intsource,inttag,MPI_Commcomm,MPI_Status*status)buf為接收緩沖區(qū)的起始地址;count為最多可接收的數據個數;datatype為接收數據的數據類型;source為接收數據的來源進程標識號;tag為消息標識,應與相應發(fā)送操作的標識相匹配;comm為本進程和發(fā)送進程所在的通信域;status為返回狀態(tài)。子任務3有消息傳遞功能的并行程序【實施步驟】1、編寫并行程序以mpi用戶登錄任意節(jié)點機,編寫程序,操作如下。$cd~/examples/(代碼參考教材)2、編譯運行編譯運行,操作如下。4個進程在4臺節(jié)點機上運行:$mpirun-n4-fnodes./message子任務4MonteCarlo法在并行程序設計中的應用【任務內容】蒙特卡羅(MonteCarlo)方法,又稱隨機抽樣或統計試驗方法,屬于計算數學的一個分支,它是在20世紀40年代中期為了適應當時原子能事業(yè)的發(fā)展而發(fā)展起來的。

主要思想是通過隨機試驗的方法,得到所要求解的問題(某種事件)出現的頻率,用它們作為問題的解。簡而言之,就是用頻率來代替概率,當實驗樣本足夠大的時候,就可以得到比較精確的解結果?!鞠嚓P知識】根據蒙特卡羅方法的思想,我們以坐標原點為圓心作一個直徑為1的單位圓,再作一個正方形與此圓相切(如圖所示)。在這個正方形內隨機產生count個點,判斷是否落在圓內,將落在圓內的點數目計作m,根據概率理論,m與count的比值就近似可以看成圓和正方形的面積之比,由于圓的半徑為,正方形的邊長為1,我們有,則值可以用以下公式計算:。本節(jié)就采用這一方法來計算的近似值。子任務4MonteCarlo法在并行程序設計中的應用計算

值示意圖【實施步驟】2、編譯運行編譯運行,操作如下。4個進程在4臺節(jié)點機上運行:$mpirun-n4-fnodes./mtpi子任務4MonteCarlo法在并行程序設計中的應用1、編寫并行程序以mpi用戶登錄任意節(jié)點機,編寫程序,操作如下。$cd~/examples/子任務5并行計算中節(jié)點間的Reduce操作【任務內容】

Map/Reduce是Google引以自豪的技術之一,Map/Reduce技術被認為能很好地實現計算的并行化,成為云計算中的一項重要技術,其實Map/Reduce也不是Google的創(chuàng)新,在MPI中就一直提供對各節(jié)點數據的歸約(Reduce)操作,可以方便地完成多個節(jié)點向主節(jié)點的歸約,并提供了相應的函數支持。本任務完成在MPI中實現Reduce操作?!救蝿战馕觥课覀儾捎肕onte-Carlo法計算函數積分的例子來說明MPI中Reduce函數的使用方法。采用這一方法來計算y=x2在0~10之間的積分值。蒙特卡羅計算積分的方法子任務5并行計算中節(jié)點間的Reduce操作該算法的思想是通過隨機數把函數劃分成小的矩形塊,通過求矩形塊的面積和來求積分值,我們生成n個0~10之間的隨機數,求出該隨機數所對應的函數值作為矩形的高,由于隨機數在n很大時會近似平均分布在0~10區(qū)間,所以矩形的寬取相同的值為,對所有的矩形塊求和即可得函數的積分值。MPI函數歸約函數:intMPI_Reduce(void*sendbuf,void*recvbuf,intcount,MPI_Datatypedatatype,MPI_Opop,introot,MPI_Commcomm)sendbuf為數據發(fā)送緩沖區(qū);recvbuf為數據接收緩沖區(qū);count為發(fā)送的數據個數;datatype為發(fā)送的數據類型;op為執(zhí)行的歸約操作;root指定根節(jié)點;comm為通信域。子任務5并行計算中節(jié)點間的Reduce操作MPI中的歸約名含義MPI_MAX求最大值MPI_MIN求最小值MPI_SUM求和MPI_PROD求積MPI_LAND邏輯與MPI_BAND按位與子任務5并行計算中節(jié)點間的Reduce操作MPI_Reduce提供了多種歸約操作MPI中的歸約名含義MPI_LOR邏輯或MPI_BOR按位或MPI_LXOR邏輯異或MPI_BXOR按位異或MPI_MAXLOC最大值且相應位置MPI_MINLOC最小值且相應位置【實施步驟】2、編譯運行編譯運行,操作如下。4個進程在4臺節(jié)點機上運行:$mpirun-n4-fnodes./inte1、編寫并行程序以mpi用戶登錄任意節(jié)點機,編寫程序,操作如下。$cd~/examples/子任務5并行計算中節(jié)點間的Reduce操作設計MPI并行程序時的注意事項

并行程序的設計與串行程序的設計有很大的不同,需要考慮的情況更多、更復雜,因此我們編寫MPI并行程序時要注意以下的一些問題,更多的經驗需要大家在實踐中進一步總結和提高。(1)并行程序的可以執(zhí)行代碼和MPICH安裝文件必須在每個節(jié)點的相同路徑有副本,這可以通過復制或NFS共享等方法來實現。(2)并行程序中main函數必須帶參數,MPI_Init()函數需要這兩個參數,這與一般串行程序不同。設計MPI并行程序

溫馨提示

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

最新文檔

評論

0/150

提交評論