《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 多核SMP集群混合并行編程技術(shù)的研究
多核SMP集群混合并行編程技術(shù)的研究
2017年微型機與應(yīng)用第4期
劉超,祝永志
曲阜師范大學(xué) 信息科學(xué)與工程學(xué)院,山東 日照276826
摘要: 目前,高性能計算領(lǐng)域中大多數(shù)系統(tǒng)采用層次化硬件設(shè)計,具有若干多核CPU共享存儲的節(jié)點通過高速網(wǎng)絡(luò)互聯(lián)起來?;旌喜⑿芯幊碳夹g(shù)將節(jié)點間的分布式存儲與節(jié)點內(nèi)的共享存儲進行了融合。針對多核SMP集群體系結(jié)構(gòu)的特點,進一步研究了適用于多核SMP集群的層次化混合并行編程模型MPI/OpenMP,以及多核SMP節(jié)點間和節(jié)點內(nèi)多級并行的機制。充分利用消息傳遞編程模型和共享內(nèi)存編程模型各自的優(yōu)勢,在此基礎(chǔ)上研究了多粒度并行化編程方法。
關(guān)鍵詞: 多核SMP集群
Abstract:
Key words :

  劉超,祝永志

  (曲阜師范大學(xué) 信息科學(xué)與工程學(xué)院,山東 日照276826)

       摘要:目前,高性能計算領(lǐng)域中大多數(shù)系統(tǒng)采用層次化硬件設(shè)計,具有若干多核CPU共享存儲的節(jié)點通過高速網(wǎng)絡(luò)互聯(lián)起來。混合并行編程技術(shù)將節(jié)點間的分布式存儲與節(jié)點內(nèi)的共享存儲進行了融合。針對多核SMP集群體系結(jié)構(gòu)的特點,進一步研究了適用于多核SMP集群的層次化混合并行編程模型MPI/OpenMP,以及多核SMP節(jié)點間和節(jié)點內(nèi)多級并行的機制。充分利用消息傳遞編程模型和共享內(nèi)存編程模型各自的優(yōu)勢,在此基礎(chǔ)上研究了多粒度并行化編程方法。

  關(guān)鍵詞:多核SMP集群;混合編程;MPI/OpenMP

  中圖分類號:TP301文獻標(biāo)識碼:ADOI: 10.19358/j.issn.1674-7720.2017.04.006

  引用格式:劉超,祝永志.多核SMP集群混合并行編程技術(shù)的研究[J].微型機與應(yīng)用,2017,36(4):18-21.

0引言

  隨著CMP技術(shù)的發(fā)展以及SMP集群體系結(jié)構(gòu)的推廣,融合SMP與MPP雙重特點的多核SMP集群成為高性能計算(HPC)領(lǐng)域廣泛采用的新型多核體系架構(gòu)與主流研發(fā)趨勢。這種分布式存儲與共享存儲相結(jié)合的體系架構(gòu)繼承了MPP在性能和可擴展性上的優(yōu)勢,改善了SMP可擴展性差的缺點,同時又具有集群高效通信的優(yōu)點[1]。這種節(jié)點間使用消息傳遞和節(jié)點內(nèi)利用共享內(nèi)存的多級混合并行編程模型,更好地匹配了多核SMP集群特點。

001.jpg

  圖1多核SMP集群體系架構(gòu)圖1顯示了具有N個節(jié)點(每個節(jié)點為兩個四核CPU,圓形表示處理器內(nèi)核)的多核SMP集群體系結(jié)構(gòu)。處理器之間通過BUS/CROSSBAR互聯(lián),并共享內(nèi)存區(qū)域與I/O設(shè)備。多核SMP節(jié)點通過高速通信網(wǎng)絡(luò)(如Myrinet、以太網(wǎng)等)連接,節(jié)點間利用消息傳遞進行通信[2]。

1混合平臺上的并行編程模型

  嚴格來說,一個并行編程模型是計算機系統(tǒng)結(jié)構(gòu)的抽象[3],它不依賴于任何特定的機器類型。但因CPU的組合方式不同,建立起的并行系統(tǒng)會產(chǎn)生許多可能的并行編程模型。圖2顯示了混合平臺上并行編程模型的分類。

002.jpg

  1.1共享存儲編程模型 OpenMP

  常見的共享內(nèi)存編程標(biāo)準(zhǔn)為OpenMP,它是為在多處理機上編寫并行程序而設(shè)計的API,其目的是易于共享存儲并行編程。通過在源程序代碼中加入指導(dǎo)性注釋(Compiler Directive)、編譯指導(dǎo)指令#pragma行來指定程序的并發(fā)性。在OpenMP中,線程并行已高度結(jié)構(gòu)化,常采用ForkJoin并行執(zhí)行模式[4]:首先由一個主線程串行運行程序,當(dāng)需要并行計算時,派生的若干從線程與主線程共同并行執(zhí)行任務(wù)。在執(zhí)行結(jié)束后派生的從線程同步或中斷,控制流重回主線程中,如圖3所示。

003.jpg

  OpenMP的特點為:隱式通信;高層次抽象;支持增量并行;可擴展性高,移植性好;支持粗粒度和細粒度并行;面向應(yīng)用的同步原語,易于編并行程序;不僅能在共享存儲系統(tǒng)使用,也能在非共享存儲結(jié)構(gòu)上實現(xiàn),只是效率不同。

  1.2消息傳遞編程模型 MPI

  常見的消息傳遞編程標(biāo)準(zhǔn)為MPI(Message Passing Interface),它并不是一種編程語言,而是綁定在Fortran語言或C語言中的消息傳遞庫以及API接口,其目的是服務(wù)于進程間通信。對于分布式存儲系統(tǒng)而言,MPI是一種自然的編程模型,而且能夠?qū)崿F(xiàn)SPMD并行模型,常采用MasterWoker工作模式:Master進程把數(shù)據(jù)分配給Worker進程;所有的Worker進程接收相應(yīng)的數(shù)據(jù);每個Worker進程進行數(shù)據(jù)計算;Worker進程將結(jié)果發(fā)送給主進程[5]。應(yīng)用程序的每次迭代都是重復(fù)這個邏輯,根據(jù)問題的性質(zhì),Master進程可能必須等待來自所有Worker進程的結(jié)果之后才能發(fā)送新的數(shù)據(jù),如圖4所示。

 

004.jpg

  MPI特點是:顯式通信;效率高,移植性好;特別適用于粗粒度并行;多種優(yōu)化的組通信庫函數(shù);通過在計算/通信的疊加,以提升并行性能。能在分布式存儲系統(tǒng)與共享存儲系統(tǒng)上運行; 用戶控制對數(shù)據(jù)的劃分和進程的同步。

  OpenMP與MPI的主要特點對比如表1所示。

009.jpg

  1.3OpenMP/MPI混合編程模型

  結(jié)合多核SMP集群層次化存儲的結(jié)構(gòu)特點,充分利用上述兩種編程模型的優(yōu)勢:共享存儲模型的編程效率與分布式存儲模型的可擴展性?;舅枷胧?(1)將問題規(guī)模進行MPI劃分,形成通信不密集的若干子任務(wù);(2)將每個子任務(wù)(即一個MPI進程)分配到一個多核SMP節(jié)點上,節(jié)點之間依靠消息傳遞進行通信;(3)在每個節(jié)點上使用OpenMP編譯制導(dǎo)語句將子任務(wù)再次劃分,并分配到節(jié)點的不同處理核心上由多線程并行執(zhí)行,節(jié)點內(nèi)利用共享變量進行通信,如圖5所示。

005.jpg

  Hybrid MPI/OpenMP編程模型的優(yōu)勢:

  (1)匹配當(dāng)前硬件的發(fā)展趨勢——多核和多處理器計算機;

  (2)明確兩個并行層次:粗粒度(適用于MPI)和細粒度(適用于OpenMP);

  (3)某些應(yīng)用或系統(tǒng)特點可能會限制MPI進程數(shù)量(可擴展性問題),因此OpenMP可以提供增量并行;

  (4)有些應(yīng)用在MPI層工作負載不平衡,OpenMP通過分配不同數(shù)量的線程到MPI進程以解決此問題;

  (5)OpenMP避免了由MPI計算節(jié)點引起的額外通信開銷。

  在現(xiàn)有MPI代碼中引入OpenMP意味著同時引入OpenMP的一些缺陷:

  (1)控制任務(wù)分配與同步時的限制;

  (2)線程創(chuàng)建和同步產(chǎn)生的開銷;

  (3)對編譯器的依賴以及對OpenMP運行時庫的支持;

  (4)共享存儲問題;

  (5)MPI與OpenMP運行時庫相互作用可能對程序性能產(chǎn)生負面影響。

  大部分的Hybrid代碼基于一個層次模型,這使得在MPI層利用大中型粒度并行和OpenMP層利用細粒度并行成為可能。在高層次,程序被顯示地構(gòu)造為若干MPI任務(wù),其順序代碼中引入OpenMP制導(dǎo)指令,加入多線程以利用共享存儲的特點。這種編程模型根據(jù)通信與計算之間是否重疊分為兩類:

  (1)無計算/通信重疊。這類又分為兩種方式:①只在并行域和主線程外調(diào)用MPI。優(yōu)點是SMP節(jié)點內(nèi)沒有消息傳遞。缺點是效率低,即在主線程進行通信時,其他線程進入休眠,沒有實現(xiàn)計算/通信的重疊。②應(yīng)用程序代碼在并行域外調(diào)用MPI,但MPI通信由多個CPU完成。MPI通信線程可由MPI庫自動完成或由使用線程安全的MPI庫的應(yīng)用程序顯示完成。該方式示意圖如圖6所示。

 

006.jpg

  (2)計算/通信重疊。為了避免MPI通信期間計算線程閑置而從OpenMP線程組中分離出一個或多個線程來處理與計算并行的通信,此時MPI函數(shù)的調(diào)用應(yīng)在Critical、Master 或 Single相應(yīng)的區(qū)域內(nèi)。有兩種方法:①當(dāng)通信由主線程(或幾個線程)執(zhí)行時,所有通信都注入到主線程,其他所有非通信線程執(zhí)行數(shù)據(jù)計算任務(wù);②當(dāng)每個線程都有通信需求時,通信會注入到多個線程。計算/重疊編程方式示意圖如圖7所示。

 

007.jpg

2層次化混合編程的實現(xiàn)

  解決混合并行編程所存在問題的核心策略就是標(biāo)準(zhǔn),從這個角度來看,有分布式存儲編程MPI和共享式存儲OpenMP,這就構(gòu)成了開發(fā)混合編程的策略基礎(chǔ)。利用現(xiàn)有的MPI或OpenMP代碼構(gòu)建混合并行應(yīng)用程序,具體方法如下:

  (1)使用OpenMP改良MPI。這是一種簡單的混合編程實現(xiàn)方式,僅需將OpenMP編譯制導(dǎo)指令插入原循環(huán)代碼段外部。其性能取決于能被OpenMP并行求解的循環(huán)部分的計算量(通常是細粒度并行)。這種方式有利于通信綁定的應(yīng)用程序,因為其減少了需要進行通信的MPI進程數(shù)。但是,如果程序中循環(huán)較多,使用的編譯指令也將隨之增多,創(chuàng)建并行域或線程同步的開銷將會增大[6]。因此,在進行循環(huán)級并行化時,應(yīng)首選全局時間中計算時間占比較大的循環(huán)[7]。以下是細粒度偽混合程序代碼:

  #include"mpi.h"

  #include"omp.h"

  ......

  //一些計算和MPI通信

  #pragma omp paralle num_threads(...)

  #pragam omp for private(...)

  for(...)

  { //計算 }

  //一些計算和MPI通信

  ......

  MPI_Finalize();

  (2)使用MPI改良OpenMP。這種方法(粗粒度并行)不同于前一個,需要考慮每個進程如何與其他進程通信,它可能需要完全重新設(shè)計并行性。編譯制導(dǎo)指令通常在程序的最外層,OpenMP線程緊隨MPI進程而生成,生成的線程與SPMD模式中的進程較為相似,即在不同的數(shù)據(jù)上執(zhí)行相同的代碼段。與SPMD的不同之處在于多核SMP節(jié)點內(nèi)各處理器共享存儲,無需預(yù)分配數(shù)據(jù)到各處理器上。此方法優(yōu)點是OpenMP編譯制導(dǎo)指令使用較少,調(diào)用與通信開銷較低。然而,OpenMP多線程的使用類似于MPI多進程的使用,特別是當(dāng)使用混合模型中多級并行機制時,編程復(fù)雜性則會增大。以下是OpenMP部分偽混合代碼:

  ......

  omp_set_num_threads(...)

  #pragma omp paralle private(...)

  th_id=omp_get_thread_num();

  th_size=omp_get_num_threads();

  ......

  for(...)

  {..//計算}

  #pargma omp barrier

  #pargma omp master/single

  {...//MPI通信}

  ......//MPI通信

  ......

3實驗

  考慮到性能和易用性兩方面的因素,本文從整體上采用類似SMPD的模式:節(jié)點內(nèi)OpenMP細粒度并行與節(jié)點間MPI粗粒度并行,即Hybrid OpenMP/MPI層次化編程。選取矩陣乘法為案例,在矩陣規(guī)模和執(zhí)行內(nèi)核數(shù)量不同的情況下對比Nonhybirid混合編程所表現(xiàn)出的性能差異。

  3.1曙光TC5000高性能計算集群系統(tǒng)

  曙光TC5000集群系統(tǒng)整體計算能力為5.7萬億次, 一臺A620rH作為管理節(jié)點,6臺CB65作為計算節(jié)點,一套磁盤陣列提供存儲。每個刀片計算節(jié)點有兩顆AMD Opteron6128 2 GHz四核處理器,共計8核,整個集群配有144 GB內(nèi)存。

  集群軟件環(huán)境:SUSE Linux Enterprise Server 10SP操作系統(tǒng); 并行環(huán)境:MPI版本為MPICH2, GCC4.2.4編譯器;NFS文件共享服務(wù);InfiniBand高速計算網(wǎng)絡(luò)管理并行通信等。

  3.2實驗及結(jié)果分析

  使用集群中6個雙路四核計算節(jié)點運行MPI代碼與MPI/OpenMP代碼進行對比測試。運行混合MPI/OpenMP代碼時,每個計算節(jié)點分配一個MPI進程和8個線程(節(jié)點內(nèi)的線程數(shù)不應(yīng)超過物理處理器個數(shù)[7])。應(yīng)當(dāng)注意到,在矩陣相乘計算的核心部分,可以認為兩個循環(huán)都可以并行執(zhí)行。如果將內(nèi)部循環(huán)并行,程序在外部循環(huán)的每次迭代中都進行線程的ForkJoin操作,這樣做的開銷可能高于將內(nèi)部循環(huán)在多線程間并行化所節(jié)省的時間;若對外層循環(huán)并行化,將使用一次ForkJoin操作,并可使程序有更大的粒度。程序中使用的矩陣規(guī)模分別為500×500,1 000×1 000,1 500×1 500。如表2所示,表中每個時間點對應(yīng)的值都是該程序運行五次的平均值。從圖8表2執(zhí)行時間與加速比矩陣規(guī)模實現(xiàn)可以清晰地看到在使用不同節(jié)點數(shù)時混合MPI/OpenMP程序與MPI程序的加速比。隨著節(jié)點數(shù)的增加,混合編程的加速比明顯高于純MPI的加速比。因為在運行MPI程序時CPU的利用率較低,并未充分利用處理器資源;而混合編程中CPU利用率較高,這進一步驗證了在多核處理器中使用OpenMP多線程對程序性能的影響(這些結(jié)果是在沒有任何優(yōu)化措施的情況下得到的)。

008.jpg


4結(jié)論

  本文分析了多核SMP集群并行體系結(jié)構(gòu)的特點,研究適用于多核SMP集群的混合并行編程模型,針對MPI程序存在負載不平衡與可擴展性差的問題,使用OpenMP改造MPI程序,這種細粒度并行化的MPI+OpenMP更容易實現(xiàn)且能提高程序性能。目前尚不清楚這種編程技術(shù)對多核SMP集群而言是否是最為有效的機制,還有很多問題尚待解決,這需要進一步研究。

參考文獻

 ?。?] 孫凝暉, 李凱, 陳明宇. HPP:一種支持高性能和效用計算的體系結(jié)構(gòu)[J]. 計算機學(xué)報, 2008,31(9): 15031508.

 ?。?] RABENSEIFNER R, HAGER G, JOST G. Hybrid MPI/OpenMP parallel programming on clusters of multicore SMP nodes[C]. Proceedings of 17th Euromicro International Conference on Parallel, Distributed, and Networkbased Processing. 2009:427436.

 ?。?] KOTOBI A, ABDUL H N A W, OTHMAN M, et al. Performance analysis of hybrid OpenMP/MPI based on multicore cluster architecture[C]. 2014 International Conference on,Computational Science and Technology (ICCST). IEEE, 2015:16.

 ?。?] MATTSON T G, SANDERS B A, MASSINGILL B. Patterns for parallel programming[M]. AddisonWesley Professional, 2005.

 ?。?] CASTELLANOS A, MORENO A, SORRIBES J, et al. Performance model for Master/Worker hybrid applications on multicore clusters[C]. IEEE International Conference on High Performance Computing and Communications, 2013:210217.

 ?。?] 祝永志. 多核SMP集群Hybrid并行編程模式的研究與分析[J]. 電子技術(shù), 2016(2):72-75.

 ?。?] 陳勇, 陳國良, 李春生,等. SMP機群混合編程模型研究[J]. 小型微型計算機系統(tǒng), 2004, 25(10):1763-1767.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。