




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、1 云計算中的并行數(shù)據(jù)處理朱虎明2目錄l背景背景l(fā)并行處理硬件系統(tǒng)并行處理硬件系統(tǒng)l并行處理軟件系統(tǒng)并行處理軟件系統(tǒng)l消息傳遞接口消息傳遞接口l大規(guī)模異構(gòu)并行架構(gòu)大規(guī)模異構(gòu)并行架構(gòu)31. 背景背景l(fā)物聯(lián)網(wǎng)、云計算=?l麥肯錫:l“數(shù)據(jù),已經(jīng)滲透到當(dāng)今每一個行業(yè)和業(yè)務(wù)職能領(lǐng)域,成為重要的生產(chǎn)因素。人們對于海量數(shù)據(jù)的挖掘和運用,預(yù)示著新一波生產(chǎn)率增長和消費者盈余浪潮的到來?!?4BigDatalMay 2011,麥肯錫 ,Big Data:The next generation frontier for innovation, competition and productivity l2012年
2、3月,美國奧巴馬政府宣布投資2億美元啟動“大數(shù)據(jù)研究和發(fā)展計劃”, l2012年12月24日 人民日報發(fā)表當(dāng)“大數(shù)據(jù)”來敲門 5國內(nèi)l2012年9月計算機(jī)學(xué)會通訊刊登了李國杰院士等撰寫的學(xué)術(shù)界談大數(shù)據(jù)的專題文章 l人民日報發(fā)表當(dāng)“大數(shù)據(jù)”來敲門等相關(guān)文章 l第一屆中國云計算大會 ,2009年5月l主辦單位:中國電子學(xué)會l第五屆,指導(dǎo)單位:工業(yè)和信息化部、國家發(fā)展和改革委員會、科學(xué)技術(shù)部 6領(lǐng)域1.搜索引擎2.電子商務(wù) (淘寶網(wǎng),)3.生物4.天氣預(yù)報5.核物理6. 3D動漫7.圖像處理7遙感大數(shù)據(jù)l“十二五”期間的目標(biāo)100顆衛(wèi)星在軌穩(wěn)定運行l(wèi)4月26日,我國高分辨率對地觀測系統(tǒng)首發(fā)星“高分一
3、號”成功發(fā)射 l2012年,我國首顆高分辨率測繪衛(wèi)星“資源三號”在太原衛(wèi)星發(fā)射 ;每天接收、處理和存儲的數(shù)據(jù)達(dá)到1790GB lNASA在2011 年10 月1 日至2012年9 月30 日期間統(tǒng)計lEOSDIS 平均每日數(shù)據(jù)存檔增長為6.4 TB/d, 終端用戶平均每日分發(fā)數(shù)據(jù)量為17.1TB/d, l總存檔數(shù)據(jù)量達(dá)7.4 PB.8遙感的數(shù)據(jù)處理平臺l加拿大PCI Geomatica l美國的ENVI l美國ERDAS公司的ERDAS IMAGING l法國的像素工廠(Pixel Factory) l中國測繪科學(xué)研究院研制的PixelGrid 9并行遙感數(shù)據(jù)分析lESRI provides
4、several cloud-based GIS solutions: ArcGIS Server on Amazon EC2, l云檢索 l 云存儲l 云訂購 l云服務(wù)l 云發(fā)布10IBM超級計算機(jī)再次戰(zhàn)勝人類 大數(shù)據(jù)分析l由IBM和美國德克薩斯大學(xué)聯(lián)合研制的超級計算機(jī)“沃森”(Watson)近日在美國最受歡迎的智力競猜電視節(jié)目危險邊緣中擊敗該節(jié)目歷史上兩位最成功的選手肯-詹寧斯和布拉德-魯特,成為危險邊緣節(jié)目新的王者。lWatson由90臺IBM Power 750服務(wù)器和lDeepQA分析軟件組成,(2880 cores and 16 Terabytes of memory )11技術(shù)分析
5、lWatson通過攝像頭拍下屏幕上的文字,然后進(jìn)行光學(xué)識別,得到以文字而不是圖像形式存儲的題目文本:l信息檢索能力+信息的提取以及分析+自動推理+Natural Language Processing lwatson需要一個語音合成引擎將這個答案的文本轉(zhuǎn)換成語音并播放出來就可以了。 12大數(shù)據(jù)與云計算 l以“大數(shù)據(jù)大帶寬推動云計算應(yīng)用與創(chuàng)新”為主題的第五屆中國云計算大會 l在以客戶為中心,來構(gòu)建大網(wǎng)絡(luò)和大數(shù)據(jù),最終以云計算服務(wù)模式來交付,以達(dá)到最終的愿景:即正確的時間、精確的位置、適當(dāng)?shù)姆椒ê徒K端,讓客戶得到所需的服務(wù)?!?l采集l存儲l分析13大數(shù)據(jù)與云計算14目錄l背景背景l(fā)并行處理硬件系
6、統(tǒng)并行處理硬件系統(tǒng)l并行處理軟件系統(tǒng)并行處理軟件系統(tǒng)l消息傳遞接口消息傳遞接口l大規(guī)模異構(gòu)并行架構(gòu)大規(guī)模異構(gòu)并行架構(gòu)15 世界Top50016IBM Sequoia(紅杉) compute nodes :32*16*2*96=9830417 國內(nèi)Top10018 天河一號 l103個機(jī)柜、占地面積近千平方米、總重量155噸 ,每年電費可高達(dá)1800萬元 l計算結(jié)點B(Intel XeonEP+NVIDIA GPU):7168個,含14336個CPU、7168個GPU;l點點通信帶寬40Gbps ;延遲1.2us 總?cè)萘繛?PB;19國產(chǎn)三臺千萬億次機(jī) 名稱名稱完成時間完成時間研制單位研制單位主
7、要特點主要特點天河1號2010年10月國防科大、浪潮公司等采用異構(gòu)混合體系結(jié)構(gòu),部分采用國產(chǎn)飛騰處理器,峰值性能每秒4700萬億次,實測Linpack性能2507萬億次,在2010年11月中發(fā)布的世界高性能計算機(jī)TOP500榜中排在第一位。曙光6000(星云)2010年5月中科院計算所、曙光公司等采用混合體系結(jié)構(gòu),系統(tǒng)峰值性能每秒3000萬億次,Linpack性能為1.27千萬億次每少,功耗2600千瓦,在2010年6月份世界TOP500中排名第二。下一步將采用國產(chǎn)處理器龍芯3B。神威藍(lán)光神威藍(lán)光2010年年底年年底江南計算所江南計算所全部采用自主的多核高性能處理器實現(xiàn),在我們?nèi)坎捎米灾鞯亩?/p>
8、核高性能處理器實現(xiàn),在我們國家高性能計算機(jī)發(fā)展史上具有里程碑的意義,國家高性能計算機(jī)發(fā)展史上具有里程碑的意義,同時探索萬萬億次體系結(jié)構(gòu)和高性能技術(shù)。同時探索萬萬億次體系結(jié)構(gòu)和高性能技術(shù)。20國家超算中心l上海超級計算中心l天津超級計算中心 (投資6億元 )l深圳超級計算中心(總投資8億元) l長沙超級計算中心( 總投資7.2億元) l濟(jì)南超級計算中心 (投資6億元 )l廣州超級計算中心 (投資16億元 )l 。21高校高性能計算平臺建設(shè)l南京大學(xué)高性能計算機(jī)系統(tǒng)南京大學(xué)高性能計算機(jī)系統(tǒng) l花費二千萬元建成的。 在“2009年第七,在全國高校系統(tǒng)“科學(xué)計算/教育”領(lǐng)域中排名第一。 南京微結(jié)構(gòu)國家
9、實驗室 l吉林大學(xué)高性能計算中心吉林大學(xué)高性能計算中心 1300萬元萬元 , 40萬億次,在2010年6月TOP500 第239位,居全國高校首位。 l清華大學(xué)清華大學(xué) 3千萬元,100T , CPU計算峰值可達(dá)104萬億, GPGPU部分的計算峰值可達(dá)68萬億次/秒,百萬億次超算系統(tǒng)在9個機(jī)柜中即可實現(xiàn) 22地方政府l北京亦莊的北京云計算基地 l上海云海計劃 l成都云計算中心 l無錫城市云計算中心 l鄂爾多斯綠色云計算數(shù)據(jù)中心 23并行計算基礎(chǔ)并行計算基礎(chǔ)-計算機(jī)計算機(jī)體系結(jié)構(gòu)體系結(jié)構(gòu)并行計算機(jī)l 共享存儲的對稱多處理器系統(tǒng) SMP l 分布存儲的大規(guī)模并行處理系統(tǒng)(MPP) l 計算機(jī)集群
10、系統(tǒng)(Cluster) l集群系統(tǒng)優(yōu)點: 可靠性、擴(kuò)展性和性價比 24圖 世界500強計算機(jī)體系結(jié)構(gòu)發(fā)展趨勢圖 集群系統(tǒng)的發(fā)展集群系統(tǒng)的發(fā)展 25系統(tǒng)總體架構(gòu)2627集群系統(tǒng)集群系統(tǒng) 由節(jié)點和集群互連網(wǎng)絡(luò)組成,由節(jié)點和集群互連網(wǎng)絡(luò)組成,再配置上全局軟件,是一種松散耦再配置上全局軟件,是一種松散耦合的多機(jī)系統(tǒng)合的多機(jī)系統(tǒng).通過各節(jié)點的并行運通過各節(jié)點的并行運行,可以實現(xiàn)高性能的并行計算行,可以實現(xiàn)高性能的并行計算. 節(jié)點節(jié)點:機(jī)架式或者刀片式機(jī)架式或者刀片式 網(wǎng)絡(luò)網(wǎng)絡(luò):InfiniBand和千兆以太網(wǎng)和千兆以太網(wǎng). 28性能評測性能評測29集群性能評測集群性能評測理論峰值主頻每個時鐘周期浮點運算
11、的次數(shù)CPU數(shù)HPL(High Performance Linpack) 3223()/32NNt 30Green500 &Graph500 lGreen500也有一個衡量指標(biāo),即每瓦功耗所獲取的運算性能(MFLOPS/W)。lGraph500 benchmark; Data intensive computing31軟件環(huán)境組成操作系統(tǒng)作業(yè)調(diào)度系統(tǒng)管理和監(jiān)控軟件并行開發(fā)軟件客戶端軟件32High performance Linpack l1、操作系統(tǒng) LINUXl2、并行軟件MPICH2 l3、數(shù)學(xué)庫 Gotoblas,BLAS(Basic Linear Algebra Subprogram
12、s) l4、 HPL 3334并行計算平臺的使用并行計算平臺的使用l申請帳號l熟悉軟件 :putty 和winscpl熟悉常用Linux命令l掌握MPI函數(shù)lLinuxLinux環(huán)境下環(huán)境下vivi編輯器編寫程序 或者本地編寫后上傳程序 lLinux編譯鏈接運行35lCPU發(fā)展規(guī)律:l“摩爾定律” :由于物理定律的限制,采用提高CPU制程和主頻的辦法遇到了工藝上的壁壘,暫時無法突破lGPU發(fā)展規(guī)律:l1993年開始,GPU的性能以每年2.8倍的速度增長峰值發(fā)展趨勢帶寬發(fā)展趨勢36lCPU和GPU的聯(lián)系l都是計算機(jī)體系結(jié)構(gòu)中的重要部分l超大規(guī)模集成電路元件l能夠完成浮點運算功能lGPU的設(shè)計目標(biāo)
13、與CPU是不同的:lCPU的微架構(gòu)是按照兼顧“指令并行執(zhí)行”和“數(shù)據(jù)并行運算”的思路而設(shè)計。lCPU的大部分晶體管主要用于構(gòu)建控制電路和CachelCPU的5%是ALU,控制電路設(shè)計更加復(fù)雜lCPU的內(nèi)存延遲是GPU的1/10lGPU其實是由硬件實現(xiàn)的一組圖形函數(shù)的集合。lGPU控制電路相對簡單,而且對Cache的需求小,所以可以把大部分的晶體管用于計算單元lGPGPU的40%是ALUlGPGPU的內(nèi)存帶寬是CPU的10倍37GPU(graphics processing unit )lNVIDIA公司在1999年發(fā)布GeForce256圖形處理芯片時首先提出GPU的概念。 l1999年,T&
14、L(Transform and Lighting,多邊形轉(zhuǎn)換與光源處理)l 2000年 ,微軟發(fā)布了DirectX 8.0,像素渲染 (Pixel Shader)與頂點渲染 (VertexShader),使GPU真正成為了可編程的處理器, l 38GPU對對3D圖形的處理圖形的處理圖形的生成渲染圖形的生成渲染 l1、頂點生成、頂點生成l2、頂點處理、頂點處理l3、光柵化計算、光柵化計算 l4、紋理帖圖、紋理帖圖 l5、像素處理、像素處理l6、最終輸出、最終輸出39RADEON X1900 Architecture 40 統(tǒng)一渲染架構(gòu)和幾何著色 l2006,微軟發(fā)布了DirectX 10.0,統(tǒng)
15、一渲染架構(gòu)和幾何著色 。41l4個Graphics Processing Clusters (GPC )l每個GPC由2SMX組成l每個SMX當(dāng)中包含192CUDA Core核心 l共擁有1536個CUDA Core l3.09 TFLOPs 42C2050 GPGPUK20 應(yīng)用領(lǐng)域加速卡高性能運算服務(wù)器 處理器內(nèi)核頻率1.15 GHz1.5GHz處理器核心數(shù)目4482496 單精度浮點峰值1.03 TFlops3.52 TFlops雙精度浮點峰值515Gflops1.17 TFlops專用內(nèi)存3GB5GB內(nèi)存位寬384位 GDDR5320位 GDDR5內(nèi)存帶寬144GB/s208GB/s功
16、耗238W225W43l2006年7月24日,AMD購并ATI, l2011,7970,7950 lHD 7970 具有2048個流處理器 l(單精度浮點 3.79TFlops ,l雙947GFlops ),lTahiti擁有32個GCN陣列,l每個GCN陣列里面包括4個SIMD單元,l每個SIMD包括16個1D標(biāo)量運算單元 44Future-融合lCPU向多核化,GPU向眾核化發(fā)展lGPU-CPU融合lIntel -Sandy Bridge lAMD-Accelerated Processing Unit (APU) lNvidia-Project Denver 45GPU是一種高度并行的,
17、多線程的,眾核處理器; 非常適合處理計算密集型的數(shù)據(jù)并行任務(wù);Sandy Bridge:每顆CPU核心、高速緩存段、核顯和內(nèi)核管理中心等可以互相交換數(shù)據(jù)GPU普適性46Intel HD Graphics lHD Graphics (6 execution units) lHD Graphics 2500 (6 ) lHD Graphics 4000 (16) lHaswelllHD Graphics (GT1, 6) lHD Graphics 4200, 4 XXX, (GT2, 20) lHD Graphics 5000, Iris Graphics 5100 (GT3, 40lIris P
18、ro Graphics 5200 47Accelerated Processing UnitlAPU ,CPU通過北橋訪問內(nèi)存;采用Fusion Compute Link來將北橋、GPU、IO連接在一起,l同時在GPU和北橋之間搭建Radeon Memory Bus,目的是讓GPU與內(nèi)存進(jìn)行高速數(shù)據(jù)交換,l從而提升3D性能與并行計算性能。 48GPU開發(fā)軟件lDirectX(MS) OpenGLlCUDA (2007年6月, NVIDIA)lOpen CLlDirect Compute,C+AMPlMatlablOpenACC lPortlandGroup(PGI),PGI Accelerat
19、or 49CUDAl2006年11月與G80一同誕生l2007年6月,1.0版與Teslal 2013年5 ,CUDA 5.5 50Compute Unified Device Architecture51Open Computing Languagel蘋果發(fā)起,Khronos開發(fā)l2008年6月蘋果公司提出lAMD, Intel, ARM, NVIDIA, Qualcomm, Nokia, IBM, Samsung, TI等lMicrosoft是例外l適合CPU、GPU、CELL、DSP架構(gòu)lAMD lAMD Accelerated Parallel Processing SDK 2.5,全
20、面支持OpenCL 1.1lNVIDIAl支持OpenCL52開發(fā)工具lintel 2012年,推出SDK for OpenCL Applications http:/ AMD 2012年,推出了CodeXL 1.0 beta 幫助開發(fā)者更好利用CPU, GPU和APU計算性能的綜合開發(fā)工具套裝,具有強大的GPU調(diào)試、CPU和GPU代碼分析、及靜態(tài)的OpenCL kernel性能分析等能力。 53OpenACC l英偉達(dá)、Cray、Portland Group (PGI) 以及 CAPS lOpenACC: Directives for GPUs ,OpenMPlvoid saxpy_para
21、llel(int n, float a, float *x, float *restrict y) l #pragma acc kernels lfor (int i = 0; i n; +i) lyi = a*xi + yi;l 54圖形圖形APIAPI DirectX OpenGL1.0 September 30, 1995 January 1992.2.0 1996 September 7, 2004 3.0 September 15, 1996 July 11, 2008 4.0 Never launched March 11, 20105.0 August 4, 1997 6.0 A
22、ugust 7, 1998 7.0 September 22, 1999 8.0 November 12, 2000 9.0 December 19, 2002 10.0 November 30, 2006 11 october 22, 2009 55DirectComputel2009年10月22日,微軟公司正式發(fā)布Windows 7,DirectX 11集成在Windows 7 中同步登場 lDirectCompute是Microsoft DirectX的一部分。 DirectX 10: DirectCompute 4.0 DirectX 10.1:DirectCompute 4.1 Di
23、rectX 11: DirectCompute 5.0 。l2011,6月16,AMD Fusion開發(fā)者峰會上,微軟發(fā)布了C+ AMP,(Accelerated Massive Parallelism ) 56C+AMPl微軟于11年6月推出的一個異構(gòu)并行編程編程框架,Visual Studio 11開發(fā)者預(yù)覽版起支持。 l六個特征 l C+ 而不是 C l主流 l最小的改動 l可移植的 l通用且不會過時 l開放 57MIC-Xeon Phi l入門級入門級3100l高端高端5100l頂級頂級7100 lXeon Phi 5110P擁有60個核心,每一個核心l都有著4個線程,1.05GHz,
24、2級緩存為l30MB,最大支持8GB的GDDR5l內(nèi)存尋址,內(nèi)存帶寬高達(dá)320Gbps,雙精度l浮點計算能力能夠達(dá)到1TFLOPSl$2,649 58Xeon Phil開發(fā)代號為KnightsCorner lPCI Express lVector Processing Unit (VPU). lOS由Linux修改, uOS Micro Operating System l包括C、C+和Fortran l支持OpenMP、pThread、MPI 59計算的發(fā)展l1997年,top 1,美國桑迪亞國家實驗室的“ASCI 紅”,是世界上首個突破每秒一萬億次(TeraFLOPS)浮點運算的系統(tǒng),它采
25、用了9298個英特爾奔騰 Pro處理器,成本約每一萬億次55,000,000美元。,l2011年,每一萬億次(TeraFLOPS)的擁有成本降到了低于1000美元。高性能計算確確實實已經(jīng)為所有人觸手可及。 60云終端 lImagination Technologies ,PowerVR的的SGX系列系列 (PowerVR G6230/6430, 100GFLOPS l高通(高通(QUALCOMM) Adreno320, OpenCL 1.2 l博通(博通(Broadcom)BCM系列系列l(wèi)NVIDIA TegralARM的的Mali圖形處理單元圖形處理單元。l Mali-T628核心數(shù)量4-8
26、個, OpenCL 61并行處理軟件系統(tǒng)并行處理軟件系統(tǒng)l基礎(chǔ)知識lOpenMPl消息傳遞接口消息傳遞接口lMatlablOpenCL62負(fù)載均衡問題負(fù)載均衡問題 63負(fù)載均衡問題負(fù)載均衡問題 64負(fù)載均衡問題經(jīng)典算法負(fù)載均衡問題經(jīng)典算法 65負(fù)載均衡問題負(fù)載均衡問題 66性能分析性能分析67Amdahl定律定律68Gustafson定律定律 69加速比性能定律lSun & Nis Law: Base on Memory Boundingl充分利用存儲空間等計算資源,盡量增大問題規(guī)模以產(chǎn)生更好/更精確的解。是Amdahl定律和Gustafson定律的推廣。l公式推導(dǎo): 設(shè)單機(jī)上的存儲器容量為M
27、,其工作負(fù)載W=fW+(1-f)W 當(dāng)并行系統(tǒng)有p個結(jié)點時,存儲容量擴(kuò)大了pM,用G(p)表示系統(tǒng)的存儲容量增加p倍時工作負(fù)載的增加量。則存儲容量擴(kuò)大后的工作負(fù)載為W=fW+(1-f)G(p)W,所以,存儲受限的加速為 特別地: 當(dāng)G(p)=1時, 為Amdahl定律; 當(dāng)G(p)=p時, 為Gustafson定律;ppGffpGffpWpGffWWpGffWSp/ )()1 ()()1 (/)()1 ()()1 ( pffSSpp/ )1 (1 ) 1( pfpSSpp70Open Multiprocessing (OpenMP) l支持C、C+ 和 Fortranl編譯指導(dǎo)語句l而GCC
28、4.4 支持OpenMP 3 標(biāo)準(zhǔn)lMicrosoft Visual Studio 支持 l 適用于共享存儲架構(gòu) 71Fork-Join執(zhí)行模式l在開始執(zhí)行的時候,只有主線程的運行線程存在l主線程在運行過程中,當(dāng)遇到需要進(jìn)行并行計算的時候,派生出(Fork,創(chuàng)建新線程或者喚醒已有線程)線程來執(zhí)行并行任務(wù)l在并行執(zhí)行的時候,主線程和派生線程共同工作l在并行代碼結(jié)束執(zhí)行后,派生線程退出或者掛起,不再工作,控制流程回到單獨的主線程中(Join,即多線程的會和)。 72并行Hello worldl#include l#include lint main(int argc, char *argv)l l
29、 int nthreads, thread_id; l printf(I am the main thread.n); l #pragma omp parallel private(nthreads, thread_id) l l nthreads = omp_get_num_threads(); l thread_id = omp_get_thread_num(); l printf(Hello. I am thread %d out of a team of %dn, thread_id, nthreads); l lprintf(Here I am, back to the main t
30、hread.n); l return 0;l 73幾點說明l#pragma omp parallel,l創(chuàng)建并行區(qū):并行區(qū)里每個線程都會去執(zhí)行并行區(qū)中的代碼。l控制并行區(qū)中線程的數(shù)量 l并行區(qū)內(nèi)線程數(shù)=系統(tǒng)中核的個數(shù)。lset OMP_NUM_THREADS=4 lgcc : gcc -fopenmp hello.c -o hello 74循環(huán)并行化l循環(huán)并行化是是把一個循環(huán)分成多部分在不同的進(jìn)程上執(zhí)行。#pragma omp parallel for for(int i=0; in; i+) zi = xi+yi;l工作原理:將for循環(huán)中的工作分配到一個線程組中,線程組中的每一個線程將完成
31、循環(huán)中的一部分內(nèi)容;75消息傳遞接口( MPI ) lMPI庫函數(shù) MPI目前支持C、C+和FORTRAN語。l一個MPI并行程序由一組運行在相同或不同計算機(jī)上的進(jìn)程構(gòu)成。l進(jìn)程組(process group)l進(jìn)程號(rank)76消息傳遞接口( MPI ) 下面給出基于C語言的并行程序框架#include 并行庫int main(int argc , char *argv ) 使用MPI_Init函數(shù)初始化并行計算環(huán)境; 使用MPI_Comm_size函數(shù)返回指定通信器中進(jìn)程的數(shù)目; 使用MPI_Comm_rank函數(shù)返回指定通信器中本進(jìn)程的進(jìn)程號; 并行程序代碼和進(jìn)程通信代碼; 使用MP
32、I_Finalize退出并行計算環(huán)境,并行程序結(jié)束; Return 0;77并行Hello world l#include mpi.hlint main( argc, argv )lint argc; char *argv;ll int rank, size;l MPI_Init( &argc, &argv );l MPI_Comm_size( MPI_COMM_WORLD, &size );l MPI_Comm_rank( MPI_COMM_WORLD, &rank );l printf( Hello world from process %d of %dn, rank, size );l
33、MPI_Finalize();l return 0;lHello world from process 0 of 3Hello world from process 1 of 3Hello world from process 2 of 378MPI程序的的編譯與運行l(wèi)mpif77 o hello hello.f 或lmpicc o hello hello.cl生成hello的可執(zhí)行代碼.lmpirun np 4 hellol4 指定np的實參,表示進(jìn)程數(shù),由用戶指定.lhello 要運行的MPI并行程序.%小寫o%np:The number of process.79通信模式通信模式點對點通
34、信(point to point communication)阻塞型:MPI_Send和MPI_Recv。非阻塞型:MPI_Isend和MPI_Irecv。聚合通信(collective communication)一對多通信: 廣播MPI_Bcast多對一通信:數(shù)據(jù)收集MPI_Gather, 多對多通信:全交換MPI_Alltoall80發(fā)送消息語法 lMPI_Send(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) l將緩沖區(qū)中的count個datatype數(shù)據(jù)類型的數(shù)據(jù)發(fā)送到目的
35、進(jìn)程dest,本次發(fā)送的消息標(biāo)志是tag,使用這一標(biāo)志就可以把本次發(fā)送的消息和本進(jìn)程向同一日的進(jìn)程發(fā)送的其它消息區(qū)別開來;MPI_SEND操作指定的發(fā)送緩沖區(qū)是由count個類型為datatype的連續(xù)數(shù)據(jù)空間組成 81接收消息語法lMPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,MPI_Commn comm., MPI_Status *status)l從指定的進(jìn)程source接收消息,其它參數(shù)意義與發(fā)送操作類似;應(yīng)該注意的是,接收到消息的長度必須小于或等于接收緩沖區(qū)的長度,這是因為如果接收到的
36、數(shù)據(jù)過大,而MPI沒有截斷機(jī)制,接收緩沖區(qū)會發(fā)生溢出錯誤。 82/* first.c */l#include “mpi.h”/*MPI的頭函數(shù),lint main(int argc, char * argv )llint rank, size, tag=333;lint buf20lMPI_Status status lMPI_Init( &argc, &argv );/*MPI的初始化函數(shù)*/lMPI_Comm_rank( MPI_COMM_WORLD, &rank );/*該進(jìn)程的編號*/lMPI_Comm_size( MPI_COMM_WORLD, &size );/*總的進(jìn)程數(shù)目*/l
37、if (rank=0) l MPI_Send( buf, 20, MPI_Int, 1, tag, MPI_COMM_WORLD);lif (rank=1) l MPI_Recv( buf, 20, MPI_Int, 0, tag, MPI_COMM_WORLD, &status);lMPI_Finalize();/*MPI的結(jié)束函數(shù)*/lreturn 0;l 83聚合通信 (Collective Communication ) l從一個進(jìn)程到本組內(nèi)的所有l(wèi)進(jìn)程的播送 broadcastl從本組所有進(jìn)程收集數(shù)據(jù)到l一個進(jìn)程gatherl從一個進(jìn)程分散數(shù)據(jù)到l本組內(nèi)的所有進(jìn)程sactter848
38、52022年5月MPI并行程序設(shè)計85/217數(shù)據(jù)聚集ReduceAllreduceReduce-scatterScanMPI 預(yù)定義全局?jǐn)?shù)據(jù)運算符:MPI_MAX / MPI_MIN; MPI_SUM 求和 MPI_PROD 求積MPI_LAND 邏輯與 MPI_LOR 邏輯或 MPI_MAXLOC/MPI_MINLOC 最大/小值求下相應(yīng)位置 868788int p, myrank; float buf;MPI_Comm comm;MPI_Init(&argc, &argv);/*得進(jìn)程編號得進(jìn)程編號*/MPI_Comm_rank(comm, &my_rank);/* 得進(jìn)程總數(shù)得進(jìn)程總數(shù)
39、 */MPI_Comm_size(comm, &p);if(myrank=0) buf = 1.0;MPI_Bcast(&buf,1,MPI_FLOAT,0, comm);Broadcast - 數(shù)據(jù)廣播databuf.MPI_Bcast();.data.MPI_Bcast();.data.MPI_Bcast();.Process 0myrank = 0Process 1myrank = 1Process p-1myrank = p-1int MPI_Bcastint MPI_Bcast ( ( void void * *buffer,/buffer,/* *發(fā)送發(fā)送/ /接收接收bufbuf
40、* */ / int count, int count,/ /* *元素個數(shù)元素個數(shù)* */ / MPI_Datatype datatype MPI_Datatype datatype, , int root,int root,/ /* *指定根進(jìn)程指定根進(jìn)程* */ / MPI_Comm comm MPI_Comm comm) ) 根進(jìn)程既是發(fā)送緩沖區(qū)也是接收緩沖區(qū)根進(jìn)程既是發(fā)送緩沖區(qū)也是接收緩沖區(qū)89Gather - 數(shù)據(jù)收集int p, myrank; float data10;/*分布變量分布變量*/float* buf;MPI_Comm comm;MPI_Init(&argc, &a
41、rgv);/*得進(jìn)程編號得進(jìn)程編號*/MPI_Comm_rank(comm,&my_rank);/* 得進(jìn)程總數(shù)得進(jìn)程總數(shù) */MPI_Comm_size(comm, &p);if(myrank=0)buf=(float*)malloc(p*10*sizeof(float);/*開辟接收緩沖區(qū)開辟接收緩沖區(qū)*/MPI_Gather(data,10,MPI_FLOAT,buf,10,MPI_FlOAT,0,comm);data.MPI_Gather();.data.MPI_Gather();.data.MPI_Gather();.Process 0myrank = 0Process 1myran
42、k = 1Process p-1myrank = p-1根進(jìn)程接收其他進(jìn)程來的消息根進(jìn)程接收其他進(jìn)程來的消息( (包括根進(jìn)程包括根進(jìn)程), ),按每在進(jìn)程按每在進(jìn)程在通信組中的編號在通信組中的編號依次聯(lián)接在一依次聯(lián)接在一下下, ,存放在根進(jìn)程的接收緩沖區(qū)中存放在根進(jìn)程的接收緩沖區(qū)中. .int MPI_Gather ( void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm ) buf90Scat
43、ter - 數(shù)據(jù)分散int p, myrank; float data10;float* buf;MPI_Comm comm;MPI_Init(&argc, &argv);/*得進(jìn)程編號得進(jìn)程編號*/MPI_Comm_rank(comm,&my_rank);/* 得進(jìn)程總數(shù)得進(jìn)程總數(shù) */MPI_Comm_size(comm, &p);if(myrank=0)buf = (float*)malloc(p*10*sizeof(float);/*開辟開辟發(fā)送發(fā)送緩沖區(qū)緩沖區(qū)*/MPI_Scatter(buf,10,MPI_FLOAT,data,10,MPI_FlOAT,0,comm);data.M
44、PI_Scatter();.data.MPI_ Scatter();.data.MPI_ Scatter();.Process 0myrank = 0Process 1myrank = 1Process p-1myrank = p-1根進(jìn)程中存儲了根進(jìn)程中存儲了p p個消息個消息, ,第第i i個消息將傳給第個消息將傳給第i i個進(jìn)程個進(jìn)程. .int MPI_Scatter ( void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int ro
45、ot, MPI_Comm comm ) buf91Reduce - 全局?jǐn)?shù)據(jù)運算int p, myrank; float data = 0.0;float buf;MPI_Comm comm;MPI_Init(&argc, &argv);/*得進(jìn)程編號得進(jìn)程編號*/MPI_Comm_rank(comm,&my_rank);/*各進(jìn)程對各進(jìn)程對data進(jìn)行不同的操作進(jìn)行不同的操作*/data = data + myrank * 10;/*將各進(jìn)程中的將各進(jìn)程中的data數(shù)相加并存入根進(jìn)數(shù)相加并存入根進(jìn)程的程的buf中中 */MPI_Reduce(&data,&buf,1,MPI_FLOAT,MP
46、I_SUM,0,comm);data.MPI_Scatter();.data.MPI_ Scatter();.data.MPI_ Scatter();.Process 0myrank = 0Process 1myrank = 1Process p-1myrank = p-1對組中所有進(jìn)程的發(fā)送緩沖區(qū)中的數(shù)據(jù)用OP參數(shù)指定的操作進(jìn)行運算,并將結(jié)果送回到根進(jìn)程的接收緩沖區(qū)中. int MPI_Reduce ( void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm c
47、omm )buf+92類型函數(shù)功能數(shù)據(jù)移動MPI_Bcast一到多,數(shù)據(jù)廣播MPI_Gather多到一,數(shù)據(jù)匯合MPI_GathervMPI_Gather的一般形式MPI_AllgatherMPI_Gather的一般形式MPI_AllgathervMPI_Allgather的一般形式MPI_Scatter一到多,數(shù)據(jù)分散MPI_ScattervMPI_Scatter的一般形式MPI_Alltoall多到多,置換數(shù)據(jù)(全互換)MPI_AlltoallvMPI_Alltoall的一般形式數(shù)據(jù)聚集MPI_Reduce多到一,數(shù)據(jù)歸約MPI_Allreduce上者的一般形式,結(jié)果在所有進(jìn)程MPI_Re
48、duce_scatter結(jié)果scatter到各個進(jìn)程MPI_Scan前綴操作同步MPI_Barrier同步操作MPI集合通信函數(shù)All:表示結(jié)果到所有所有進(jìn)程.V:Variety,被操作的數(shù)據(jù)對象和操作更為靈活.%93避免死鎖deadlockl發(fā)送和接收是成對出現(xiàn)的,忽略這個原則 很可能會產(chǎn)生死鎖總會死鎖的通信調(diào)用次序總會死鎖的通信調(diào)用次序94安全的通信調(diào)用次序安全的通信調(diào)用次序95實例分析:求PI96串行代碼h=1.0/(double)n;sum=0.0;for (i=1; i=n; i+) x=h*(double)i 0.5);sum += f(x);pi=h*sum;double f(d
49、ouble a)return (4.0/(1.0+a*a);97并行代碼h=1.0/(double)n;sum=0.0;for (i=myid+1; i=n; i+=numprocs) x=h*(double)i 0.5);sum += f(x);mypi=h*sum; MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);double f(double a)return (4.0/(1.0+a*a);98cpi.c#include mpi.h#include #include double f( double );
50、double f( double a ) return (4.0 / (1.0 + a*a);99cpi.cint main( int argc, char *argv) int done = 0, n, myid, numprocs, i; double PI25DT = 3.141592653589793238462643; double mypi, pi, h, sum, x; double startwtime = 0.0, endwtime; int namelen; char processor_nameMPI_MAX_PROCESSOR_NAME; MPI_Init(&argc,
51、&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid); MPI_Get_processor_name(processor_name,&namelen); fprintf(stderr,Process %d on %sn, myid, processor_name);100cpi.c n = 100; while (!done) if (myid = 0) startwtime = MPI_Wtime(); MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM
52、_WORLD); 101cpi.c if (n = 0) done = 1; else h = 1.0 / (double) n; sum = 0.0; for (i = myid + 1; i = n; i += numprocs) x = h * (double)i - 0.5); sum += f(x); mypi = h * sum; 1022022年5月MPI并行程序設(shè)計cpi.c MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (myid = 0) printf(pi is approxim
53、ately %.16f, Error is %.16fn, pi, fabs(pi - PI25DT); endwtime = MPI_Wtime(); printf(wall clock time = %fn, endwtime-startwtime); MPI_Finalize(); return 0;103CUDA架構(gòu)發(fā)展 104CUDA邏輯結(jié)構(gòu)及內(nèi)存結(jié)構(gòu)l在CUDA的程序架構(gòu)中,程序執(zhí)行區(qū)域分為兩個部分:Host 與Device。lHost 指在CPU上執(zhí)行的部分lDevice指在GPU 上執(zhí)行的部分,這部分又稱為“kernel”l通常,Host 程序會將需要并行計算的數(shù)據(jù)復(fù)制到 GP
54、U 的顯存,再由 GPU 執(zhí)行 Device程序,完成后再由Host 程序?qū)⒔Y(jié)果從GPU 顯存中取回105示例,cuda.cu l#include /* 運行在運行在GPU端的程序端的程序 */_global_ void vectorADD(int* a, int* b, int* c) int index = threadIdx.x;/獲得當(dāng)前線程的序號獲得當(dāng)前線程的序號 if(index blockDim.x) c = a + b;int main () /* 定義定義10個個GPU運算線程運算線程 */ int N = 10; /* 本地開辟三個數(shù)組存放我們要計算的內(nèi)容本地開辟三個數(shù)組存
55、放我們要計算的內(nèi)容 */ int* h_a = (int*) malloc (N * sizeof(int); / *h_b ,int* h_c ; /* 初始化數(shù)組初始化數(shù)組A, B和和C */ for(int i=0; iN; i+) h_a = i; h_b = i; h_c = 0; 106示例,cuda.cul int size = N * sizeof(int); /* 計算計算10個個int型需要的空間型需要的空間 */ /* 在在GPU上分配同樣大小的三個數(shù)組上分配同樣大小的三個數(shù)組 */ int* d_a; int* d_b; int* d_c; cudaMalloc(voi
56、d*)&d_a, size); / d_b, d_c /* 把本地的數(shù)組拷貝進(jìn)把本地的數(shù)組拷貝進(jìn)GPU內(nèi)存內(nèi)存 */ cudaMemcpy(d_a, h_a, size, cudaMemcpyHostToDevice); d_bh_b; d_c h_c /* 定義一個定義一個GPU運算塊運算塊 由由 10個運算線程組成個運算線程組成 */ dim3 DimBlock = N; /* 通知通知GPU用用10個線程執(zhí)行函數(shù)個線程執(zhí)行函數(shù)vectorADD */ vectorADD(d_a, d_b, d_c); /* 將將GPU運算完的結(jié)果復(fù)制回本地運算完的結(jié)果復(fù)制回本地 */ cudaMemcp
57、y(h_c, d_c, size, cudaMemcpyDeviceToHost); /* 釋放釋放GPU的內(nèi)存的內(nèi)存 */ cudaFree(d_a); /d_b, d_c; /* 驗證計算結(jié)果驗證計算結(jié)果 */ 107數(shù)據(jù)并行與任務(wù)并行l(wèi)數(shù)據(jù)并行是所有線程中執(zhí)行的內(nèi)核(kernel)是相同的,只是處理的數(shù)據(jù)會根據(jù)內(nèi)核代碼分支等原因而不同。l任務(wù)并行則在每個線程中執(zhí)行不同的代碼 108OpenCLl開放計算語言lOpen Computing Languagel蘋果發(fā)起,Khronos開發(fā)l2008年6月蘋果公司提出lAMD, Intel, ARM, NVIDIA, Qualcomm, Nok
58、ia, IBM, Samsung, TI等lMicrosoft是例外l適合CPU、GPU、CELL、DSP、ARM、FPGA、Altera109OpenCLl由一個并行計算API和一種針對此類計算的編程語言組成lC99編程語言并行擴(kuò)展子集;l適用于各種類型異構(gòu)處理器的坐標(biāo)數(shù)據(jù)和基于任務(wù)并行計算API;l基于IEEE 754標(biāo)準(zhǔn)的數(shù)字條件;l與OpenGL、OpenGL ES和其他圖形類API高效互通l提供了基于任務(wù)分割和數(shù)據(jù)分割的并行計算機(jī)制lKhronos Groupl/opencl/110OpenCL四種模型 lOpenCL allows para
59、llel computing on heterogeneous deviceslCPUs, GPUs, Cell, DSPs, etc)lProvides portable accelerated codel平臺模型(Platform Model)l執(zhí)行模型(Execution Model)l內(nèi)存模型(Memory Model) l編程模型(Programming Model) 111Platform ModellEach OpenCL implementation (i.e. an OpenCL library from AMD, NVIDIA, etc.) defines platform
60、s which enable the host system to interact with OpenCL-capable deviceslCurrently each vendor supplies only a single platform per implementationlOpenCL uses an “Installable Client Driver” modellThe goal is to allow platforms from different vendors to co-existlCurrent systems device driver model will
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- wifi覆蓋工程合同范本
- 充電樁充電合同范本
- 化肥 購銷合同范本
- 公司增資合同范例
- 勞動薪酬合同范本
- 出售新地磅合同范本
- 勞務(wù)派遣簡短合同范本
- 公司代理財務(wù)記賬合同范本
- 生活用水水箱清洗施工方案
- 農(nóng)村礦山出租合同范本
- 鐵路工程施工組織設(shè)計.ppt
- 介入科制度匯編
- 電子技術(shù)基礎(chǔ)與技能-(3)
- 部編版四年級下冊語文第二單元課文教材分析及全部教案
- 工程造價專業(yè)畢業(yè)實習(xí)報告
- 出生證明委托書(共2頁)
- 刑釋解教人員安置幫教工作檔案
- 《病理學(xué)》教案
- 綜合日語第二冊練習(xí)冊(修訂版)答案精編版
- 公眾責(zé)任保險實用教案
- 吳齊南先生生平
評論
0/150
提交評論