文/許建亞田園 齊記 周慶國
HPC集群編程模型研究
文/許建亞1田園1齊記1周慶國2
高性能計算是計算科學(xué)的一個分支,研究并行算法和開發(fā)相關(guān)軟件,并致力于開發(fā)高性能計算機。目前較為流行的并行程序設(shè)計模型為基于消息傳遞M P I(Message Passing interface)的編程模式,基于共享內(nèi)存的Ope MP模式和結(jié)合MPI+OpenMP的混合編程模型,以及利用GPU作為并行數(shù)據(jù)計算設(shè)備(GPU計算的模式就是在異構(gòu)協(xié)同處理計算模型中,將CPU與GPU結(jié)合起來加以利用, 應(yīng)用程序的串行部分在CPU上運行,而計算任務(wù)繁重的部分則由GPU來加速)的MPI+OpenMP+CUDA的三級混合編程模型。本文基于中國科學(xué)院近代物理研究所超算中心的深騰 7000G 集群,進(jìn)行GPU通用計算能力和并行編程模型的研究,采用MPI+CUDA多粒度混合編程模型,節(jié)點間使用MPI進(jìn)行通信,實現(xiàn)粗粒度并行,節(jié)點內(nèi)利用GPU強大的并行數(shù)據(jù)處理能力,使用CUDA架構(gòu)實現(xiàn)細(xì)粒度的數(shù)據(jù)并行和線程并行。實驗結(jié)果表明,該方法能使并行效率顯著提高,同時證明MPI+CUDA混合編程模型能充分發(fā)揮集群節(jié)點間分布式存儲和節(jié)點內(nèi)共享存儲的優(yōu)勢,為CPU+GPU混合架構(gòu)的集群系統(tǒng)提供了一種有效的并行策略。
高性能計算機是信息產(chǎn)業(yè)的重要領(lǐng)域,是現(xiàn)代社會科學(xué)研究、社會服務(wù)、經(jīng)濟活動中一種極為重要且不可或缺的戰(zhàn)略工具,世界上許多國家對計算能力的建設(shè)和計算科學(xué)的發(fā)展都給予了高度重視。自從1946年ENIAC(Electronic Numerical Integrator And Computer)在美國賓法利亞工程學(xué)院的摩爾電子工程學(xué)院誕生起,人類對高性能計算的追求就一直沒有停止過,高性能計算經(jīng)歷了史前時代、向量機時代、大規(guī)模并行處理機時代、集群和超級計算機時代四個大的發(fā)展階段。二十世紀(jì)九十年代中期,隨著Linux操作系統(tǒng)的出現(xiàn),微處理器和動態(tài)隨機存儲器速度的提升,PCI總線的研制成功以及局域網(wǎng)技術(shù)的發(fā)展,高性能計算的集群和超級計算機時代到來?,F(xiàn)在,高性能計算機已經(jīng)被廣泛地應(yīng)用到了生命科學(xué)、物理、化學(xué)、材料等研究領(lǐng)域,還被應(yīng)用于能源、氣候、環(huán)境、金融、游戲等產(chǎn)業(yè)與公共服務(wù)領(lǐng)域,高性能計算的普及在一定程度上改變了科學(xué)研究的方式,已成為繼理論科學(xué)和實驗科學(xué)之后科學(xué)研究的第三大支柱。
深騰7000G集群專為連接GPU 設(shè)計。節(jié)點機采用基于Intel 架構(gòu)的商用服務(wù)器,節(jié)點間通過高速通信網(wǎng)絡(luò)實現(xiàn)互連,能夠很好地支持大規(guī)模科學(xué)工程計算,具有節(jié)點選擇豐富靈活、機群域網(wǎng)專業(yè)高效、基礎(chǔ)架構(gòu)完備可靠等技術(shù)優(yōu)點。
深騰7000G集群包含100個計算節(jié)點,每個計算節(jié)點均含有2個Xeon E5504CPU處理器和2個TeslaC1060GPU處理器, 2GB內(nèi)存,500GB硬盤。深騰7000G集群安裝的操作系統(tǒng)為Red Hat Enterprise Linux Server release 5.6,采用了著名的開源作業(yè)處理系統(tǒng)Torque+Maui的資源管理組合,同時部署了ganglia監(jiān)控系統(tǒng),便于系統(tǒng)管理員和用戶實時了解集群的相關(guān)運行狀況,并提供了MPICH、Intel MPI等并行計算環(huán)境和CUDA-SDK、CUDAToolkit等相關(guān)GPU開發(fā)平臺,充分利用了集群提供的眾多GPU強大的計算能力。
MPI和CUDA介紹
MPI ( Message Passing Interfac)e 是一種消息傳遞機制,吸取了眾多消息傳遞系統(tǒng)的優(yōu)點,是目前國際上最流行的并行編程環(huán)境之一,尤其是分布式存儲的可縮放并行計算機和工作站網(wǎng)絡(luò)以及集群的一種編程范例。MPI具有可移植性和易用性、完備的異部通信功能、正式和詳細(xì)的精確定義等優(yōu)點,為并行軟件產(chǎn)業(yè)的增長提供了必要的條件,在基于MPI編程模型中,計算由一個或多個彼此通過調(diào)用庫函數(shù)進(jìn)行消息收、發(fā)通信的進(jìn)程組成。MPICH是MPI標(biāo)準(zhǔn)的一種最重要的實現(xiàn),本文研究基于MPICH2版本。
CUDA ( Compute Unified Device Architecture )是nVIDIA公司推出的基于GPU的通用計算模型。在CUDA編程模型中,GPU作為一個協(xié)處理器能產(chǎn)生大量線程,這種優(yōu)勢要得益于GPU的物理構(gòu)造,GPU由許多晶體管組成,專為計算密集型、高度并行化的計算而設(shè)計,因而GPU的設(shè)計能使更多晶體管用于數(shù)據(jù)處理,而非數(shù)據(jù)緩存和流控制。GPU專用于解決可表示為數(shù)據(jù)并行計算的問題,具有極高的計算密度(數(shù)學(xué)運算與存儲器運算的比率),因此可通過計算隱藏存儲器訪問延遲,而不必使用較大的數(shù)據(jù)緩存。通過nVIDIA公司的CUDA技術(shù),開發(fā)人員能夠利用GPU解決及其復(fù)雜的并行計算難題,開發(fā)出前所未有的高性能計算軟件。
MPI+CUDA編程模型
深騰7000G集群下,MPI+CUDA程序的聯(lián)合編譯運行環(huán)境用Makefile文件完成配置,主要配置文件如下:
Makefile配置文件主要添加了程序的MPI部分simpleMPI.cpp的編譯和鏈接時用到的函數(shù)庫,其中程序的C U D A部分simpleMPI.cu用common.mk文件規(guī)則完成編譯和鏈接,最后生成一個可執(zhí)行的simpleMPI文件。MPI+CUDA編程模型如圖1。
開發(fā)人員把問題分解成粗粒度(一個并行任務(wù)包含較長的程序段和較大的計算量)的問題,這些子問題可以獨立地并行解決,然后把這些子問題分為更小的細(xì)粒度(一個并行任務(wù)包含較短的程序段和較小的計算量)任務(wù),然后在集群的不同層次實現(xiàn)并行粒度及優(yōu)化。集群并行計算的方式,多為啟動多個進(jìn)程,在各個節(jié)點上分別執(zhí)行,節(jié)點間通過消息傳遞的方式通信,最后規(guī)約出計算結(jié)果。這種方法靈活,能夠適應(yīng)任務(wù)并行、幾何分解、分治等大部分科學(xué)計算模式,但由于其通信成本較高,因此多用于任務(wù)劃分清晰、通信頻率較低的粗粒度并行。MPI是一種粗粒度并行編程模型。而GPU擁有強大的數(shù)據(jù)處理能力,可以同時開啟成百上千個線程,是典型的細(xì)粒度并行編程模型。對于含有支持CUDA架構(gòu)的顯卡(GeForce、Quadro以及Tesla產(chǎn)品均采用nVIDIA CUDA并行計算架構(gòu),GeForce和Quadro分別是為消費級圖形處理和專業(yè)可視化而設(shè)計的,只有Tesla產(chǎn)品系列是完全針對并行計算而設(shè)計的,可提供廣泛的計算特性)的機群,可以綜合以上兩者的優(yōu)點,通過消息傳遞機制,將任務(wù)分配到各個節(jié)點實現(xiàn)粗粒度并發(fā)性;在每個節(jié)點上,啟用多線程機制,利用共享內(nèi)存實現(xiàn)快速高效的細(xì)粒度并行。這種混合粒度的并行程序的開發(fā)既可以發(fā)揮每個節(jié)點的巨大計算能力,又可以充分利用集群的可擴展性,為大型計算提供一個切實可行的方案。
(作者單位1為中國科學(xué)院近代物理研究所 ,2為蘭州大學(xué))