黃 瀟 林廣發(fā),2,3* 陳齊超
(1、福建師范大學(xué)地理科學(xué)學(xué)院, 福建 福州350007 2、福建省陸地災(zāi)害監(jiān)測評估工程技術(shù)研究中心,福建 福州350007)3、海西地理國情動(dòng)態(tài)監(jiān)測與應(yīng)急保障研究中心,福建 福州350007)
基于具有一定物理意義的分布式水文模型模擬流域洪澇淹沒過程,可以獲得隨時(shí)間空間變化而變化的不同情景下的洪水風(fēng)險(xiǎn)量化評估結(jié)果,特別是不同降雨情景下實(shí)時(shí)輸出的全流域淹沒水深、流速、流向及其分布范圍,可以為防災(zāi)決策提供最直接的科學(xué)依據(jù)[1]。但是要獲得這些直觀性、準(zhǔn)確性、動(dòng)態(tài)性的模擬結(jié)果,也意味著更大的計(jì)算量和時(shí)間消耗。在模型的實(shí)際應(yīng)用過程中,使用傳統(tǒng)的CPU 串行模式開發(fā)的模擬軟件往往計(jì)算效率偏低[2]。
隨著并行技術(shù)的發(fā)展以及CPU 并行框架的提出,很多大數(shù)據(jù)量和計(jì)算密集型的模型都開始使用并行計(jì)算來提高模型的計(jì)算性能。例如分布式水文模型可以與OpenMP 庫相結(jié)合,使用多核CPU 分別計(jì)算不同的子流域,從而達(dá)到較好的加速效果。[3-4]但是CPU 本身的架構(gòu)問題局限其并行計(jì)算能力,于是出現(xiàn)了可以將GPU 作為數(shù)據(jù)并行計(jì)算設(shè)備的通用并行計(jì)算架構(gòu)。
本文針對元胞自動(dòng)機(jī)(Cellular Automata,CA)能夠進(jìn)行并行計(jì)算的特點(diǎn),將CUDA(ComputeUnifiedDeviceArchitecture)高性能計(jì)算架構(gòu)與元胞自動(dòng)機(jī)相結(jié)合,實(shí)現(xiàn)了基于GPU-CA 模型的洪水淹沒模擬,大幅提高了淹沒模擬的計(jì)算效率。
完整的洪水模擬包括產(chǎn)流過程和匯流過程模擬,現(xiàn)實(shí)中的產(chǎn)流過程和匯流過程應(yīng)該是統(tǒng)一進(jìn)行的,但考慮到模擬的復(fù)雜度和計(jì)算壓力,本研究將產(chǎn)流過程獨(dú)立于CA 模型外,利用美國水土保持局SCS-CN 水文模型,逐小時(shí)的計(jì)算凈雨強(qiáng)度,并將凈雨強(qiáng)度作為CA 模型的參數(shù)輸入。
匯流過程是CA 模型模擬的主要內(nèi)容,旨在模擬雨水在地形表面匯流的過程,其實(shí)為元胞及其領(lǐng)域上的水量交換,具體過程包括流向計(jì)算、流速計(jì)算和元胞水量交換三個(gè)部分。
CUDA 是一種由顯卡廠商N(yùn)VIDIA 推出的通用并行計(jì)算架構(gòu),該架構(gòu)使GPU 能夠解決復(fù)雜的計(jì)算問題。CUDA 框架通過使用核函數(shù)來啟動(dòng)大量的并行線程進(jìn)行計(jì)算,在線程找到需要計(jì)算的元胞后,就需要對元胞及其鄰域數(shù)據(jù)進(jìn)行讀取,考慮到計(jì)算過程中需要多次使用這些值,而線程存取寄存器中的值的速度最快,所以需要先將這些值讀取到寄存器中。在CUDA 框架下,將全局內(nèi)存中的值讀取到寄存器中十分方便,只需在核函數(shù)中聲明一個(gè)變量并讓其等于全局內(nèi)存中的元胞值即可,例如:float dem_cell=dem[i,j]。為了減少寄存器和全局內(nèi)存之間的數(shù)據(jù)存取,本文只在寄存器上保留每個(gè)元胞的流向、流速及水量轉(zhuǎn)移矩陣,而全局內(nèi)存中只保存整個(gè)元胞自動(dòng)機(jī)的水深矩陣,具體計(jì)算與數(shù)據(jù)存取過程如圖1 所示。
本文采用2009 年第7 號強(qiáng)熱帶風(fēng)暴“天鵝”的降雨過程作為案例比較了CPU-CA 與GPU-CA 計(jì)算性能。實(shí)驗(yàn)區(qū)位于福州市溪源江流域,面積224.52 平方千米,空間柵格單元分辨率為20m*20m,柵格矩陣個(gè)數(shù)為1458*759,降雨過程為2009 年8 月3 日22 點(diǎn)到4 日1 點(diǎn)。本研究對該時(shí)間段內(nèi)的八個(gè)水文站點(diǎn)的降雨數(shù)據(jù)進(jìn)行了采集,并空間插值生成逐小時(shí)的面雨量,然后通過SCS-CN 模型生成了逐小時(shí)凈雨強(qiáng)度,最后使用該數(shù)據(jù)對CPU 和GPU 的加速效果進(jìn)行了對比。在排除邏輯控制和事務(wù)處理的時(shí)間后,本文使用CPU-CA 和GPU-CA 模型的總計(jì)算時(shí)間來比較兩者之間的計(jì)算性能。實(shí)驗(yàn)發(fā)現(xiàn),整個(gè)流域6 小時(shí)的降雨徑流過程模擬,CPU-CA 模型和GPU-CA 模型分別耗時(shí)16.84分鐘和3.97 分鐘,GPU-CA 模型的計(jì)算效率提高了4.26 倍(圖2)。
與傳統(tǒng)的基于CPU 串行和并行的元胞自動(dòng)機(jī)模擬相比,GPU 通用計(jì)算更適合完成地理模擬和地理計(jì)算中的密集計(jì)算任務(wù)[5]。本文基于CUDA 通用并行計(jì)算架構(gòu)實(shí)現(xiàn)了GPU 并行加速下的洪水淹沒過程模擬,相較于傳統(tǒng)的洪水淹沒模擬系統(tǒng),該系統(tǒng)充分利用了元胞計(jì)算機(jī)中元胞計(jì)算的相互獨(dú)立性,結(jié)合GPU 并行計(jì)算的優(yōu)勢,大幅縮短了模擬時(shí)間,實(shí)現(xiàn)了洪水淹沒過程的快速模擬。本文提出的方法已經(jīng)集成在Unity3D 平臺(tái)中,實(shí)現(xiàn)了洪水淹沒過程的實(shí)時(shí)可視化和應(yīng)急決策調(diào)控。