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