《第2講-并行計算框架及案例課件》由會員分享,可在線閱讀,更多相關《第2講-并行計算框架及案例課件(47頁珍藏版)》請在裝配圖網上搜索。
1、單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,*,單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,*,單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,*,單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,*,單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,*,單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,*,單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,*,單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,*,單擊此處
2、編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,單擊此處編輯母版標題樣式,JP Navarro,*,并行計算產生背景,整個大的串行任務,分解,各個并行執(zhí)行部分,需做大量運算,持續(xù)時間長,根據大任務內在相關性,各個相對獨立模塊部分并行執(zhí)行,節(jié)約運算時間,并行計算產生背景整個大的串行任務分解各個并行執(zhí)行部分需做大量,并行計算是相對于串行計算,并行計算是相對于串行計算,并行計算概念,并行計算概念,并行計算-高性能計算,并行計算,(Parallel Computing,),高端計算,(High-end Paral
3、lel Computing),高性能計算,(High Performance Computing),超級計算,(Super Computing),任何高性能計算和超級計算都離不開使用并行技術,The simultaneous use of more than one computer to solve a problem.,由,由運行在多個部件上的小任務合作來求解一個規(guī)模很大的計算問題的一種方法,4,并行計算-高性能計算并行計算(Parallel Compu,并行計算的應用需求,5,并行計算的應用需求5,計算科學,與傳統的兩種科學,即,理論科學,和,實驗科學,,并列被認為是人類認識自然的三大支
4、柱,他們彼此相輔相成地推動科學發(fā)展與社會進步。在許多情況下,或者是理論模型復雜甚至理論尚未建立,或者實驗費用昂貴甚至無法進行時,計算就成了求解問題的唯一或主要的手段。,并行計算的應用需求,6,計算科學與傳統的兩種科學,即理論科學和實驗科學,并列被認為是,程序級并行,子程序級并行,語句級并行,操作級并行,微操作級并行,并行粒度,細,粗,并行的層次,后三層大都由硬件和編譯器負責處理,程序員通常處理前兩層的并行,程序級并行并行粒度細粗并行的層次后三層大都由硬件和編譯器負,硬件(并行機),組成要素:節(jié)點,互聯網絡,內存,結構模型:,PVP,SMP,DSM,MPP,COW,并行算法設計(略),并行編程環(huán)
5、境,系統環(huán)境:常見主流,Unix/Linux,操作系統,編程語言:,Fortran 77/90/9,C/C+,并行計算基本條件,硬件(并行機)并行計算基本條件,并行計算機的分類,SISD,SIMD,MIMD,并行計算科學中主要研究的是空間上的并行問題??臻g上的并行導致了兩類并行機的產生,按照,Flynn,的說法分為:單指令流多數據流(,SIMD,)和多指令流多數據流(,MIMD,)。我們常用的串行機也叫做單指令流單數據流(,SISD,)。,并行計算機的分類SISDSIMDMIMD并行計算科學中主要研,10,并行計算機體系結構,組成要素,結點,(node):一個或多個處理器組成,互聯網絡,(in
6、terconnetct network):連接結點,內存,(memory):多個存儲模塊組成,10并行計算機體系結構 組成要素 結點(node):一個或多,1,并行計算框架,PVP,(,Parallel Vector Processor,,,并行向量處理機),代表:,銀河,I,NEC,地球模擬器,1并行計算框架PVP(Parallel Vector Pr,2,SMP,(,Symmetric Multiprocessor,,,對稱多處理機),單一操作系統管理,共享內存及計算機的其他資源,.,代表:,曙光,1,號,IBM RS/6000,并行計算框架,2SMP(Symmetric Multipro
7、cessor,4,MPP,(,Massively Parallel Processor,,,大規(guī)模并行處理機),每個結點均有自己的,操作系統,獨立的內存,.,代表:,Intel Option Red,IBM SP2,Dawning 1000,并行計算框架,4MPP(Massively Parallel Proces,5,COW,(,Cluster of Workstation,,,集群工作站),代表:,IBM Cluster 1350/1600,曙光,2000,3000,目前分布式計算、云計算體系,的原型,并行計算框架,5COW(Cluster of Workstation,集群,Google
8、,云計算數據中心,Google云計算數據中心,并行計算機發(fā)展食物鏈,并行計算機發(fā)展食物鏈,并行計算的性能分析,2,、并行效率,并行計算的性能分析,并行語言的實現方式和實現難度的關系圖,改動多少,實現難度,提供并行庫,擴充語法成分,新語言,并行程序設計方式:,設計全新的并行語言,擴展串行語言語法,使其支持并行特征,為串行語言提供可調用的并行庫,MPI,(,M,essage,P,assing,I,nterface,消息傳遞接口,):,是消息傳遞函數庫的標準規(guī)范,采用,提供并行庫,的方式,MPI,產生背景,并行語言的實現方式和實現難度的關系圖改動多少實現難度提供并行,一個簡單的,MPI,程序,Hel
9、lo.c,#include“mpi.h”,/*,導入包含有,MPI,庫函數的頭文件,*,/,#include,/*,導入,C,語言頭文件,*,/,/*,*,使用,C,語言作為宿主語言,調用,MPI,庫編寫簡單,Hello.c,并行程序,*,/,int main(int argc,char*argv),MPI_init,(,/*MPI,庫函數,*,/,printf(“hello parallel world!n”);,/*C,庫函數,*,/,MPI_Finalize,();,/*MPI,庫函數,*,/,return 0;,MPI_Init();,并行代碼;,MPI_Fainalize();,只能
10、有串行代碼;,一個簡單的MPI程序 Hello.c#include“,啟動機器集群中的,3,個機器節(jié)點:,編譯,Hello.c,程序:,執(zhí)行,Hello,程序:,注意:可執(zhí)行程序,Hello.o,必須同時位于,3,個機器節(jié)點的,test3,目錄下。,一個簡單的,MPI,程序,Hello.c,運行:,啟動機器集群中的3個機器節(jié)點:一個簡單的MPI程序 He,MPI,消息,消息,(message),:,MPI,程序中在進程間通信所傳送的所有信息稱為消息。,作用:,控制整個集群內的所有機器節(jié)點進行協同工作,對底層異構系統進行抽象,實現程序可移植性,組成:,消息信封,消息內容,MPI消息消息(mess
11、age):MPI程序中在進程間通信,MPI,消息傳遞過程,分三個階段:,消息裝配,消息發(fā)送,消息拆卸,數據發(fā)送緩沖區(qū),消息裝配,消息傳遞,消息拆卸,數據接收緩沖區(qū),MPI,消息傳遞過程,MPI消息傳遞過程分三個階段:數據發(fā)送緩沖區(qū)消息裝配消息傳遞,MPI,常用六個基本函數,MPI_Init();,MPI_Comm_size();,MPI_Comm_rank();,MPI_Send();,MPI_Recv();,MPI_Finalize();,MPI常用六個基本函數MPI_Init();,int MPI_Init(int*argc,char*argv),啟動,MPI,環(huán)境,標志并行代碼的開始.,
12、并行代碼之前,第一個,mpi,函數(除,MPI_Initialize(),外).,接收,main,函數傳遞的參數,.,int MPI_Finalize(void),標志并行代碼的結束,結束除主進程外其它進程.,int MPI_Init(int*argc,char*,int MPI_Comm_size(MPI_Comm comm,int*size),獲得通信空間,comm,中規(guī)定的組包含的進程的數量.,int MPI_Comm_rank(MPI_Comm comm,int*rank),得到本進程在通信空間,comm,中的,rank,值,即在組中的邏輯編號(從0開始,類似于進程,ID,).,int
13、 MPI_Comm_size(MPI_Comm c,int MPI_Send(void *buff,int count,MPI_Datatype datatype,int dest,int tag,MPI_Comm comm),標準阻塞發(fā)送消息,buff,:消息發(fā)送緩沖區(qū),count:,指定數據類型,MPI_Datatype,的消息個數,而不是字節(jié)數,.,dest:,發(fā)送消息的目的地,tag:,消息標簽,comm:,通信空間或通信域,int MPI_Send(void *buff,int,int MPI_Recv(void *buff,int count,MPI_Datatype dataty
14、pe,int source,int tag,MPI_Comm comm,MPI_Status *status),標準阻塞接收消息,buff,:消息接收緩沖區(qū),count:,指定數據類型,MPI_Datatype,的消息個數,而不是字節(jié)數,.,source:,發(fā)送消息源,tag:,消息標簽,comm:,通信空間或通信域,status,:記錄消息接收狀態(tài)(成功或失?。?int MPI_Recv(void *buff,int,簡單消息發(fā)送與接收案例,HelloWord.c,#include“mpi.h”,main(int argc,char*argv),int,p;,/*,進程數,該變量為各處理器中
15、的同名變量*,/,int,my_rank;,/*,我的進程,ID,存儲也是分布的 *,/,MPI_Status,status;,/*,消息接收狀態(tài)變量,存儲也是分布 *,/,char,message100;,/*,消息,buffer,存儲也是分布的 *,/,MPI_Init,(,/*,初始化,MPI*/,/*,該函數被各進程各調用一次,得到自己的進程,rank,值*,/,MPI_Comm_rank,(MPI_COMM_WORLD,/*,該函數被各進程各調用一次,得到進程數*,/,MPI_Comm_size,(MPI_COMM_WORLD,簡單消息發(fā)送與接收案例HelloWord.c#inclu
16、d,if(my_rank!=0),/*,建立消息*,/,sprintf(message,“Hello Word,I am%d!,my_rank);,/*,發(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=2;source+),/*,指定,3,個進程的并行環(huán)境*,/,MPI_Recv,(message,100,MPI_CHAR,source,99,MPI_COMM_WORLD,printf(“%sn,message);,MPI_Finalize();,/*,關閉,MPI,標志并行代碼段的結束*,/,/*main*/,簡單消息發(fā)送與接收案例,HelloWord.c,if(my_rank!=0)/*,HelloWord.c,的編譯與運行,mpicc HelloWord.c,默認生成,a.out,的可執(zhí)行代碼.,mpicc o HelloWord Hello