国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種提升數(shù)值預(yù)報產(chǎn)品生成效率的多進(jìn)程算法

2022-12-27 11:32:52楊玉紅李永生尹天翔
廣東氣象 2022年6期
關(guān)鍵詞:解碼復(fù)雜度進(jìn)程

楊玉紅,李永生,尹天翔

(廣東省氣象探測數(shù)據(jù)中心,廣東 廣州 510640)

近年來,隨著大數(shù)據(jù)等信息技術(shù)的飛速發(fā)展,各行各業(yè)信息化建設(shè)呈現(xiàn)出日新月異的發(fā)展景象,氣象行業(yè)更是如此[1-2]。信息化帶來海量數(shù)據(jù),既是一種機(jī)遇,也是一種挑戰(zhàn)[3-4]。一方面,實(shí)時數(shù)據(jù)時空分辨率精細(xì)化導(dǎo)致數(shù)據(jù)量劇增;另一方面應(yīng)用對數(shù)據(jù)的時效性和完整性要求更高。如何完成海量數(shù)據(jù)的高速處理,是應(yīng)用面臨的巨大挑戰(zhàn)[5-6]。

數(shù)值預(yù)報產(chǎn)品作為“大數(shù)據(jù)”的典型,其處理方法和處理速度一直是眾人關(guān)注的焦點(diǎn)[7]。近年來,隨著空間分辨率越來越高、預(yù)報時間間隔越來越短,高精度集合預(yù)報產(chǎn)品越來越廣泛被業(yè)務(wù)應(yīng)用,因其巨大的數(shù)據(jù)量與時效性要求,對實(shí)時處理技術(shù)提出近乎嚴(yán)苛的要求,處理效率直接影響產(chǎn)品能否在業(yè)務(wù)中被使用。本研究對南海臺風(fēng)集合預(yù)報產(chǎn)品的并行算法進(jìn)行研究,引入了python多進(jìn)程處理模塊,探究多進(jìn)程處理在數(shù)值預(yù)報領(lǐng)域的作用效果。

1 傳統(tǒng)串行數(shù)據(jù)預(yù)報產(chǎn)品解碼算法

數(shù)值預(yù)報文件的存儲格式有很多種,比如二進(jìn)制格式、文本格式、GRIB1格式、GRIB2格式[8]、NETCDF格式[9-10]等。為了便于管理與應(yīng)用,廣東省氣象探測數(shù)據(jù)中心建立了“廣東省氣象格點(diǎn)資料服務(wù)平臺”,服務(wù)內(nèi)容之一就是將多途徑收集的各種數(shù)值預(yù)報資料統(tǒng)一加工,生成便于存儲和訪問的“自有”NETCDF格式產(chǎn)品庫。該產(chǎn)品庫數(shù)據(jù)組織形式統(tǒng)一、產(chǎn)品周期統(tǒng)一,給后期無論是接口服務(wù),還是繪圖服務(wù)都提供了極大的便利。

但是,隨著高精度集合預(yù)報產(chǎn)品的出現(xiàn),服務(wù)平臺原有的解碼效率又成為業(yè)務(wù)關(guān)注的焦點(diǎn)。以廣州熱帶海洋氣象研究所研發(fā)的南海臺風(fēng)集合預(yù)報產(chǎn)品為例,其特點(diǎn)是分辨率高、格點(diǎn)數(shù)多、集合成員數(shù)目多、數(shù)據(jù)量龐大;與歐洲集合預(yù)報產(chǎn)品相比,南海臺風(fēng)集合預(yù)報產(chǎn)品的GRIB數(shù)據(jù)量增加了5倍,轉(zhuǎn)換為NetCDF格式后,數(shù)據(jù)量更是增加至10倍以上(表1)。

表1 南海臺風(fēng)集合預(yù)報產(chǎn)品與歐洲集合預(yù)報產(chǎn)品參數(shù)對比

1.1 基于簡短目錄的數(shù)值預(yù)報解碼方法

基于簡短目錄的數(shù)值預(yù)報產(chǎn)品解碼方法,是搭建氣象格點(diǎn)資料服務(wù)平臺以來的一種能有效提高生成產(chǎn)品效率的方法[11]。

簡短目錄是GRIB文件的頭信息,記錄了GRIB文件的記錄編號、二進(jìn)制位置、時間、參數(shù)名稱、層次值等信息。

算法原理:先將所有GRIB文件全部轉(zhuǎn)換為二進(jìn)制文件,同時輸出該文件的簡短目錄列表;然后將簡短目錄列表根據(jù)要素名稱進(jìn)行分類后得到新的簡短目錄列表;最后,對新簡短目錄列表進(jìn)行遍歷,根據(jù)新簡短目錄列表要素位置信息定位二進(jìn)制數(shù)據(jù)文件,將不同要素的數(shù)據(jù)寫入不同的NetCDF文件中。

基于簡短目錄的數(shù)值預(yù)報產(chǎn)品解碼方法特點(diǎn),將數(shù)值預(yù)報產(chǎn)品不同要素進(jìn)行分類的階段使用了簡短目錄進(jìn)行操作,而不是直接操作原始數(shù)據(jù),操作數(shù)據(jù)量大大減少,節(jié)省了解碼時間。

1.2 算法復(fù)雜度

由于GRIB與NetCDF是兩種不同的編碼,必須遍歷一次所有的數(shù)據(jù)并重組,因此從“漸近時間復(fù)雜性”的角度無法對算法進(jìn)行優(yōu)化。

與時間復(fù)雜度類似,空間復(fù)雜度是指算法在計算機(jī)內(nèi)執(zhí)行時所需存儲空間的度量。記作:S(n)=O(f(n)),一般所討論的是除正常占用內(nèi)存開銷外的輔助存儲單元規(guī)模。簡短目錄列表解碼方法中,每次只需讀取DataUnit大小數(shù)據(jù),因此,S(n)=DataUnit。

由于該算法讀寫頻繁,因此IO對算法的影響不可忽視:

其中,DecodeData為轉(zhuǎn)換后二進(jìn)制文件;GribFile表示原始GRIB文件;VarType為按要素分類后的新簡短目錄列表;DataUnit為經(jīng)度乘以緯度范圍的格點(diǎn)場數(shù)據(jù)量。

1.3 數(shù)值預(yù)報算法的復(fù)雜度

根據(jù)算法復(fù)雜度公式,將歐洲集合預(yù)報產(chǎn)品的各個參數(shù)代入式(1)(R代表讀操作、W代表寫操作,將表1中各參數(shù)代入1.2節(jié)式(1)):

高空要素:S(n)=(181×111×4 Byte)=78.48 K

地面要素:S(n)=(281×161×4 Byte)=176.72 K

IO(n)=63×(R+R+W+W)+63×51×(7×11+21)R=315 000R+126W

將南海臺風(fēng)集合預(yù)報產(chǎn)品的各個參數(shù)代入公式:

S(n)=981×587×4 Byte=2.20 M

IO(n)=3 630×(R+R+W+W)+3 630×31×(6×5+10)R=4 508 460R+7 260W

由表2可以看出,南海臺風(fēng)集合預(yù)報產(chǎn)品,無論是在空間復(fù)雜度還是IO復(fù)雜度,較歐洲集合預(yù)報產(chǎn)品,都增加了至少10倍,IO寫操作甚至增加至60倍。歐洲集合預(yù)報產(chǎn)品從接收第一份GRIB數(shù)據(jù)文件開始,至所有文件轉(zhuǎn)換為NetCDF格式完畢,處理時間總計不超過40 min,解碼速度和效率完全能夠滿足業(yè)務(wù)使用需求;而南海臺風(fēng)集合預(yù)報產(chǎn)品,在使用簡短目錄列表方法后,測試得到的運(yùn)行時間約為3.5 h,是歐洲集合預(yù)報處理時間的5倍多。因此,需探求一種新的高效解碼方法來解決高精度數(shù)值預(yù)報產(chǎn)品解碼效率的問題。

表2 兩個數(shù)值產(chǎn)品基于簡短目錄列表算法復(fù)雜度分析結(jié)果

2 并行集合預(yù)報解碼算法

通過簡短目錄列表解碼方法在解碼高精度集合預(yù)報產(chǎn)品時,由于無論是空間復(fù)雜度還是IO復(fù)雜度,都是普通數(shù)值預(yù)報產(chǎn)品的數(shù)十倍。經(jīng)測試,解碼一個時次南海臺風(fēng)集合預(yù)報產(chǎn)品的所有要素,時間約為3.5 h。測試環(huán)境如表3所示。

表3 測試環(huán)境服務(wù)器參數(shù)

南海臺風(fēng)集合預(yù)報產(chǎn)品的GRIB源文件生成時間為t+8 h至t+10 h,若加上解碼時間3.5 h,那么NetCDF預(yù)報產(chǎn)品的生成時間將在t+11.5 h至13.5 h,超出了業(yè)務(wù)時間容忍度,如無法在早間會商時使用等。因此,探求一種高效的解碼方式,將高精度集合預(yù)報產(chǎn)品融入到當(dāng)前業(yè)務(wù)中顯得尤為重要。

2.1 多進(jìn)程處理

由于廣東省氣象局使用的數(shù)值預(yù)報產(chǎn)品對不同的要素是單獨(dú)處理、單獨(dú)存放,按照要素名生成對應(yīng)的NetCDF文件。鑒于要素相互獨(dú)立,各要素間不存在前置處理或其他依存關(guān)系,多進(jìn)程處理不會出現(xiàn)數(shù)據(jù)死鎖、共享資源鎖等影響處理速度的情況,因此可以考慮采用多進(jìn)程處理方法來提高解碼效率,降低程序運(yùn)行時間。

然而,多進(jìn)程處理方法需要考慮服務(wù)器內(nèi)存是否足夠、IO讀寫能力是否足夠,進(jìn)程數(shù)必須按照服務(wù)器的計算能力來調(diào)整,需要通過空間復(fù)雜度和IO復(fù)雜度的計算來確定適合的最大進(jìn)程數(shù)。S(n)和IO(n)會隨著N個進(jìn)程發(fā)生線性增長,變成N·S(n)和N·IO(n),進(jìn)程總數(shù)會受到限制。

2.2 多進(jìn)程設(shè)計在南海臺風(fēng)集合預(yù)報產(chǎn)品的應(yīng)用

考慮到南海臺風(fēng)集合預(yù)報產(chǎn)品包含16個要素,根據(jù)解碼程序的設(shè)計流程,解碼算法在生成NetCDF要素產(chǎn)品時,每個要素單獨(dú)處理,文件獨(dú)立存放,最終生成16個NetCDF文件。圖1左側(cè)部分為解碼算法的輸入產(chǎn)品,即3 630個GRIB文件產(chǎn)品;右側(cè)部分為算法的輸出產(chǎn)品,即16個NetCDF要素產(chǎn)品。中間部分為解碼程序,以及由解碼程序生成的3個子進(jìn)程。

“廣東省氣象格點(diǎn)資料服務(wù)平臺”的調(diào)度程序是基于Python語言開發(fā)的,因此選擇使用Multiprocessing包的Pool模塊來完成并行調(diào)度算法無疑是一種最合適的方法。

Multiprocessing包是Python中的多進(jìn)程管理包,是跨平臺的多進(jìn)程模塊,能夠像管理線程一樣管理進(jìn)程。Pool模塊來自于Multiprocessing包,可以提供指定數(shù)量的進(jìn)程供用戶調(diào)用,當(dāng)有新的請求提交到Pool時,如果Pool池還沒有滿,就會創(chuàng)建一個新的進(jìn)程來執(zhí)行請求。如果Pool池滿,請求就會告知等待,直到Pool池中有進(jìn)程結(jié)束,才會創(chuàng)建新的進(jìn)程來執(zhí)行這些請求。

算法方案偽代碼如下:

#定義【父進(jìn)程】數(shù)值預(yù)報解碼算法(算法參數(shù)為要素名稱)

#定義算法參數(shù)列表

#使用多進(jìn)程方式調(diào)用算法

綜合分析可知,原算法父進(jìn)程需要串行逐個處理與生成16個要素,如今使用并行解碼算法后,父進(jìn)程根據(jù)進(jìn)程池設(shè)置子進(jìn)程個數(shù),創(chuàng)建子進(jìn)程,然后由N個子進(jìn)程并行完成16個要素的處理與生成工作,解碼時間將縮短為串行解碼方式的1/N,這將會大大提高了解碼效率。

并行算法的效率跟算法的并行進(jìn)程數(shù)密不可分,一定程度上,進(jìn)程數(shù)量越多,算法的效率越高。但在并行高精度集合預(yù)報產(chǎn)品解碼算法中,由于算法需要使用空間換時間,為了更好的利用CPU資源,因此占用的內(nèi)存資源數(shù)量非常高,進(jìn)程數(shù)受到服務(wù)器資源總數(shù)的限制。

計算最大進(jìn)程數(shù):首先,計算每時次每個要素在讀取過程中需要分配的內(nèi)存空間,計算方法:占用內(nèi)存空間=經(jīng)緯度格點(diǎn)數(shù)×層次數(shù)×預(yù)報時效數(shù)×成員數(shù)×4字節(jié)(FLOAT類型)

通過計算,得出每時次每個要素需要占用內(nèi)存空間約為40 Gb,而“廣東省氣象格點(diǎn)資料服務(wù)平臺”中轉(zhuǎn)換服務(wù)器的內(nèi)存數(shù)目為128 Gb,因此,每次轉(zhuǎn)換過程中,最多啟動3個轉(zhuǎn)換進(jìn)程,保證系統(tǒng)資源能夠承載服務(wù)正常運(yùn)行。

根據(jù)上述結(jié)論,測試南海臺風(fēng)集合預(yù)報產(chǎn)品解碼程序子進(jìn)程數(shù)量1至數(shù)量4時,程序運(yùn)行時間與系統(tǒng)內(nèi)存使用情況。得到結(jié)論見表4。

表4 南海臺風(fēng)集合預(yù)報產(chǎn)品解碼程序運(yùn)行時間與系統(tǒng)資源使用情況

同樣,計算得出歐洲集合預(yù)報產(chǎn)品每時次每個要素需要占用內(nèi)存空間為14 Gb。因此,每次轉(zhuǎn)換過程中,最多啟動9個轉(zhuǎn)換進(jìn)程,以保證服務(wù)器能夠正常運(yùn)行。測試歐洲集合預(yù)報產(chǎn)品解碼程序子進(jìn)程數(shù)量為1至9時,程序運(yùn)行時間與系統(tǒng)內(nèi)存使用情況,所得結(jié)果如表5所示。

表5 歐洲集合預(yù)報產(chǎn)品解碼程序運(yùn)行時間與系統(tǒng)資源使用情況

3 結(jié)論

本研究提出了一種多進(jìn)程數(shù)值預(yù)報產(chǎn)品解碼算法,旨在提高高精度數(shù)值預(yù)報產(chǎn)品等數(shù)據(jù)量較大的數(shù)值預(yù)報產(chǎn)品的處理效率。本算法結(jié)合數(shù)值預(yù)報簡短目錄解碼方法,利用數(shù)值預(yù)報產(chǎn)品解碼過程中各要素之前彼此隔離的特點(diǎn),依據(jù)計算機(jī)架構(gòu)的局部性原理引入多進(jìn)程計算方法,通過空間換時間,以達(dá)到提高數(shù)值預(yù)報解碼效率的目的。經(jīng)過實(shí)驗(yàn)測試,得到以下結(jié)論:

1)使用多進(jìn)程計算在高精度集合預(yù)報產(chǎn)品解碼過程中確實(shí)可以提高解碼效率。

2)在內(nèi)存容量和硬盤容量允許的前提下,并行子進(jìn)程數(shù)目越多,計算效率越高,算法運(yùn)行所需要的時間越少。

3)確保系統(tǒng)資源足夠的前提下,設(shè)定子進(jìn)程數(shù)據(jù)盡可能大,會提高算法運(yùn)行效率。

4)在保證計算機(jī)運(yùn)算速度和方便實(shí)現(xiàn)多進(jìn)程調(diào)度時,選擇Python或Go這類面向?qū)ο缶幊痰亩喾妒降挠嬎銠C(jī)語言,可以最大限度將業(yè)務(wù)計算和任務(wù)調(diào)度解耦。

本研究的測試結(jié)果表明,基于Python的多進(jìn)程數(shù)值預(yù)報產(chǎn)品解碼算法是可行的,而且將會大大提高程序的效能,為未來數(shù)值預(yù)報產(chǎn)品等大數(shù)據(jù)在業(yè)務(wù)中的應(yīng)用提供了一種新的思路。

猜你喜歡
解碼復(fù)雜度進(jìn)程
《解碼萬噸站》
解碼eUCP2.0
中國外匯(2019年19期)2019-11-26 00:57:32
債券市場對外開放的進(jìn)程與展望
中國外匯(2019年20期)2019-11-25 09:54:58
一種低復(fù)雜度的慣性/GNSS矢量深組合方法
NAD C368解碼/放大器一體機(jī)
Quad(國都)Vena解碼/放大器一體機(jī)
求圖上廣探樹的時間復(fù)雜度
某雷達(dá)導(dǎo)51 頭中心控制軟件圈復(fù)雜度分析與改進(jìn)
出口技術(shù)復(fù)雜度研究回顧與評述
社會進(jìn)程中的新聞學(xué)探尋
南华县| 都安| 慈利县| 年辖:市辖区| 浦江县| 孝感市| 巴东县| 荥阳市| 龙井市| 桐梓县| 博爱县| 溧阳市| 刚察县| 满城县| 茶陵县| 平遥县| 锡林郭勒盟| 无锡市| 准格尔旗| 双峰县| 泾阳县| 乌鲁木齐县| 凤城市| 武安市| 青龙| 靖江市| 运城市| 册亨县| 怀远县| 湘西| 从江县| 抚顺市| 旺苍县| 都昌县| 三都| 蚌埠市| 潮州市| 循化| 望江县| 蒲江县| 广西|