胡友兵,陳邦慧,徐時(shí)進(jìn),王 凱,陳紅雨,馮志剛,馬亞楠
(淮河水利委員會(huì)水文局(信息中心),安徽 蚌埠 233001)
流域水文系統(tǒng)在某種程度上具有開(kāi)放且復(fù)雜的巨系統(tǒng)特征,流域河系徑流預(yù)報(bào)是利用降雨徑流預(yù)報(bào)方法,對(duì)流域各控制節(jié)點(diǎn)的徑流過(guò)程進(jìn)行連續(xù)模擬分析的計(jì)算過(guò)程[1-3]。降雨徑流預(yù)報(bào)方法大體可以分為經(jīng)驗(yàn)相關(guān)法和水文模型法 2 類[4]。經(jīng)驗(yàn)相關(guān)法是相對(duì)成熟、有一定理論依據(jù)的常用方法,描述的是自變量與因變量間的統(tǒng)計(jì)規(guī)律及物理成因聯(lián)系[5-7]。水文模型法是模擬水文系統(tǒng)內(nèi)在關(guān)系的方法,目的是描述水文現(xiàn)象間內(nèi)在的聯(lián)系與變化過(guò)程[8-10]。
對(duì)于大流域河系降雨徑流預(yù)報(bào)來(lái)說(shuō),往往存在幾十個(gè)甚至上百個(gè)預(yù)報(bào)控制節(jié)點(diǎn)。為實(shí)現(xiàn)河系徑流預(yù)報(bào)計(jì)算,我國(guó)業(yè)務(wù)生產(chǎn)部門和相關(guān)研究單位結(jié)合業(yè)務(wù)實(shí)際和流域特點(diǎn),先后推出了一系列各具特色的洪水預(yù)報(bào)系統(tǒng)[11-13]?,F(xiàn)有洪水預(yù)報(bào)系統(tǒng)中,在斷面預(yù)報(bào)次序上,多根據(jù)流域內(nèi)各預(yù)報(bào)斷面上下游水力關(guān)系進(jìn)行編號(hào)排序并依次進(jìn)行分析計(jì)算;在單站徑流計(jì)算中,多根據(jù)配置方案依次進(jìn)行產(chǎn)匯流計(jì)算。在河系徑流計(jì)算中,普遍存在數(shù)十乃至上百個(gè)預(yù)報(bào)節(jié)點(diǎn),且節(jié)點(diǎn)間徑流演進(jìn)依賴度高。近年來(lái),隨著以 B/S 架構(gòu)為基礎(chǔ)的具有預(yù)報(bào)調(diào)度一體化特色的新一代水文模擬系統(tǒng)不斷發(fā)展[14-15],對(duì)河系徑流計(jì)算效率提出了新要求。為發(fā)揮現(xiàn)代 CPU 多核性能,提升河系徑流預(yù)報(bào)計(jì)算效率,亟須建立一套適合河系產(chǎn)匯流并發(fā)演算的架構(gòu)體系。本研究借鑒流水線作業(yè)模式,將河系徑流預(yù)報(bào)斷面初始化、產(chǎn)流過(guò)程計(jì)算、區(qū)間匯流計(jì)算、河道洪水演算、校正分析等模塊進(jìn)行拆解,構(gòu)建流水線式工作站,實(shí)現(xiàn)河系徑流預(yù)報(bào)的并發(fā)計(jì)算,為一體化洪水預(yù)報(bào)調(diào)度類專業(yè)應(yīng)用系統(tǒng)提供基礎(chǔ)技術(shù)支撐。
隨著多核處理器的普遍推廣,線程級(jí)并行應(yīng)運(yùn)而生。線程級(jí)并行通過(guò)多核技術(shù)并行執(zhí)行多個(gè)線程,從而增大吞吐量,實(shí)現(xiàn)性能加速[16-18]。并發(fā)算法雖然可以充分發(fā)揮多核處理器的性能,但并非所有的計(jì)算都可以改成并發(fā)的形式,在執(zhí)行過(guò)程中有數(shù)據(jù)相關(guān)性的運(yùn)算一般難以實(shí)現(xiàn)并行化。如在河系徑流預(yù)報(bào)計(jì)算中,一方面斷面自身產(chǎn)流、匯流等過(guò)程具有相關(guān)性,另一方面下游斷面出流過(guò)程依賴上游斷面計(jì)算結(jié)果,因此,難以直接對(duì)各斷面同時(shí)進(jìn)行并發(fā)計(jì)算。
在計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)中,流水線技術(shù)是提高處理器性能的重要手段之一。典型的流水線模式如圖1 所示。
圖1 流水線模式示意圖
流水線模式將 1 個(gè)任務(wù)分解成多個(gè)工作流完成,假設(shè)現(xiàn)在 1 個(gè)任務(wù)的第 1 個(gè)步驟已經(jīng)完成,那么將到達(dá)第 2 個(gè)步驟;如果此時(shí)又來(lái)了 1 個(gè)新的任務(wù),那么第 1 個(gè)任務(wù)的第 2 個(gè)步驟和第 2 個(gè)任務(wù)的第 1 個(gè)步驟將并發(fā)執(zhí)行。如果任務(wù)有多個(gè),就可以建立一條流水線模式的連續(xù)作業(yè)平臺(tái),從而實(shí)現(xiàn)工作流間的并發(fā)計(jì)算。工作流之間的傳輸通信通過(guò) IO 隊(duì)列完成。
河流系統(tǒng)中斷面間的水力聯(lián)系(以樹(shù)狀河網(wǎng)為例)一般可以概化為 2 類,一類是無(wú)上游關(guān)聯(lián)控制站的源頭斷面,如圖2 中的斷面A,B,另一類是具有上游水力聯(lián)系關(guān)聯(lián)控制站的中間和末端斷面,如圖2 中的斷面C,D。對(duì)于斷面A,B,徑流過(guò)程計(jì)算相對(duì)獨(dú)立,僅需計(jì)算區(qū)間自身的產(chǎn)匯流過(guò)程;對(duì)于斷面C,D,徑流過(guò)程由區(qū)間自身徑流過(guò)程與上游河道演算徑流結(jié)果疊加得到。
圖2 河流系統(tǒng)斷面水力聯(lián)系概化示意圖
目前,水文生產(chǎn)業(yè)務(wù)實(shí)踐中仍以經(jīng)驗(yàn)相關(guān)法為主,各流域區(qū)間一般均有成熟的水文預(yù)報(bào)方案。其中,產(chǎn)流計(jì)算以降雨徑流相關(guān)線法,匯流計(jì)算以時(shí)段單位線法,河道洪水演算以馬斯京根或匯流系數(shù)法最為普遍。此外,為修正計(jì)算誤差,一般均對(duì)模擬結(jié)果進(jìn)行校正計(jì)算。
本研究根據(jù)河系徑流預(yù)報(bào)過(guò)程,將河系徑流計(jì)算分解為 4 個(gè)工作流。工作流 1(W1)是模型的初始化工作,主要完成集水區(qū)產(chǎn)匯流單元?jiǎng)澐?、雨水情站點(diǎn)組成及實(shí)時(shí)信息讀取等任務(wù),負(fù)責(zé)組裝斷面站點(diǎn)、單元?jiǎng)澐纸M成及雨水情信息,為工作流 2 提供各類輸入信息;工作流 2(W2)是集水區(qū)產(chǎn)匯流計(jì)算,在經(jīng)驗(yàn)?zāi)P椭邪嬗炅?、凈雨、產(chǎn)流、匯流等內(nèi)容,負(fù)責(zé)區(qū)間產(chǎn)匯流計(jì)算,為工作流 3提供區(qū)間來(lái)水信息;工作流3(W3)是河道洪水演算,負(fù)責(zé)河道演進(jìn)計(jì)算,為工作流 4 提供上游來(lái)水信息;工作流 4 (W4)是來(lái)水疊加及校正分析計(jì)算。
將每個(gè)工作流 W1,W2,W3,W4用一個(gè)線程工作站(如圖3 中的 P1,P2,P3,P4)實(shí)現(xiàn),按照流水線架構(gòu)連接,將河系徑流節(jié)點(diǎn)按水力聯(lián)系構(gòu)造徑流計(jì)算單元集隊(duì)列,依次將隊(duì)列元素推入線程工作站。當(dāng)計(jì)算單元各工作流依次進(jìn)入線程工作站后,即可建立一套線程流水線,實(shí)現(xiàn)河系徑流并發(fā)計(jì)算,如圖3 所示。
圖3 河系徑流計(jì)算線程流水線工作站
假如工作流 W1,W2,W3,W4的執(zhí)行時(shí)間分別為t1,t2,t3,t4。若采用傳統(tǒng)串行方式執(zhí)行,則總的執(zhí)行時(shí)間為tt1=t1+t2+t3+t4;若以流水線方式,總的執(zhí)行時(shí)間為tt2= max{t1,t2,t3,t4},那么整個(gè)任務(wù)的加速比為tt1/tt2。由此可見(jiàn),采用線程流水線方式可以極大加快程序的運(yùn)行速度,提高吞吐量。
淮河地處我國(guó)南北氣候過(guò)渡帶,水文地形復(fù)雜,是我國(guó)暴雨洪水高頻發(fā)地區(qū)[19-20]?;春痈闪鲝纳现料路植加型跫覊巍⒄?yáng)關(guān)、吳家渡和洪澤湖等 4 個(gè)重要控制節(jié)點(diǎn)。本研究選取正陽(yáng)關(guān)以上流域?yàn)樵囼?yàn)區(qū),試驗(yàn)區(qū)河流及控制斷面分布示意圖如圖4 所示。
正陽(yáng)關(guān)流域控制面積為 88 630 km2,流域內(nèi)斷面劃分及徑流預(yù)報(bào)方案選用《淮河正陽(yáng)關(guān)以上流域短時(shí)段水文預(yù)報(bào)方法研究》[21]成果,其中預(yù)報(bào)斷面共有51 個(gè),降雨徑流計(jì)算方法以經(jīng)驗(yàn)相關(guān)方法為主。為提升系統(tǒng)計(jì)算效率,根據(jù)河系上下游演算關(guān)系,參考斯特拉勒河網(wǎng)分級(jí)算法,構(gòu)建計(jì)算斷面演算分級(jí)拓?fù)潢P(guān)系。其中:1 級(jí)源頭斷面有 26 個(gè),直接依賴源頭節(jié)點(diǎn)的 2 級(jí)斷面有 11 個(gè),其余 3~7 級(jí)斷面共有 14 個(gè)。
本研究選用 Java 并發(fā)包(java.util.concurrent)設(shè)計(jì)實(shí)現(xiàn)河系徑流計(jì)算線程流水線[22]。根據(jù)河系徑流流水線工作站線程作業(yè)特點(diǎn),選用定長(zhǎng)線程池實(shí)例(newFixedThreadPool),該線程池可以控制線程最大并發(fā)數(shù),超出線程會(huì)在隊(duì)列中等待。線程間通信傳輸利用阻塞隊(duì)列實(shí)現(xiàn)。阻塞隊(duì)列是一個(gè)由鏈表結(jié)構(gòu)組成的雙向阻塞隊(duì)列,支持從隊(duì)列的頭和尾同時(shí)操作(插入/刪除),并且支持線程安全。
2015—2017 年,淮河水系連續(xù)發(fā)生超警洪水過(guò)程,為驗(yàn)證本方法計(jì)算結(jié)果的可靠性,選取 3 a 主汛期超警洪水過(guò)程進(jìn)行模擬計(jì)算。統(tǒng)計(jì)淮河干流王家壩、正陽(yáng)關(guān) 2 個(gè)重點(diǎn)控制斷面洪峰流量的模擬結(jié)果。此外,將本方法與串型結(jié)構(gòu)方法在同一機(jī)器(操作系統(tǒng)為統(tǒng)信 UOS20,處理器為 FT-2000,內(nèi)存為 16 GB)上進(jìn)行平行實(shí)驗(yàn),3 場(chǎng)洪水計(jì)算耗時(shí)如表1 所示。
由表1 可知,3 場(chǎng)次洪水期間,王家壩、正陽(yáng)關(guān)斷面洪峰流量模擬結(jié)果與實(shí)測(cè)流量基本相當(dāng),表明本研究所構(gòu)建的河系徑流預(yù)報(bào)并發(fā)計(jì)算方法可靠。較傳統(tǒng)串型結(jié)構(gòu)方法加速比為 3.1~3.5,說(shuō)明基于流水線模式的河系徑流預(yù)報(bào)并發(fā)計(jì)算方法能夠有效提升河系徑流預(yù)報(bào)的計(jì)算效率,滿足洪水預(yù)報(bào)實(shí)時(shí)性要求,尤其適用于 B/S 模式對(duì)系統(tǒng)響應(yīng)效率的需求。
河系降雨徑流模擬分析降雨形成的區(qū)域徑流發(fā)生發(fā)展過(guò)程,水旱災(zāi)害防御、水資源高效利用、水生態(tài)系統(tǒng)保護(hù)等領(lǐng)域都以降雨徑流模擬結(jié)果為基礎(chǔ)。為解決河系徑流斷面間高度依賴關(guān)系帶來(lái)的預(yù)報(bào)計(jì)算效率問(wèn)題,引入流水線并發(fā)模式,對(duì)河系降雨徑流模型計(jì)算流程進(jìn)行分解,構(gòu)建河系徑流模擬流水線并發(fā)模型,并在 Java 并發(fā)包平臺(tái)上實(shí)現(xiàn)。
將河系徑流模擬計(jì)算拆分為 4 個(gè)基礎(chǔ)計(jì)算工作流模塊,按照流水線架構(gòu)連接每個(gè)工作流,將河系徑流節(jié)點(diǎn)按水力聯(lián)系構(gòu)造徑流計(jì)算拓?fù)潢?duì)列,依次將隊(duì)列元素推入線程工作站建立一套線程流水線,實(shí)現(xiàn)了河系徑流的并發(fā)計(jì)算。選取淮河水系正陽(yáng)關(guān)以上流域?yàn)檠芯繀^(qū),對(duì)研究區(qū) 2015—2017 年主汛期 3 次超警洪水過(guò)程進(jìn)行了模擬計(jì)算,結(jié)果表明構(gòu)建的河系徑流并發(fā)計(jì)算方法可靠,計(jì)算效率較傳統(tǒng)串型結(jié)構(gòu)提升超 3倍,為 B/S 架構(gòu)下河系徑流在線模擬響應(yīng)效率和系統(tǒng)穩(wěn)定性提供了技術(shù)保障。
需要指出的是,本次實(shí)驗(yàn)共開(kāi)啟了 4 條流水線,理論上并發(fā)模式較傳統(tǒng)串型模式應(yīng)提升 4 倍效率,但受線程資源、工作流調(diào)度等因素影響,實(shí)際效率未達(dá)到理論值。