對氣象數(shù)據(jù)處理模塊進(jìn)行負(fù)載均衡的優(yōu)化方法
【專利摘要】本發(fā)明公開了一種對氣象數(shù)據(jù)處理模塊進(jìn)行負(fù)載均衡的優(yōu)化方法主要對METGRID模塊中的子函數(shù)search_extrap進(jìn)行優(yōu)化,以通過保存各個頂點(diǎn)的廣度優(yōu)先搜索的遍歷記錄來減少子函數(shù)search_extrap在廣度優(yōu)先搜索中迭代的次數(shù),該優(yōu)化方法包括以下步驟:創(chuàng)建一個子程序search_match_mask,用以遍歷所有的頂點(diǎn)和保存遍歷記錄,該子程序主要實(shí)現(xiàn)search_extrap第一個for循環(huán)的功能;再對子函數(shù)search_extrap的代碼進(jìn)行相應(yīng)修改。本發(fā)明有益效果:解決了METGRID負(fù)載不均衡的問題,提高了METGRID模塊的計(jì)算速度,進(jìn)而極大提升了IAP AGCM4.0與WRF耦合計(jì)算的效率。
【專利說明】
對氣象數(shù)據(jù)處理模塊進(jìn)行負(fù)載均衡的優(yōu)化方法
技術(shù)領(lǐng)域
[0001] 本發(fā)明涉及數(shù)據(jù)處理大規(guī)模氣候數(shù)據(jù)處理,特別涉及一種對氣象數(shù)據(jù)處理模塊進(jìn) 行負(fù)載均衡的優(yōu)化方法。
【背景技術(shù)】
[0002] 地球系統(tǒng)模式ESM是一個耦合的氣候模式,能用來模擬地球在不同時期的氣候狀 態(tài),許多國家都開發(fā)了自己的地球系統(tǒng)模式。最著名的地球系統(tǒng)模式是通用地球系統(tǒng)模式 CESM,主要由美國國家大氣研究中心研發(fā)。中國科學(xué)院地球系統(tǒng)模式CAS-ESM由中國科學(xué)院 大氣物理研究所(IAP)研發(fā)而成。在CAS-ESM系統(tǒng)中,大氣模式是IAP開發(fā)的大氣環(huán)流模式 IAP AGCM4.0,海洋模式是IAP開發(fā)的海洋模式LIC0M2.0版本,陸面模式是北京師范大學(xué)開 發(fā)的CoLM模式,陸冰模式是GLC模式,海冰模式是CICE4,大氣化學(xué)模式是IAP開發(fā)的GEATM模 式。
[0003] 大氣環(huán)流模式常用于模擬粗分辨率的全球氣候,而區(qū)域氣候模式用于模擬高分辨 率區(qū)域的氣候和地表特征。為了更好地模擬氣候,許多研究使用全球模式降尺度來驅(qū)動區(qū) 域模式。CAS-ESM實(shí)現(xiàn)了IAP AGCM4.0與WRF的在線耦合。通過耦合器CPL7,IAP AGCM4.0的輸 出用于驅(qū)動WRF,即IAP AGCM4.0在線地為WRF提供初始條件和側(cè)邊界條件。
[0004] 在WRF中,METGRID(meteorological grid)模塊主要功能是把大量中間格式的氣 象數(shù)據(jù)水平插值到計(jì)算網(wǎng)格中。METGRID支持的插值方法有:average_4pt、averagej6pt、 wt_average_4pt、wt_average_16pt、nearest_neighbor、four_pt、sixteen_pt、search_ extrap和average_gce 11,其中search_extrap是廣度優(yōu)先搜索插值。廣度優(yōu)先搜索插值方 法具體的操作是:首先將源數(shù)據(jù)序列看作一個二維網(wǎng)格圖,不管每個源數(shù)據(jù)點(diǎn)是否有效,都 用一個頂點(diǎn)來表示;然后,從頂點(diǎn)(A /)(該頂點(diǎn)缺失或被屏蔽)最鄰近的一個頂點(diǎn)開始廣 度優(yōu)先搜索,直到找到表示有效源數(shù)據(jù)點(diǎn)的一個頂點(diǎn)(不被屏蔽或不缺失)才停止;最后將 該值賦給頂點(diǎn)(A 4。這種廣度優(yōu)先搜索插值方法也可以被認(rèn)為是尋找"最有效的近鄰"。
[0005] 使用64個CPU核心運(yùn)行CAS-ESM系統(tǒng)對美國南部大平原2000年3月份氣旋形成過 程進(jìn)行初步模擬,模擬的時間段為2000年3月1日00時(世界標(biāo)準(zhǔn)時間UTC)至2000年3月6日 00時,WRF模式端處理器劃分形式是8 X 8。如圖1所示,模擬過程中發(fā)現(xiàn),整個CAS-ESM系統(tǒng)計(jì) 算時間主要花費(fèi)在WRF運(yùn)算上。而在WRF模式中,METGRID和REAL模塊的計(jì)算時間之和占 WRF 整個運(yùn)行時間的80%以上。通過分析各進(jìn)程執(zhí)行METGRID所花費(fèi)的時間,我們發(fā)現(xiàn)各進(jìn)程 METGRID的計(jì)算時間存在嚴(yán)重的負(fù)載不均衡。從0號進(jìn)程到7號進(jìn)程,METGRID的計(jì)算時間逐 次遞減。但是,從24號進(jìn)程到31號進(jìn)程,METGRID的計(jì)算時間先遞減、后遞增。雖然對于各個 進(jìn)程來說,METGRID的計(jì)算時間無統(tǒng)一規(guī)律,但是METGRID計(jì)算時間的不均衡確實(shí)存在。
[0006] 因?yàn)镸ETGRID的計(jì)算時間占 WRF整體計(jì)算時間的比重較大,所以解決METGRID的負(fù) 載不均衡問題對于提高WRF端的計(jì)算效率至關(guān)重要。通過進(jìn)一步測試,發(fā)現(xiàn)子函數(shù) SearCh_ extrap造成了METGRID模塊的負(fù)載不均衡。為了解決METGRID負(fù)載不均衡問題,只要解決 search_extrap負(fù)載不均衡問題即可。
[0007] 因此,為了解決METGRID負(fù)載不均衡的問題,本發(fā)明提出了一種對氣象數(shù)據(jù)處理模 ±夬1^161?10進(jìn)行負(fù)載均衡的優(yōu)化方法。
【發(fā)明內(nèi)容】
[0008] 本發(fā)明的目的是提供一種對氣象數(shù)據(jù)處理模塊進(jìn)行負(fù)載均衡的優(yōu)化方法,以解決 search_extrap的負(fù)載不均衡問題,進(jìn)而也解決了METGRID模塊的負(fù)載不均衡問題。
[0009] 本發(fā)明提出一種對氣象數(shù)據(jù)處理模塊進(jìn)行負(fù)載均衡的優(yōu)化方法,主要對METGRID 模塊中的子函數(shù)search_extrap進(jìn)行優(yōu)化,通過保存各個頂點(diǎn)的廣度優(yōu)先搜索的遍歷記錄 來減少子函數(shù)search_extrap在廣度優(yōu)先搜索中迭代的次數(shù)。
[0010]進(jìn)一步的,本發(fā)明所述的對氣象數(shù)據(jù)處理模塊進(jìn)行負(fù)載均衡的優(yōu)化方法包括以下 步驟:倉ll建一個子程序search_match_mask,用以遍歷所有的頂點(diǎn)和保存遍歷記錄,該子程 序主要實(shí)現(xiàn)search_extrap第一個for循環(huán)的功能;以及對子函數(shù)search_extrap的代碼進(jìn) 行相應(yīng)的修改。
[0011 ]函數(shù)search_extrap的主要功能是尋找一個非有效源數(shù)據(jù)點(diǎn)的最有效近鄰,然后 把該最有效近鄰的值插值給該數(shù)據(jù)點(diǎn)。在第一次調(diào)用函數(shù)search_extrap之前,各個進(jìn)程可 以通過執(zhí)行第一個for循環(huán)遍歷所有的頂點(diǎn),找到每個頂點(diǎn)對應(yīng)的最有效近鄰,然后保存該 遍歷記錄。這樣,每當(dāng)調(diào)用search_extrap時,就可以直接從遍歷記錄中讀取對應(yīng)的記錄,而 不用再執(zhí)行第一個for循環(huán)。在保持程序正確和模擬結(jié)果準(zhǔn)確的前提下,通過保存各個頂點(diǎn) 的廣度優(yōu)先搜索的遍歷記錄來減少子函數(shù)search_extrap在廣度優(yōu)先搜索中迭代的次數(shù)。 通過這樣的方式,可以有效地減少第一個for循環(huán)的內(nèi)部迭代次數(shù)(或查找次數(shù))。
[0012]本發(fā)明的有益效果為:根據(jù)此方法對METGRID模塊進(jìn)行優(yōu)化后,METGRID模塊負(fù)載 不均衡問題得到一定程度上的解決;當(dāng)使用64 CPU核心計(jì)算時,優(yōu)化后的METGRID和REAL模 塊的計(jì)算速度比優(yōu)化前大約快7.2倍,優(yōu)化后的CAS-ESM總體計(jì)算速度提升217.53%。當(dāng)用不 同CPU核心數(shù)進(jìn)行試驗(yàn)時,具有類似的加速效果;說明該方法不但能解決METGRID負(fù)載不 均衡的問題,而且能大大提升METGRID模塊的計(jì)算性能。
【附圖說明】
[0013]圖1為各進(jìn)程執(zhí)行子程序METGRID所花費(fèi)的計(jì)算時間統(tǒng)計(jì)情況; 圖2為各進(jìn)程執(zhí)行子程序METGRID和函數(shù)search_extrap所花費(fèi)的計(jì)算時間比較情況; 圖3為各進(jìn)程的searchjxtrap內(nèi)部循環(huán)的迭代次數(shù)統(tǒng)計(jì)情況,其中循環(huán)迭代總次數(shù)表 示第一個和第二個for循環(huán)內(nèi)部迭代總次數(shù)之和; 圖4-1和圖4-2為優(yōu)化前后3月5日00時的累計(jì)降雨量(mm)模擬情況; 圖5為各進(jìn)程METGRID優(yōu)化前后的計(jì)算時間比較情況。
【具體實(shí)施方式】
[0014]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;?本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的 范圍。
[0015] 本發(fā)明為了解決METGRID負(fù)載不均衡問題,對METGRID計(jì)算模塊進(jìn)行進(jìn)一步測試, 并統(tǒng)計(jì)了各個進(jìn)程METGRID模塊中子函數(shù)search_extrap的計(jì)算時間。如圖2可知兩點(diǎn),一是 各個進(jìn)程執(zhí)行searchjxtrap所花費(fèi)的時間是不一樣的,也存在嚴(yán)重的負(fù)載不均衡;二是各 進(jìn)程search_extrap計(jì)算時間的變化趨勢與METGRID-致,并且其計(jì)算時間與METGRID幾乎 相當(dāng)。因此,子函數(shù)search_extrap造成了METGRID模塊的負(fù)載不均衡問題。為了解決 METGRID負(fù)載不均衡的問題,只要解決search_extrap的負(fù)載不均衡即可。
[0016] 函數(shù)search_extrap的主要功能是尋找一個非有效源數(shù)據(jù)點(diǎn)的最有效近鄰,然后 把該最有效近鄰的值插值給該數(shù)據(jù)點(diǎn)。search_extrap的偽代碼如表1所示。 表1為函數(shù)search_extrap的偽代碼
[0017] 從表1可知,函數(shù)search_extrap包括兩個for循環(huán)。在search_extrap中,第一個和 第二個for循環(huán)內(nèi)部迭代總次數(shù)以及這兩個循環(huán)內(nèi)部迭代總次數(shù)之和如圖3所示。在圖3中, 從〇號進(jìn)程到63號進(jìn)程,search_extrap兩個for循環(huán)內(nèi)部迭代總次數(shù)的變化趨勢與圖1 METGRID計(jì)算時間一致,所以造成METGRID負(fù)載不均衡的根本原因是search_extrap這兩個 for循環(huán)內(nèi)部迭代的總次數(shù)不一致。另外,第二個for循環(huán)內(nèi)部迭代的總次數(shù)相對比較少,而 第一個for循環(huán)內(nèi)部迭代的總次數(shù)幾乎等于這兩個for循環(huán)內(nèi)部迭代總次數(shù)之和。因此,函 數(shù)search_extrap第一個for循環(huán)最終導(dǎo)致了各進(jìn)程METGRID負(fù)載不均衡。為了解決METGRID 負(fù)載不均衡的問題,最好的方法是降低函數(shù)search_extrap第一個for循環(huán)的內(nèi)部迭代總次 數(shù)。
[0018] 通過分析函數(shù)search_extrap的代碼可知,各個進(jìn)程的參數(shù)ar_raj<三維數(shù)組)是不 同的,但是參數(shù)《asA_arra_K二維數(shù)組)相同。通過測試發(fā)現(xiàn),當(dāng)可選參數(shù)《asA_arra7和 存在時,表1 中的判斷條件(if (/saslaiTajdjV /= ?as々ra_/))對search_extrap 第一個for循環(huán)的內(nèi)部迭代次數(shù)有重大的影響。每當(dāng)調(diào)用函數(shù)search_extrap時就執(zhí)行第一 個for循環(huán)代碼一次,而第一個for循環(huán)代碼被執(zhí)行一次可能需要多次內(nèi)部迭代,這樣是沒 必要的。因此,在第一次調(diào)用函數(shù)search_extrap之前,各個進(jìn)程可以通過執(zhí)行第一個f or循 環(huán)遍歷所有的頂點(diǎn),找到每個頂點(diǎn)對應(yīng)的最有效近鄰,然后保存該遍歷記錄。這樣,每當(dāng)調(diào) 用search_extrap時,就可以直接從遍歷記錄中讀取對應(yīng)的記錄,而不用再執(zhí)行第一個for 循環(huán)。通過這樣的方式,可以有效地減少第一個for循環(huán)的內(nèi)部迭代次數(shù)(或查找次數(shù))。某 種程度上,METGRID負(fù)載不均衡的問題也能得到解決。
[0019] 為此,首先需要創(chuàng)建一個子程序search_match_mask用以遍歷所有的頂點(diǎn)和保存 遍歷記錄。這個子程序主要目的是實(shí)現(xiàn)search_extrap第一個for循環(huán)的功能,后續(xù)再對函 數(shù)search_extrap的代碼進(jìn)行相應(yīng)的修改。
[0020] 盡管各進(jìn)程參數(shù)相同,但參數(shù)同因?yàn)?的值是0或1, 所以進(jìn)行遍歷需要分艦或1兩種情況。并且,在查找每個頂點(diǎn)最有效近鄰時,不但要 存儲每個頂點(diǎn)對應(yīng)的最有效近鄰的坐標(biāo)信息,還要存儲遍歷過程中用到的隊(duì)列W見表1)。 因?yàn)樵诤瘮?shù)search_extrap第二個for循環(huán)中還需用到g。
[0021]本發(fā)明實(shí)施例所述的一種對氣象數(shù)據(jù)處理模塊METGRID進(jìn)行負(fù)載均衡的優(yōu)化方 法,包括以下步驟: match_mask_queueO 細(xì)tch_mask_queuel 細(xì)tch+mask+found+validO^Wmatch+mask- 其中,用來存儲時每個頂點(diǎn)對應(yīng)的最有效近 鄰的坐標(biāo);用來存儲i ra 2= 1時每個頂點(diǎn)對應(yīng)的最有效近鄰的坐標(biāo); 在搜索頂點(diǎn)最有效近鄰時,細(xì)^用來存儲細(xì)iraX)時的隊(duì)列<7;同理, 時每個頂點(diǎn)是否找到最有效的近鄰;細(xì)心用來存儲 時每個頂點(diǎn)是否找到最有效的近鄰。
[0022] 2)子程序search_match_mask的詳細(xì)算法實(shí)現(xiàn)如表2所示,在每個進(jìn)程調(diào)用函數(shù) search_extrap之前,需要先調(diào)用子程序search_match_mask把遍歷記錄賦值給二維數(shù)組 match_mask_arrayO Miatch_mask_arrayO Miatch_mask_queueO Miatch_mask_queuel ?> match-mask-found-validff^Wmatch-mask-found-validl〇 [0023] 表2為子程序search_match_mask的偽代碼
3)對函數(shù)search_extrap進(jìn)行相應(yīng)的修改,修改后的函數(shù)search_extrap如表3所示,主 要是對search_extrap第一個for循環(huán)代碼部分進(jìn)行了修改,第二個for循環(huán)代碼基本保持 不變。
[0024] 表3為優(yōu)化后search_extrap的偽代碼
為了驗(yàn)證METGRID優(yōu)化后代碼的正確性,對優(yōu)化前后的模擬結(jié)果進(jìn)行比較。這里,取3月 5日00時的強(qiáng)降雨情況進(jìn)行比較。優(yōu)化前的強(qiáng)降雨情況如圖4-1所示,優(yōu)化后的則如圖4-2所 示。通過比較我們發(fā)現(xiàn),圖4-1和圖4-2完全一樣,證明了 METGRID優(yōu)化后的代碼的正確性。同 時,我們逐一比較了優(yōu)化前后模式的輸出數(shù)據(jù),結(jié)果完全相同。
[0025]使用64個CPU核心對這5天的氣旋形成事件進(jìn)行模擬,優(yōu)化前后各進(jìn)程METGRID的 計(jì)算時間如圖5所示。從中可以看出,優(yōu)化后不但在一定程度上解決了METGRID負(fù)載不均衡 的問題,而且大量減少了METGRID的計(jì)算時間。同時,0號進(jìn)程優(yōu)化后METGRID的計(jì)算速度比 優(yōu)化前大約快11倍。如果對CAS-ESM進(jìn)行為期更長時間的模擬,優(yōu)化后的METGRID更能體現(xiàn) 它的價值。
[0026] 因?yàn)樵赪RF積分之前加了MPI同步操作,所以每個進(jìn)程METGRID和REAL計(jì)算時間的 總和是一樣的。同樣以上述為期5天的模擬為例,當(dāng)對CAS-ESM系統(tǒng)使用不同CPU核心時,優(yōu) 化前后CAS-ESM、METGRID和REAL模塊計(jì)算總時間的情況如表4所示。
[0027] 表4為優(yōu)化前后METGRID和REAL模塊、CAS-ESM系統(tǒng)運(yùn)行時間的比較情況
從表4可以得出: 1)優(yōu)化前(Before optimizing)METGRID和REAL模塊計(jì)算時間占 CAS-ESM系統(tǒng)總計(jì)算時 間的70%以上,比重較大。從側(cè)面反映了對METGRID負(fù)載均衡優(yōu)化的重要性。
[0028] 2)同樣是用64個CPU核心,優(yōu)化后(After optimizing) METGRID和REAL模塊的計(jì) 算速度比優(yōu)化前大約快7.2倍,優(yōu)化后CAS-ESM總體計(jì)算速度提升217.53%。從而,進(jìn)一步驗(yàn) 證了我們提出的優(yōu)化算法的高效性。
[0029] 3)當(dāng)用不同處理器個數(shù)重新運(yùn)行CAS-ESM時,METGRID和REAL模塊計(jì)算速度有類似 的加速效果。
[0030] 按照以上介紹,本發(fā)明完成了一種對氣象數(shù)據(jù)處理模塊METGRID進(jìn)行負(fù)載均衡的 方法。在METGRID模塊中創(chuàng)建子程序search_match_mask用以遍歷所有的頂點(diǎn)和保存遍歷記 錄,每當(dāng)調(diào)用search_extrap時,就可以直接從遍歷記錄中讀取對應(yīng)的記錄,而不用再執(zhí)行 search_extrap的第一個f or循環(huán)。通過這樣的方式,可以有效地減少第一個f or循環(huán)內(nèi)部迭 代的總次數(shù)。該方法解決了METGRID模塊負(fù)載不均衡的問題,并且提升了該模塊和整個地 球系統(tǒng)模式CAS-ESM的計(jì)算性能。
[0031] 以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精 神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【主權(quán)項(xiàng)】
1. 一種對氣象數(shù)據(jù)處理模塊進(jìn)行負(fù)載均衡的優(yōu)化方法其特征在于:主要對METGRID模 塊中的子函數(shù)search_extrap進(jìn)行優(yōu)化,以通過保存各個頂點(diǎn)的廣度優(yōu)先搜索的遍歷記錄 來減少子函數(shù)search_extrap在廣度優(yōu)先搜索中迭代的次數(shù)。2. 根據(jù)權(quán)利要求1所述的對氣象數(shù)據(jù)處理模塊進(jìn)行負(fù)載均衡的優(yōu)化方法其特征在于, 該優(yōu)化方法包括以下步驟: 創(chuàng)建一個子程序search_match_mask,用以遍歷所有的頂點(diǎn)和保存遍歷記錄,該子程序 主要實(shí)現(xiàn)search_extrap第一個for循環(huán)的功能;以及對子函數(shù)search_extrap的代碼進(jìn)行 相應(yīng)修改。3. 根據(jù)權(quán)利要求2所述的對氣象數(shù)據(jù)處理模塊進(jìn)行負(fù)載均衡的優(yōu)化方法其特征在于: 在第一次調(diào)用函數(shù)search_extrap之前,各個進(jìn)程可以通過執(zhí)行第一個for循環(huán)遍歷所有的 頂點(diǎn),找到每個頂點(diǎn)對應(yīng)的最有效近鄰,然后保存遍歷記錄。4. 根據(jù)權(quán)利要求3所述的對氣象數(shù)據(jù)處理模塊進(jìn)行負(fù)載均衡的優(yōu)化方法其特征在于: 每當(dāng)調(diào)用search_extrap時,就直接從所述遍歷記錄中讀取對應(yīng)的記錄,不用再執(zhí)行所述第 一個for循環(huán)。5. 根據(jù)權(quán)利要求4所述的對氣象數(shù)據(jù)處理模塊進(jìn)行負(fù)載均衡的優(yōu)化方法其特征在于, 創(chuàng)建6個二維數(shù)組形式的公共變量:《a Λ/a 郝 queue0^mtch_imsk_queuel^mtch_imsk_found_valid(M\\imtch_imsk_found_validl,^ 中,《a 兩來存儲ZffasAraJ=O時每個頂點(diǎn)對應(yīng)的最有效近鄰的坐標(biāo);《a ?as々_ar_raj^用來存儲《aslrahl時每個頂點(diǎn)對應(yīng)的最有效近鄰的坐標(biāo);在搜索頂點(diǎn)最有效 近鄰時,《a 用來存儲/SasAraJ=O時的隊(duì)列<7;同理,?a <7如如2用來 存儲時的隊(duì)列<7; ?a 用來存儲時每個頂點(diǎn)是否 找到最有效的近鄰;icA_?asl/ou/3c/_ 用來存儲《asArahl時每個頂點(diǎn)是否找到最 有效的近鄰。6. 根據(jù)權(quán)利要求5所述的對氣象數(shù)據(jù)處理模塊進(jìn)行負(fù)載均衡的優(yōu)化方法其特征在于, 在每個進(jìn)程調(diào)用函數(shù)search_extrap之前,需要先調(diào)用子程序search_match_mask把遍歷記 錄藏值給二觀WiMi脆tch_mask_arrayO 咖tch_mask_arrayO 咖tch_mask_queLieO 咖tch_ mas k_queue 1 獅 t ch_mas k_found_va I i d(M\\ 脆 t ch_mas k_found_va I i d 1。7. 根據(jù)權(quán)利要求6所述的對氣象數(shù)據(jù)處理模塊進(jìn)行負(fù)載均衡的優(yōu)化方法其特征在于: 主要是對search_extrap第一個for循環(huán)代碼部分進(jìn)行了修改,第二個for循環(huán)代碼基本保 持不變。
【文檔編號】H04L29/08GK105911962SQ201610065226
【公開日】2016年8月31日
【申請日】2016年1月29日
【發(fā)明人】王力哲, 王玉柱, 姜金榮, 趙曉溪, 葉煌, 何卷雄
【申請人】中國科學(xué)院遙感與數(shù)字地球研究所