楊周凡,韓 林,李冰洋,謝景明,韓 璞,劉勇杰
(1.鄭州大學(xué) 信息工程學(xué)院,鄭州 450000;2.鄭州大學(xué) 國家超級計算鄭州中心,鄭州 450000)
隨著世界各國對清潔能源需求的不斷增長,供水管道在能源結(jié)構(gòu)中發(fā)揮著重要的作用[1-2]。由于供水管道規(guī)模的擴(kuò)大,導(dǎo)致拓?fù)浣Y(jié)構(gòu)也越來越復(fù)雜[3-4]。供水管道中數(shù)值的準(zhǔn)確預(yù)測對整個管道建設(shè)和管道安全至關(guān)重要,供水管道系統(tǒng)的高效仿真是解決上述問題的重要手段[5]。初期人們可通過對數(shù)值方法進(jìn)行改進(jìn),也可以使用更好的計算設(shè)備提升模擬計算效率,但是隨著管網(wǎng)拓?fù)浣Y(jié)構(gòu)大規(guī)模的擴(kuò)大以及CPU 功耗墻的出現(xiàn),該方法性能逐漸降低。
近年來,GPU 加速器開始廣泛用于科學(xué)計算,其提供了優(yōu)越的計算處理能力和內(nèi)存帶寬,并提高了計算效率[6-8]。文獻(xiàn)[8]提出一種加速單GPU 芯片上開放通道和管道組合流瞬態(tài)模擬的方法。在計算統(tǒng)一設(shè)備架構(gòu)(CUDA)的線程級并行結(jié)構(gòu)中,GPU 可以很好地利用其固有的并行性[9-10]。但是,對大規(guī)模管道網(wǎng)絡(luò)仿真計算時,仿真計算粒度密集,而傳統(tǒng)計算機(jī)受限于計算粒度密集的程序,可能會影響供水管網(wǎng)大規(guī)模數(shù)值模擬時的效率?!搬陨健背売嬎銠C(jī)是我國自主研發(fā)的新一代E 級超級計算機(jī),其采用符合超算國際主流趨勢的海光1 號CPU+海光1 號DCU 加速器的異構(gòu)體系結(jié)構(gòu),所配備的DCU 加速器件使得該平臺更適合于部署高度密集型計算應(yīng)用。因此,供水管網(wǎng)模擬系統(tǒng)在“嵩山”超級計算機(jī)平臺上進(jìn)行模擬計算,可以進(jìn)一步突破瓶頸提升計算性能。
盡管管網(wǎng)在超級計算機(jī)平臺上比傳統(tǒng)CPU 具有更高的計算效率,但單個DCU 節(jié)點(diǎn)的極限存儲和計算能力可能會影響管網(wǎng)在超擴(kuò)展尺度上處理計算系統(tǒng)時的效率。在這種情況下,如果在多塊DCU 中進(jìn)行計算,則需大幅擴(kuò)展管網(wǎng)模擬計算的規(guī)模。
本文提出一種有效的并行化方案來提高管網(wǎng)的計算效率。面向“嵩山”超級計算機(jī)平臺,利用HIP-C 語言修改程序完成程序跨平臺移植,在單DCU 中實(shí)現(xiàn)計算的并發(fā)。針對管網(wǎng)中管道元件中數(shù)據(jù)依賴問題,對其進(jìn)行數(shù)據(jù)劃分,并結(jié)合HIP 編程模型和消息傳遞接口,將多個DCU 加速器集成到網(wǎng)絡(luò)體系結(jié)構(gòu)中,通過高效的混合并行化方案對管網(wǎng)進(jìn)行優(yōu)化[11]。
本節(jié)主要介紹管網(wǎng)管道拓?fù)浣Y(jié)構(gòu),并描述HIP+MPI 混合編程。
管道運(yùn)輸是各種清潔能源開發(fā)與輸送過程中一項(xiàng)重要的技術(shù)[12-13]。目前,管道運(yùn)輸技術(shù)已有很多成熟的理論和模型,隨著計算機(jī)技術(shù)和網(wǎng)絡(luò)通信的飛速發(fā)展,能源運(yùn)輸技術(shù)也逐漸實(shí)現(xiàn)了信息化,運(yùn)輸管道仿真模擬系統(tǒng)應(yīng)運(yùn)而生。模擬仿真通過把數(shù)據(jù)訪問接口連接到系統(tǒng),及時更新數(shù)據(jù),將實(shí)時數(shù)據(jù)傳入到系統(tǒng)中進(jìn)行計算,實(shí)現(xiàn)管網(wǎng)的動態(tài)模擬仿真[14-16]。
首先以管網(wǎng)實(shí)際拓?fù)鋱D為基礎(chǔ)來考慮管網(wǎng)模型,為清晰地描述管網(wǎng)的模擬計算過程,本文通過以下簡單管網(wǎng)進(jìn)行說明。圖1 所示是一根獨(dú)立管道的兩個邊界節(jié)點(diǎn)。圖2 所示是一個簡單的管道系統(tǒng),中間用一個非管道元件連接兩根管道,共有4 個臨界點(diǎn)。圖3 所示為擴(kuò)大管道規(guī)模后構(gòu)建一個閉環(huán)的管道系統(tǒng),管道內(nèi)由方程計算的值與非管道元件內(nèi)由方程計算得出的結(jié)果通過邊界值計算進(jìn)行數(shù)值交互,模擬仿真得出需要的數(shù)值。
圖1 單個管道圖Fig.1 Single pipeline diagram
圖2 簡單的管道系統(tǒng)Fig.2 Simple pipeline system
圖3 閉環(huán)的管道系統(tǒng)Fig.3 Closed-loop pipeline system
并行計算在不同的粒度層次優(yōu)化,粒度一般分為粗粒度和細(xì)粒度。在集群上多個進(jìn)程進(jìn)行計算,進(jìn)程間通過消息傳遞的方式進(jìn)行通信[17-18]。由于MPI 的通信占用成本較高,因此更適合任務(wù)劃分清晰、通信不頻繁的粗粒度并行[19-20]。與MPI 相比,DCU 擅長大規(guī)模密集計算,可在細(xì)粒度上進(jìn)行并行計算。本文結(jié)合MPI和DCU 的優(yōu)點(diǎn),通過MPI 消息傳遞機(jī)制控制多進(jìn)程計算,實(shí)現(xiàn)粗粒度上的并發(fā),并在每個進(jìn)程中使用DCU實(shí)現(xiàn)線程級計算和細(xì)粒度上的并發(fā)[21]。
“嵩山”超級計算機(jī)一個節(jié)點(diǎn)內(nèi)共有4 塊DCU,如果只在單DCU 中進(jìn)行計算,每個節(jié)點(diǎn)的計算能力沒有被充分利用。為擴(kuò)展DCU 計算規(guī)模,在實(shí)現(xiàn)多DCU 計算時,MPI+HIP 混合編程可以發(fā)揮優(yōu)勢,為每一個DCU分別分配一個進(jìn)程,使用MPI 控制多進(jìn)程計算并進(jìn)行通信[22-23]。進(jìn)程之間使用消息傳遞接口傳輸數(shù)據(jù),進(jìn)程內(nèi)采用HIP 技術(shù)進(jìn)行線程級優(yōu)化,實(shí)現(xiàn)粗粒度和細(xì)粒度的結(jié)合,提升科學(xué)計算的性能。HIP+MPI 混合編程結(jié)構(gòu)如圖4 所示。
圖4 MPI+HIP 混合編程結(jié)構(gòu)Fig.4 MPI+HIP mixed programming structure
管網(wǎng)模擬仿真系統(tǒng)在進(jìn)行數(shù)值模擬時,大量的數(shù)據(jù)增加了計算時間,影響數(shù)值模擬的時間和精度。根據(jù)上文的內(nèi)容可以了解到DCU 的計算能力,這可以解決目前模擬計算中所遇到的問題。下面將詳細(xì)介紹管網(wǎng)拓?fù)浣Y(jié)構(gòu)中管道與非管道的并行特性。參照圖3 結(jié)構(gòu)中各元件計算的流程如圖5 所示。
圖5 管網(wǎng)元件計算流程Fig.5 Calculation procedure of pipeline network components
本文管道網(wǎng)絡(luò)仿真計算基于王海[13]提出的立體管網(wǎng)建模方法。將管網(wǎng)“對象化”,然后把管網(wǎng)元件的對象屬性賦予具體數(shù)值,得到每個元件與相鄰元件的連接屬性以及每個元件的初始狀態(tài)和邊界條件。管道元件和非管道元件在初始化后,可開始第1 個時間步長的計算,每次計算完成后,需要進(jìn)行收斂分析,如果計算精度達(dá)到0.000 1%,則結(jié)束循環(huán)。這時能夠得到穩(wěn)態(tài)時管道元件與非管道元件的流量、壓力和水力工況等數(shù)值。
在分析該程序代碼進(jìn)行數(shù)值模擬計算時,首先需要設(shè)置循環(huán)條件,直到計算結(jié)果不發(fā)散才可計算結(jié)束。在外循環(huán)中先對非管道元件進(jìn)行計算,在邏輯上將數(shù)組進(jìn)行切分,數(shù)組不同的分段執(zhí)行不同的非管道元件,使用hipDeviceSynchronize()函數(shù)進(jìn)行同步,直到所有非管道元件計算完畢,才能對管道元件進(jìn)行計算,然后同步直到所有管道元件計算完成。以上所有步驟在內(nèi)循環(huán)每5 000 次后進(jìn)行數(shù)值更新,并對計算結(jié)果進(jìn)行收斂計算,直到計算結(jié)果收斂或達(dá)到最大循環(huán)次數(shù),整個循環(huán)計算結(jié)束。在此過程中,各個非管道元件之間的計算是獨(dú)立的,管道元件之間的計算也沒有依賴,管道和管道、非管道與非管道之間有較高的并行度。因此,可以考慮在粗粒度上把各管道和非管道元件作為求解任務(wù),將其傳輸?shù)皆O(shè)備端進(jìn)行并行計算。
供水管網(wǎng)仿真系統(tǒng)代碼是由C/C++語言編寫的,本文通過使用HIP-C 對代碼進(jìn)行改寫,改寫后的代碼可以在“嵩山”超級計算機(jī)上運(yùn)行并進(jìn)行測試。通過測試可以發(fā)現(xiàn),管道和非管道中水力計算部分耗時較長,一定程度上影響了模擬仿真計算的效率。因此,在工作中把管道和非管道中的計算部分在DCU 中進(jìn)行并行計算,因?yàn)镈CU 加速器對數(shù)據(jù)量較大、運(yùn)算復(fù)雜的密集性計算有顯著優(yōu)勢,所以對于供水管網(wǎng)模擬計算時把計算耗時較長的部分傳輸?shù)紻CU 中,計算效率有了顯著的提升。供水管網(wǎng)仿真系統(tǒng)在異構(gòu)架構(gòu)中的模擬實(shí)現(xiàn)流程如圖6 所示。
結(jié)合圖6 分析在程序中需要讀取管道和非管道元件中的數(shù)據(jù),并寫入不同的結(jié)構(gòu)體數(shù)組,然后定義結(jié)構(gòu)體指針,動態(tài)分配各個管道和非管道結(jié)構(gòu)體指針的內(nèi)存,將主機(jī)端內(nèi)存的管道元件和非管道元件的結(jié)構(gòu)體數(shù)組傳輸?shù)紻CU 加速器設(shè)備內(nèi)存中,并對其進(jìn)行初始化。管網(wǎng)中管道元件和非管道元件需循環(huán)計算,直到達(dá)到收斂條件或最大循環(huán)次數(shù)方可跳出循環(huán)結(jié)束計算。在外循環(huán)中,對管網(wǎng)中各元件循環(huán)計算時,管道元件和非管道元件將DCU 加速器映射到block 塊中,每個block 中可以根據(jù)實(shí)際應(yīng)用分配線程,非管道元件和管道元件計算時按順序計算。首先計算非管道元件并同步,當(dāng)所有非管道元件計算完畢之后開始管道的計算,同理,管道計算后也需要同步。以上操作以5 000 次為基準(zhǔn),開啟內(nèi)循環(huán),每循環(huán)計算5 000 次,所有元件進(jìn)行一次更新,并對其中的二通、三通、四通進(jìn)行收斂條件判斷,若達(dá)到收斂條件,則跳出循環(huán);否則再次重復(fù)上述步驟對非管道和管道進(jìn)行并行操作,直到外循環(huán)結(jié)束,跳出循環(huán),將最終的計算結(jié)果從設(shè)備端傳回到主機(jī)端,重新關(guān)聯(lián)非管道元件和管道,直至模擬計算結(jié)束。
圖6 異構(gòu)版本供水管網(wǎng)仿真系統(tǒng)模擬流程Fig.6 Simulation procedure of water supply pipeline network simulation system of heterogeneous versions
對于小規(guī)模的管道網(wǎng)絡(luò),可以實(shí)現(xiàn)在單DCU 中計算,當(dāng)管道網(wǎng)絡(luò)規(guī)模逐漸擴(kuò)大時,單DCU 中計算規(guī)模不能滿足仿真計算的需求,因此將單DCU 擴(kuò)展到多DCU 中進(jìn)行模擬計算。
供水管網(wǎng)模擬仿真系統(tǒng)在多DCU 中的實(shí)現(xiàn),合理的管道劃分方式和數(shù)據(jù)通信傳輸尤其重要。
管網(wǎng)數(shù)據(jù)必須根據(jù)DCU 節(jié)點(diǎn)處理管道數(shù)據(jù),并將這些數(shù)據(jù)逐個寫入DCU,而不是計算整個過程中的所有管道數(shù)據(jù)。在程序優(yōu)化過程中直接將管道數(shù)據(jù)分成兩個部分,并將這兩個部分的數(shù)據(jù)分別寫入到兩塊DCU 內(nèi)存中進(jìn)行計算,但在計算過程中程序運(yùn)行到一半發(fā)生了中斷,測試調(diào)試發(fā)現(xiàn)在對管道數(shù)據(jù)循環(huán)讀取時,讀到一部分管道數(shù)據(jù)后循環(huán)中斷,發(fā)生數(shù)據(jù)缺失的情況。經(jīng)過分析,管道之間數(shù)據(jù)交互密切,各個DCU 中一部分管道和非管道元件之間存在數(shù)據(jù)依賴問題。在對管道數(shù)據(jù)進(jìn)行讀取時,無法實(shí)現(xiàn)跨進(jìn)程讀取操作,DCU 之間也無法進(jìn)行跨設(shè)備的數(shù)據(jù)訪問。為解決該問題,需要使用消息傳遞接口(MPI)使相關(guān)進(jìn)程之間進(jìn)行通信,實(shí)現(xiàn)數(shù)據(jù)跨進(jìn)程通信交互。
使用MPI 控制兩進(jìn)程計算并進(jìn)行通信時,將管道元件分成兩部分,同時需要找到一部分管道元件作為兩進(jìn)程中的公有部分,傳回到主機(jī)端通信傳遞。在此項(xiàng)目組的成員提出一種一維分割方法,該方法將整個管道和非管道數(shù)據(jù)分成兩個部分,管道數(shù)據(jù)按組號被分割為三部分:GroupId=0,GroupId=1 和GroupId=2。把分組GroupId=1 的管道數(shù)據(jù)寫入到DCU0 中,然后將分組GroupId=2 的管道數(shù)據(jù)寫入到DCU1 中,管道分割圖如圖7 所示。從圖7 可以看出,管道數(shù)據(jù)被相對均勻地分配到了兩塊DCU 加速器中,在兩塊DCU 中有一部分管道數(shù)據(jù)GroupId=0屬于兩塊DCU 中的公有部分。這一部分?jǐn)?shù)據(jù)需要同時寫入到兩塊DCU 中,GroupId=0 的管道數(shù)據(jù)作為連接兩部分管道數(shù)據(jù)的橋梁,在管道元件和非管道元件計算5 000 次后,將GroupId=0 的管道數(shù)據(jù)從DCU0 中傳回到主機(jī)端進(jìn)行通信,然后再傳回到DCU1中,最后對管道元件刷新,代表一次通信完成。
圖7 管道分割圖Fig.7 Pipeline segmentation diagram
本節(jié)主要描寫MPI 的具體實(shí)現(xiàn)以及在實(shí)現(xiàn)過程中遇到的問題。
3.2.1 數(shù)據(jù)類型重定義
數(shù)據(jù)類型在數(shù)據(jù)結(jié)構(gòu)中的定義是一組性質(zhì)相同的值的集合以及定義在這個值集合上的一組操作的總稱。變量用來存儲值,它們有名字和數(shù)據(jù)類型。結(jié)合供水管網(wǎng)仿真模擬的代碼,管道和非管道元件被封裝成結(jié)構(gòu)體,MPI 需要知道結(jié)構(gòu)體的數(shù)據(jù)類型才能實(shí)現(xiàn)通信傳輸。因此,需要對結(jié)構(gòu)體實(shí)現(xiàn)數(shù)據(jù)類型重定義。
本文對程序中管道接口和管道的結(jié)構(gòu)體進(jìn)行重定義。首先程序中使用MPI_Datatype 定義新的數(shù)據(jù)類型名稱,通過blocklens 數(shù)組定義管道接口和管道中每個數(shù)據(jù)類型的長度,并根據(jù)oldTypes 數(shù)組描述管道接口和管道舊數(shù)據(jù)的類型,通過MPI_Address指定數(shù)組中每個塊中的偏移量。然后運(yùn)用MPI_Type_struct 生成新的管道接口和管道數(shù)據(jù)類型。最后采用MPI_Type_commit 提交注冊新的數(shù)據(jù)類型&PipeStruct 和&PipePortStruct。
3.2.2 MPI 實(shí)現(xiàn)過程
在MPI 信息傳遞接口進(jìn)行通信前,應(yīng)先對分割好的管道元件和非管道元件實(shí)現(xiàn)讀取和寫入操作。利用一維分割方法對各個元件進(jìn)行分割后,通過MPI_Comm_rank()獲取進(jìn)程號,進(jìn)程號控制各個進(jìn)程對非管道元件和管道的讀取,將各自的數(shù)據(jù)分別讀取到各進(jìn)程的結(jié)構(gòu)體數(shù)組中。本文主要使用數(shù)組指針進(jìn)行讀寫操作,數(shù)組指針是動態(tài)分配空間,使用更加靈活,相比直接使用數(shù)組,其代碼擴(kuò)展性更好。在讀寫完成之后,再由hipMemcpy()將其分別傳入到各自的DCU 進(jìn)行計算。由于MPI 的通信是在主機(jī)端進(jìn)行的,需要使用hipMemcpy()來控制設(shè)備端與主機(jī)端之間數(shù)據(jù)的傳輸。圖8 所示為MPI 通信時數(shù)據(jù)傳輸?shù)倪^程。
圖8 MPI 通信過程Fig.8 MPI communication process
MPI 在實(shí)現(xiàn)過程中,主機(jī)端使用MPI_Comm_rank()獲取當(dāng)前的進(jìn)程號,調(diào)用hipGetDevice()獲取DCU 加速器的設(shè)備編號,以此確定進(jìn)程編號和設(shè)備編號的對應(yīng)關(guān)系。每個進(jìn)程控制一個DCU,在對應(yīng)的設(shè)備上進(jìn)行數(shù)據(jù)顯存的劃分,完成主機(jī)端向設(shè)備端計算數(shù)據(jù)的傳輸,并各自啟動內(nèi)核函數(shù);每個進(jìn)程設(shè)置自己私有的主機(jī)端和設(shè)備端的數(shù)據(jù)指針,其中管道元件的數(shù)據(jù)被分為三部分,GroupId=0 是公有部分,這一部分管道元件數(shù)據(jù)使用hipMemcpy(DTH)從設(shè)備端傳輸?shù)街鳈C(jī)端被單獨(dú)寫入到Host_PublicPipeArray 數(shù)組中,MPI 在管道和非管道分別計算5 000 次后,將共有數(shù)據(jù)通過DCU 私有的設(shè)備端數(shù)據(jù)指針拷貝回私有主機(jī)端,在私有主機(jī)端進(jìn)行數(shù)據(jù)的通信及更新,并進(jìn)行收斂性檢查,在主機(jī)端中結(jié)束通信后分別拷貝到私有設(shè)備端中,之后對所有非管道元件更新一次。在外循環(huán)進(jìn)程中,進(jìn)程對各自的管道和非管道元件每進(jìn)行5 000 次密集計算都會使用MPI 通信接口進(jìn)行傳輸通信并更新所有元件,直至供水管網(wǎng)模擬計算結(jié)果收斂,計算結(jié)束通信完成。圖9 所示為MPI 通信傳遞實(shí)現(xiàn)過程。
圖9 MPI 通信實(shí)現(xiàn)過程Fig.9 MPI communication realization process
從單DCU 加速器擴(kuò)展到多DCU 加速器,由MPI控制多進(jìn)程計算的實(shí)現(xiàn)解決了DCU 自身的偽并行,完成了大規(guī)模數(shù)據(jù)多進(jìn)程的并發(fā)實(shí)現(xiàn)。多DCU 的實(shí)現(xiàn)擴(kuò)大了密集計算的規(guī)模,突破了單DCU 加速器計算資源的限制,對以后大規(guī)模程序的計算需求具有重要意義。
“嵩山”超級計算機(jī)系統(tǒng)的操作系統(tǒng)為Centos-6.7,集群作業(yè)管理系統(tǒng)為Gridview,CPU 編譯器為gcc/g++-7.3.1,DCU 加速器編譯器為hipcc-2.9.6,MPI 版本為hpcx-2.4.1,CPU 處理器為英特爾?酷睿?i9-9980XE。
本文在“嵩山”超級計算機(jī)平臺單節(jié)點(diǎn)單DCU上進(jìn)行正確性驗(yàn)證。首先對CPU+DCU 異構(gòu)實(shí)現(xiàn)的供水管網(wǎng)模擬仿真計算進(jìn)行小規(guī)模數(shù)據(jù)測試,將記錄模擬出的數(shù)值與管網(wǎng)串行實(shí)現(xiàn)的模擬仿真結(jié)果進(jìn)行比較,經(jīng)對比發(fā)現(xiàn),兩者計算結(jié)果的數(shù)值變化在允許范圍內(nèi),通過了正確性驗(yàn)證。
4.1.1 異構(gòu)實(shí)現(xiàn)結(jié)果對比
將供水管網(wǎng)模擬實(shí)現(xiàn)的異構(gòu)版本與在CPU 處理器英特爾?酷睿?i9-9980XE 上的運(yùn)行結(jié)果進(jìn)行對比,為使描述清晰簡潔,將在單DCU 內(nèi)優(yōu)化方法簡稱為方法1,在多DCU 內(nèi)優(yōu)化方法簡稱為方法2。通過輸入小規(guī)模器件數(shù)量和大規(guī)模器件數(shù)量,并在不同的計算平臺上進(jìn)行仿真計算測試。如表1 所示,選取器件規(guī)模數(shù)分別為10 000、30 000。
表1 不同規(guī)模器件在CPU 和方法1 下的結(jié)果對比Table 1 Comparison of results of different scale devices in CPU and method 1
由表1 數(shù)據(jù)可以看出,在器件數(shù)為10 000 時,在DCU 加速器上的加速比為5.065,隨著計算規(guī)模的增加,當(dāng)輸入器件數(shù)為30 000 時,加速比達(dá)到了9.833。分析其原因,是因?yàn)樵谛∫?guī)模數(shù)據(jù)計算時,不能充分利用DCU 加速器的并行資源,計算性能有一定幅度的提升,但不能達(dá)到最優(yōu)。當(dāng)器件數(shù)量增多時,DCU加速器在大規(guī)模密集計算的計算優(yōu)勢突出,加速效果明顯提升。實(shí)驗(yàn)結(jié)果證明了CPU+DCU 異構(gòu)實(shí)現(xiàn)的供水管網(wǎng)模擬計算在“嵩山”超級計算機(jī)平臺的單DCU 加速器環(huán)境中,加速效果十分顯著,在保證相同計算精度的前提下,計算速度提升5~10 倍,且管網(wǎng)模型規(guī)模越大,DCU 加速效果則越顯著。
表2 所示是GPU 異構(gòu)平臺上的運(yùn)行結(jié)果與方法1進(jìn)行對比,加速比提升了2~3 倍??梢钥闯?,在“嵩山”超級計算機(jī)上的移植相比顯卡為GT 730 的GPU異構(gòu)平臺仍有顯著的優(yōu)勢。
表2 不同規(guī)模器件在GPU 和方法1 下的結(jié)果對比Table 2 Comparison of results of different scale devices in GPU and method 1
本節(jié)實(shí)驗(yàn)驗(yàn)證了供水管網(wǎng)模擬仿真系統(tǒng)在不同平臺的測試結(jié)果,表明“嵩山”超級計算機(jī)更適合于大規(guī)模仿真計算,且其相對于以往實(shí)施x86 平臺或GPU 異構(gòu)平臺,計算性能都有明顯提升。
4.1.2 多DCU(方法2)實(shí)現(xiàn)測試分析
由于越來越多管道的建立,管網(wǎng)拓?fù)鋸?fù)雜,計算量大,單DCU 的計算規(guī)模已經(jīng)不能滿足龐大的管網(wǎng)數(shù)據(jù)計算量。本節(jié)基于MPI+HIP 模型選擇供水管網(wǎng)仿真計算在多DCU 上的實(shí)現(xiàn)進(jìn)行實(shí)驗(yàn),將在單DCU 上管網(wǎng)模擬仿真運(yùn)行的時間作為基準(zhǔn),測試該模擬程序在單節(jié)點(diǎn)內(nèi)多個DCU 上運(yùn)行的并行效率,如表3 所示。
表3 不同規(guī)模器件在方法1 和方法2 下的結(jié)果對比Table 3 Comparison of results of different scale devices under method 1 and method 2 s
在輸入管器件數(shù)量分別為10 000、30 000 時,DCU 單卡加速與DCU 多卡加速速度相當(dāng),多卡加速效果略優(yōu)于單卡,但當(dāng)面對超大規(guī)模管網(wǎng)模型時,多卡加速效果將明顯優(yōu)于單卡環(huán)境。原因是由于在MPI 進(jìn)行通信傳輸時,需要將管網(wǎng)中管道和非管道元件從設(shè)備端傳輸?shù)街鳈C(jī)端進(jìn)行數(shù)據(jù)通信,然后再傳回到設(shè)備端。在輸入規(guī)模少的管道和非管道數(shù)據(jù)進(jìn)行計算時,使用hipMemcpy()進(jìn)行傳輸所占用的時間較長,核函數(shù)內(nèi)密集計算占比較小,性能提升不明顯,但是隨著輸入管網(wǎng)規(guī)模的增大,在核函數(shù)內(nèi)計算占比遠(yuǎn)超過傳輸占比時,加速比取得大幅提升。
表4 所示是將在CPU 加速器上的運(yùn)行結(jié)果與DCU 多卡加速結(jié)果進(jìn)行對比,加速比提升了5~10 倍。從表4 可以看出,將數(shù)據(jù)規(guī)模擴(kuò)展到多塊DCU 中測試結(jié)果取得較優(yōu)的性能,隨著規(guī)模的擴(kuò)大,加速比與規(guī)模的擴(kuò)大成正比。
表4 不同規(guī)模器件在CPU 和方法2 下的結(jié)果對比Table 4 Comparison of results of different scale devices under CPU and method 2
實(shí)驗(yàn)結(jié)果證明了基于HIP 編程模型和MPI 實(shí)現(xiàn)的供水管網(wǎng)模擬仿真計算在“嵩山”超級計算機(jī)系統(tǒng)的多DCU 上具有良好的可拓展性,對供水管網(wǎng)在“嵩山”超級計算機(jī)平臺上實(shí)現(xiàn)規(guī)模擴(kuò)展具有重要的意義。
本文利用HIP-C 語言實(shí)現(xiàn)供水管網(wǎng)模擬仿真計算在“嵩山”超級計算機(jī)平臺的移植,通過對管道和非管道元件的數(shù)據(jù)進(jìn)行劃分,并基于CPU+DCU 異構(gòu)架構(gòu),利用HIP 編程模型和消息傳遞接口控制DCU 的并發(fā)和多進(jìn)程之間數(shù)據(jù)的通信傳遞,擴(kuò)展管網(wǎng)仿真計算的規(guī)模,同時提升模擬實(shí)現(xiàn)的效率。實(shí)驗(yàn)結(jié)果驗(yàn)證了本文優(yōu)化方法的有效性。下一步將進(jìn)行管網(wǎng)內(nèi)核函數(shù)計算部分的優(yōu)化工作,研究擴(kuò)展核函數(shù)內(nèi)管道和非管道元件的并行特性,以達(dá)到提升管網(wǎng)仿真計算性能的目標(biāo)。