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

?

CAS-ESM耦合接口技術(shù)研究*

2017-02-20 10:48陳怡然姜金榮趙曉溪王玉柱郝卉群
計(jì)算機(jī)與生活 2017年2期
關(guān)鍵詞:分量代碼耦合

陳怡然,姜金榮,趙曉溪,3,王玉柱,郝卉群

1.中國(guó)科學(xué)院 計(jì)算機(jī)網(wǎng)絡(luò)信息中心 超級(jí)計(jì)算中心,北京 100190

2.中國(guó)科學(xué)院 計(jì)算科學(xué)應(yīng)用研究中心,北京 100190

3.中國(guó)科學(xué)院大學(xué),北京 100049

4.中國(guó)科學(xué)院 遙感與數(shù)字地球研究所,北京 100094

CAS-ESM耦合接口技術(shù)研究*

陳怡然1,2,3+,姜金榮1,2,趙曉溪1,2,3,王玉柱4,郝卉群1,2

1.中國(guó)科學(xué)院 計(jì)算機(jī)網(wǎng)絡(luò)信息中心 超級(jí)計(jì)算中心,北京 100190

2.中國(guó)科學(xué)院 計(jì)算科學(xué)應(yīng)用研究中心,北京 100190

3.中國(guó)科學(xué)院大學(xué),北京 100049

4.中國(guó)科學(xué)院 遙感與數(shù)字地球研究所,北京 100094

耦合器是地球系統(tǒng)模式(earth system model,ESM)的重要組成部分,用于連接各個(gè)分量模式。針對(duì)地球系統(tǒng)模式中的耦合接口進(jìn)行編程操作,使得分量模式的代碼從耦合系統(tǒng)中分離出來(lái),從而使得模式專家只需要了解耦合接口而不再需要了解耦合器的復(fù)雜內(nèi)部實(shí)現(xiàn)。為此提出了兩種耦合接口技術(shù):一是耦合接口代碼復(fù)用技術(shù),將各個(gè)分量模式形式相似的代碼段復(fù)用為統(tǒng)一的接口;二是耦合接口代碼自動(dòng)生成技術(shù),根據(jù)統(tǒng)一的模板文件,模式專家只需要在配置文件中提供相應(yīng)的變量信息,便可通過(guò)模板文件自動(dòng)生成分量模式的代碼?;谝陨瞎ぷ?,將改寫耦合接口后的地球系統(tǒng)模式部署到中科院超級(jí)計(jì)算機(jī)“元”上,結(jié)果表明經(jīng)過(guò)代碼復(fù)用及自動(dòng)生成后的耦合接口與原來(lái)代碼模擬結(jié)果一致。

地球系統(tǒng)模式(ESM);耦合器;代碼復(fù)用;自動(dòng)生成

1 引言

地球系統(tǒng)模式CAS-ESM(Chinese Academy of Sciences-earth system model)可用于理解過(guò)去氣候以及環(huán)境演變機(jī)理,并預(yù)測(cè)全球以及區(qū)域氣候與生態(tài)環(huán)境的變化。地球系統(tǒng)模式中有一個(gè)十分重要的關(guān)鍵部件——耦合器(coupler)[1]。耦合器可以將地球各個(gè)子系統(tǒng),也就是分量模式軟件連接起來(lái),從而構(gòu)造出一個(gè)完整的地球系統(tǒng)模式軟件。

耦合器負(fù)責(zé)進(jìn)行不同分量模式之間的數(shù)據(jù)轉(zhuǎn)換,同時(shí)執(zhí)行大量的通信來(lái)進(jìn)行數(shù)據(jù)交換。它能夠大大簡(jiǎn)化各分量模式的接口工作??蓴U(kuò)展性良好且易用性強(qiáng)的耦合器對(duì)于模式專家而言,只需要了解耦合器的接口而不需要了解耦合器內(nèi)核以及底層架構(gòu),就可以將自己研制的分量模式通過(guò)連接耦合器接口遷移到地球系統(tǒng)模式中,與其他模式進(jìn)行數(shù)據(jù)交換和通信,從而與其他接入的分量模式一起構(gòu)成完整的地球系統(tǒng)模式。

近年來(lái),地球系統(tǒng)模式得到了蓬勃發(fā)展,耦合技術(shù)成為耦合模式發(fā)展的公共需求并逐漸得到了重視,耦合器研制成為耦合模式研發(fā)的重要支撐技術(shù)。在國(guó)外,耦合器發(fā)展相對(duì)成熟,使用較為廣泛的耦合器有兩個(gè):一個(gè)是由美國(guó)國(guó)家大氣研究中心(NCAR)研制的CPL耦合器,主要應(yīng)用于其提出的“共同氣候系統(tǒng)模式(community climate system model,CCSM)[2],這也是我國(guó)地球系統(tǒng)模式使用最多的耦合器。CPL耦合器最大優(yōu)勢(shì)在于模式專家將分量模式接入耦合器的時(shí)候可以不用關(guān)注耦合流程,因?yàn)轳詈狭鞒桃呀?jīng)在耦合器中實(shí)現(xiàn)。然而用戶在添加耦合物理量,設(shè)置耦合頻率等配置環(huán)節(jié)都需要對(duì)耦合器的實(shí)現(xiàn)源碼進(jìn)行相應(yīng)的手動(dòng)修改,為用戶將分量模式接入耦合器增加了難度。另一個(gè)耦合器是OASIS耦合器,它出自歐洲氣候模擬和全球變化研究中心[3],它的耦合器僅負(fù)責(zé)耦合連接,耦合流程分布在每一對(duì)實(shí)現(xiàn)耦合的分量模式之間。雖然它提供了XML(extensible markup language)文件的配置方式方便用戶配置,但是對(duì)于接入一個(gè)分量模式而言,所要知道的信息過(guò)多。用戶需要懂得耦合才能接入模式,并且必須知道數(shù)據(jù)來(lái)源,清楚系統(tǒng)內(nèi)部的數(shù)據(jù)流動(dòng),需要自定義耦合任務(wù)分配。新的耦合功能都要依賴于用戶去實(shí)現(xiàn),當(dāng)系統(tǒng)規(guī)模變得越來(lái)越大,系統(tǒng)中的耦合功能越來(lái)越復(fù)雜,用戶的負(fù)擔(dān)將會(huì)變得非常重。在國(guó)內(nèi),耦合器的開發(fā)還剛起步,基本上從國(guó)外耦合器改進(jìn)而來(lái),如地球系統(tǒng)模式耦合器C-Coupler,它是由清華大學(xué)地球系統(tǒng)科學(xué)研究中心研發(fā)的通用的模塊化并行耦合框架,基于CPL6和MCT(model coupling toolkit)開發(fā),采用面向?qū)ο笳Z(yǔ)言C++開發(fā)而成,但是它不公開源代碼,不太適合地球系統(tǒng)模式普適性發(fā)展需要。

國(guó)內(nèi)外代碼自動(dòng)生成例子有很多,它們大多以xml作為模板,提供變量自動(dòng)對(duì)應(yīng)關(guān)系,利用正則自動(dòng)生成相應(yīng)有規(guī)律性代碼。如Brumbaugh等人曾經(jīng)自動(dòng)生成sql(structured query language)、xml[4],Peng等人將控制命令文檔作為輸入,通過(guò)正則表達(dá)式規(guī)則分析命令的結(jié)構(gòu)化數(shù)據(jù),動(dòng)態(tài)地生成基于xml的代碼模板[5]。

地球系統(tǒng)模式的耦合器中各個(gè)分量代碼有著大量公共的部分,如果為這些公共的部分提升出統(tǒng)一的接口,就可以減少代碼量,修改代碼時(shí)可以只修改統(tǒng)一的部分,而無(wú)需每種分量模式都進(jìn)行修改。為此本文設(shè)計(jì)并實(shí)現(xiàn)了耦合接口代碼復(fù)用技術(shù)。模式專家將自己研究的分量模式接入耦合器接口時(shí),需要在原有代碼中手動(dòng)增加大量的變量信息、功能函數(shù)以及函數(shù)接口調(diào)用等代碼,而這些信息與其他的分量模式很多部分形式類似,耦合接口代碼自動(dòng)生成技術(shù)為這些形式類似的代碼提供了統(tǒng)一的模板,模式專家只需要提供自己的分量模式相關(guān)變量的配置文件,而不需要編寫重復(fù)代碼,便可以自動(dòng)生成出這些耦合接口代碼。

本文基于CAS-ESM研究了地球系統(tǒng)模式耦合接口的代碼復(fù)用技術(shù)以及耦合接口代碼自動(dòng)生成技術(shù),通過(guò)模板文件和用戶可以自定義的配置文件,自動(dòng)生成耦合接口代碼,簡(jiǎn)化耦合器接口。

2 CAS-ESM與CPL

地球系統(tǒng)模式CAS-ESM是一套基于地球系統(tǒng)中的動(dòng)力、物理、化學(xué)和生物過(guò)程建立起來(lái)的數(shù)學(xué)物理模型[6]。CPL耦合器是地球系統(tǒng)模式CAS-ESM的核心部件之一,它將地球多個(gè)分量模式(如大氣、陸面、海洋和海冰等)通過(guò)軟件的方式連接起來(lái),從而構(gòu)造出一個(gè)完整的地球系統(tǒng)模式軟件[7]。CPL耦合器負(fù)責(zé)不同分量模式之間的數(shù)據(jù)轉(zhuǎn)換,同時(shí)執(zhí)行大量的通信來(lái)進(jìn)行數(shù)據(jù)交換,實(shí)現(xiàn)分量間的并行計(jì)算,并控制整個(gè)地球系統(tǒng)模式的積分模擬。在科學(xué)上,耦合器充分體現(xiàn)地球系統(tǒng)多圈層間的相互作用;在技術(shù)上,耦合器是地球系統(tǒng)模式模塊化發(fā)展的需要,是各分量模式專家分工合作的關(guān)鍵平臺(tái)。

2.1 地球系統(tǒng)模式CAS-ESM

CAS-ESM基于CESM(community earth system)1.0版本開發(fā)[8],用于模擬地球氣候系統(tǒng)模式。CASESM可以通過(guò)數(shù)值模擬來(lái)確定地球系統(tǒng)各個(gè)子系統(tǒng)的性狀,可以用于理解過(guò)去氣候以及環(huán)境演變機(jī)理,并預(yù)測(cè)全球以及區(qū)域氣候與生態(tài)環(huán)境的變化。CASESM主要由5個(gè)單獨(dú)的模式組件組成,包括大氣、海洋、陸面、陸冰和海冰模式組件,外加一個(gè)中央耦合器組件——CPL耦合器。在CAS-ESM系統(tǒng)中,大氣組件模式是中國(guó)科學(xué)院大氣物理研究所開發(fā)的大氣環(huán)流模式IAPAGCM4.0(Institute ofAtmospheric Physics,atmospheric general circulation model version 4),海洋組件模式是中國(guó)科學(xué)院大氣物理研究所開發(fā)的海洋模式LICOM(LASG/IAP climate system ocean model)2.0版本[9],陸面組件模式是北京師范大學(xué)開發(fā)的CoLM(common land model)模式[10],陸冰組件模式是GLC模式[11],海冰組件模式是CICE4,大氣化學(xué)模式是中國(guó)科學(xué)院大氣物理研究所開發(fā)的GEATM(global environmental atmospheric transport model)[12]。

Fig.1 Structure picture of CAS-ESM圖1 地球系統(tǒng)模式結(jié)構(gòu)圖

這些分量模式通過(guò)CPL耦合器接入CAS-ESM,并通過(guò)耦合器進(jìn)行數(shù)據(jù)交換。耦合流程已經(jīng)在CPL耦合器中實(shí)現(xiàn),模式專家將分量模式接入耦合器的時(shí)候可以不用關(guān)系耦合流程。

2.2 CPL耦合器

美國(guó)NCAR研發(fā)的CPL耦合器主要應(yīng)用于CCSM計(jì)劃中[13],隨著CCSM系統(tǒng)的發(fā)展壯大,其成為了目前國(guó)際上應(yīng)用最為廣泛的耦合器之一。

CPL耦合器采用集中式耦合,所有的分量模式都通過(guò)耦合器實(shí)現(xiàn)耦合。耦合器已經(jīng)為分量模式定義了一套完整的耦合流程,即在耦合器內(nèi)部實(shí)現(xiàn)了固定個(gè)數(shù)分量模式的耦合,包括耦合物理量的連接關(guān)系、模式之間的數(shù)據(jù)交換,即按什么次序進(jìn)行并行通信,采用哪個(gè)并行插值算法都已經(jīng)配置好了。CPL系列的耦合器雖然被稱為通量耦合器,但分量模式交換的耦合物理量并不僅僅局限于通量,還包括狀態(tài)變量。分量模式需要通過(guò)耦合器進(jìn)行數(shù)據(jù)交換,其中有一部分?jǐn)?shù)據(jù)會(huì)在耦合器中進(jìn)行通量計(jì)算。通過(guò)調(diào)用耦合工具庫(kù)MCT中的相應(yīng)函數(shù)來(lái)實(shí)現(xiàn)這些耦合功能。正是因?yàn)榛谶@樣的設(shè)計(jì)理念,CPL耦合器才能夠具有“可插拔式”的模塊化結(jié)構(gòu)。大氣、海洋、海冰、陸面這4類分量模式在整個(gè)CCSM系統(tǒng)中是固定不變的,因?yàn)樗鼈冎g的耦合關(guān)系已經(jīng)被定義在了耦合器中。用戶可以在這4個(gè)“插槽處”替換相同類型但是采用了不同動(dòng)力框架或者基于不同物理模型的分量模式。

CPL耦合器最大優(yōu)勢(shì)在于模式專家將分量模式接入耦合器的時(shí)候可以不用關(guān)注耦合流程,因?yàn)轳詈狭鞒桃呀?jīng)在耦合器中實(shí)現(xiàn)。地球系統(tǒng)模式中的耦合流程是一個(gè)涉及多個(gè)學(xué)科知識(shí)的復(fù)雜過(guò)程。制定耦合流程需要具備廣泛的知識(shí)面和深厚的專業(yè)背景,這樣的工作并不適合模式專家來(lái)完成。而CPL耦合器所基于的核心思想是將分量模式的連接關(guān)系、數(shù)據(jù)之間的流動(dòng)關(guān)系、耦合數(shù)值計(jì)算的順序、重啟動(dòng)條件等一系列耦合環(huán)節(jié)整合到耦合器內(nèi)部。從外部看,分量模式只需將物理量數(shù)據(jù)提供給耦合器,并且告訴耦合器自己想得到哪些物理量數(shù)據(jù)即可,模式專家無(wú)需知道數(shù)據(jù)是來(lái)自哪個(gè)分量模式或者是哪個(gè)算法的運(yùn)算結(jié)果,不用關(guān)心數(shù)據(jù)在系統(tǒng)里是如何流動(dòng)的。將分量模式接入耦合器中,只需要關(guān)心自身的耦合物理量,屏蔽了其他分量模式的細(xì)節(jié),屏蔽了耦合流程的細(xì)節(jié),這樣一來(lái),即使不懂耦合的模式專家也有足夠的能力做這件事情。這樣的設(shè)計(jì)體現(xiàn)了一種模塊化協(xié)作的系統(tǒng)開發(fā)方式:耦合專家負(fù)責(zé)做耦合,而模式專家專注于接模式。

而CCSM中的耦合流程直接在耦合器中實(shí)現(xiàn),是一種代碼級(jí)的定義方式。從編寫的源代碼中去了解耦合流程,必須掌握耦合器的實(shí)現(xiàn)以及耦合工具庫(kù)MCT的各種接口程序,得有相當(dāng)長(zhǎng)時(shí)間的學(xué)習(xí)和積累。因此,在CPL耦合器中增加一個(gè)分量模式連接或者加入一個(gè)新的耦合數(shù)值算法將會(huì)是一件非常困難的事情。如沒(méi)有提供腳本形式,添加耦合物理量,設(shè)置耦合頻率等配置環(huán)節(jié)都需要對(duì)耦合器的實(shí)現(xiàn)源碼進(jìn)行相應(yīng)的修改。當(dāng)接入一個(gè)新模式時(shí),需要對(duì)腳本進(jìn)行大量的修改,又提供相應(yīng)的輔助工具,使得模式接入后的調(diào)試、維護(hù)很不方便;修改耦合流程意味著要改耦合器的內(nèi)核代碼,難度很大。另外,物理量的耦合頻率以分量模式為單位,輸出頻率以耦合器為單位,這樣的設(shè)計(jì)不夠靈活。而在計(jì)算性能方面,目前沒(méi)有實(shí)現(xiàn)異步通信,并行插值過(guò)程中存在冗余通信。表1為CPL耦合器以及修改耦合器接口后的耦合器的功能對(duì)比。

Table 1 Comparison of CPL and CAS couple表1 CPL耦合器和中科院耦合器對(duì)比

3 耦合器接口代碼復(fù)用技術(shù)

耦合接口需要支持由不同編程語(yǔ)言實(shí)現(xiàn)的分量模式。鑒于大部分的分量模式都是通過(guò)Fortran語(yǔ)言或者Fortran+C的混編方式編寫的,因此將會(huì)設(shè)計(jì)兩套耦合接口:一套為C語(yǔ)言的調(diào)用接口;另一套耦合接口將會(huì)支持Fortran調(diào)用C語(yǔ)言的方式。

各個(gè)分量模式有著大量的形式相似的代碼,如mapping的過(guò)程,各個(gè)分量模式都有分量模式到耦合器的映射和耦合器到模式的初始化以及運(yùn)行過(guò)程,分量模式間重復(fù)代碼造成了代碼的冗余。當(dāng)添加新的分量模式時(shí),又要復(fù)制同一套代碼,只做一些變量名稱的輕微改變;如果這套相似的代碼需要做整體調(diào)整,各個(gè)分量模式的代碼都需要同時(shí)做出相同的改變,這嚴(yán)重增加了工作量,同時(shí)也造成了代碼難以維護(hù)。

因?yàn)楦鱾€(gè)分量模式的映射的初始化部分是分量模式與耦合器的直接通信,未涉及分量模式間的通信,所以分量模式間可以以相同變量形式存在而不影響通量守恒。因此可以將分量模式間的映射部分改為統(tǒng)一的接口。實(shí)驗(yàn)表明,將mapping的init部分改為統(tǒng)一接口不影響程序的正確性,且運(yùn)行時(shí)間與原程序幾乎一致。

3.1 數(shù)據(jù)類型

由于耦合接口采取Fortran+C混合編程的方式,不同語(yǔ)言之間的數(shù)據(jù)結(jié)構(gòu)需要統(tǒng)一,不同語(yǔ)言之間函數(shù)調(diào)用的函數(shù)名稱需要對(duì)應(yīng),變量名稱變量類型也需要對(duì)應(yīng)。CAS-ESM的基本數(shù)據(jù)類型如圖2所示。

Fig.2 Basic data type of CAS-ESM圖2 CAS-ESM基本數(shù)據(jù)類型

3.2 混合編程中的函數(shù)名對(duì)應(yīng)

由于CAS-ESM程序代碼量大,且各個(gè)分量模塊的Fortran版本已廣為業(yè)內(nèi)使用,替換全部的Fortran代碼為C代碼不切實(shí)際,故本文采用混合編程的方式實(shí)現(xiàn)接口的復(fù)用。耦合接口上層部分代碼通過(guò)C實(shí)現(xiàn),而下層接口還是Fortran,不同語(yǔ)言間的函數(shù)調(diào)用就成為解決代碼調(diào)用的著手點(diǎn)。

Fortran與C的調(diào)用是通過(guò)編譯后生成的目標(biāo)文件的內(nèi)部函數(shù)名實(shí)現(xiàn)的。通過(guò)Linux的nm命令可以查詢到Fortran代碼編譯生成的目標(biāo)文件的函數(shù)名為文件名+_mp_+函數(shù)名+_。如編譯ccsm_comp_mod. F90中的ccsm_init()函數(shù)生成的ccsm_comp_mod_mp_ ccsm_init_()這個(gè)函數(shù)名。C文件可以通過(guò)extern這個(gè)函數(shù)名來(lái)調(diào)用ccsm_init()函數(shù)。

3.3 混合編程中的參數(shù)列表對(duì)應(yīng)

當(dāng)C調(diào)用的Fortran接口為CAS-ESM自定義的數(shù)據(jù)類型時(shí),參數(shù)傳遞應(yīng)為變量類型的地址,而非對(duì)象。當(dāng)C調(diào)用的Fortran接口的參數(shù)為char*類型時(shí),不僅要傳遞char*地址,還要傳遞字符串長(zhǎng)度。

CAM-ESM的入口程序?yàn)閏csm_driver.F90,主控接口為ccsm_comp_mod.F90,其內(nèi)部調(diào)用各個(gè)分量模式的映射程序,而rof與其他分量模式不同的是它只有分量模式到耦合器的單向過(guò)程,而無(wú)需耦合器到分量模式的過(guò)程。因此rof比起其他組件而言,參數(shù)列表缺少x2c_cc、x2c_cx變量,在Fortran中的統(tǒng)一接口可以通過(guò)optional變量替換。傳統(tǒng)的C沒(méi)有optional的屬性,然而Fortran的變量是通過(guò)地址定義的,C可以定義空指針,傳入的數(shù)據(jù)為NULL,即指針為空,此時(shí)未對(duì)指針賦值,即此optional未選擇。

3.4 代碼復(fù)用的實(shí)現(xiàn)

Fig.3 CAS-ESM call uniform coupler interface圖3 CAS-ESM調(diào)用統(tǒng)一接口

圖3 為耦合接口代碼復(fù)用的部分實(shí)現(xiàn)圖(以lnd模式為例),由于映射部分各分量模式代碼形式相似,本文將其提煉為統(tǒng)一的接口map_c2c_mct_assist.cc。

然而此種做法只在初始化部分以及結(jié)束部分的分量模式間未通信時(shí)可以保證正確性,當(dāng)分量模式間需要通信時(shí),由于統(tǒng)一接口后分量模式的全局變量在并行系統(tǒng)中僅維持一套,當(dāng)組件間交互時(shí),便會(huì)發(fā)生寫覆蓋問(wèn)題,使得全局通量不守恒。

本文保留了每種分量模式的全局變量聲明的代碼,只把函數(shù)共同的實(shí)現(xiàn)部分提煉為統(tǒng)一的接口,而全局變量依舊保留在每個(gè)分量模式的文件中,保證在系統(tǒng)中每個(gè)組件的變量唯一存在而不被覆蓋,又保證函數(shù)的共同部分代碼統(tǒng)一。

4 耦合器接口代碼自動(dòng)生成技術(shù)

耦合接口應(yīng)該定義得盡可能少。太多的接口調(diào)用會(huì)造成用戶將分量模式接入到耦合器的不便,從而增加接入模式的開發(fā)周期且不易于維護(hù),因此耦合接口應(yīng)該設(shè)計(jì)得精簡(jiǎn),并保證這些接口的功能能夠覆蓋整個(gè)耦合過(guò)程[14]。

耦合接口應(yīng)該定義得盡可能簡(jiǎn)單靈活。鑒于耦合接口的設(shè)計(jì)宗旨是盡量減少用戶對(duì)分量模式程序的改動(dòng),不會(huì)要求用戶按照本文定義的接口規(guī)范來(lái)強(qiáng)制改變已完成的分量模式的數(shù)據(jù)結(jié)構(gòu)、模塊設(shè)計(jì)以及運(yùn)行流程等。因此,接口需要設(shè)計(jì)得簡(jiǎn)單靈活,用戶通過(guò)直接調(diào)用耦合接口的方式就能得到所需的功能,數(shù)據(jù)初始化、格式轉(zhuǎn)換等處理工作應(yīng)當(dāng)交由配置文件和耦合接口程序來(lái)完成。

本文為模式用戶提供兩類接口:一類是模板文件,即原先各個(gè)分量模式之間相似的代碼,提煉出一套統(tǒng)一的模板文件,不同的部分用特殊符號(hào)代替,自動(dòng)生成的時(shí)候只需要替換這些特殊字符為組件字符即可。另一類是模式列表,如list=‘[atm',‘ice',‘lnd',‘ocn',‘rof',‘glc',‘sno'],當(dāng)用戶新增一類組件時(shí),只需要在list中添加新增組件,運(yùn)行自動(dòng)生成代碼的腳本,新增模式便會(huì)在代碼當(dāng)中自動(dòng)生成,而無(wú)需手動(dòng)添加,便可以生成以行重復(fù)或者以塊重復(fù)的代碼片段。模板文件允許添加特例,如模板文件中的x2{c}_ {c}x變量在其他模式中應(yīng)該直接替換成如x2i_ix這樣的形式,而由于ocn沒(méi)有x2o_ox這個(gè)變量,在ocn中,此變量表現(xiàn)為x2oacc_ox%data的形式,模板文件允許在特定位置手動(dòng)添加特例規(guī)則。

4.1 模式間mapping

mapping的代碼分為四部分:第一部分為分量模式到耦合器的mapping;第二部分為耦合器到分量模式的mapping;第三部分為分量模式到其自身的mapping;第四部分為分量模式之間的mapping。前三部分的代碼可以總結(jié)出統(tǒng)一的規(guī)律,可以通過(guò)前面的模板方式直接解決。

而分量模式之間的mapping不能用簡(jiǎn)單的遍歷替換解決。分量模式之間的映射關(guān)系如圖4,可知各分量模式之間不是全相連的,而且是有向圖,即映射關(guān)系不都是雙向的,如只有ice到atm的映射,而atm到ice沒(méi)有映射,這就為自動(dòng)生成代碼提出了挑戰(zhàn)。

Fig.4 Mapping of component models圖4 模式之間的mapping關(guān)系圖

為了解決以上難題,本文依據(jù)以下規(guī)則新建二維數(shù)組,第一、二列代表了存在映射關(guān)系的兩個(gè)分量模式,第三列表示它們的映射方向。如果第三列為2,說(shuō)明這兩種分量模式為雙向映射;如果是1,代碼映射關(guān)系只是第一列到第二列的映射;如果是-1,則代表僅有第二列向第一列存在映射。

有了這個(gè)二維數(shù)組的信息后,還需要給用戶提供的是模板文件,以完成替換。模板將待替換的代碼段用〈list〉…〈/list〉連接起來(lái),當(dāng)讀入模板文件時(shí)發(fā)現(xiàn)〈list〉,就將文本信息存入臨時(shí)list,直到遇到〈/list〉為止。為避免和正文因此混淆沖突,將所有的待替換內(nèi)容注釋起來(lái)。當(dāng)替換的時(shí)候把嘆號(hào)去掉,而有些mapping部分為單向,因此用雙嘆號(hào)表示,當(dāng)遇到第三列為2時(shí),兩個(gè)嘆號(hào)都去掉,當(dāng)?shù)谌行畔?1時(shí),去掉第一行的雙注釋,而保留第二行的一個(gè)注釋,第三列信息為-1時(shí),去掉第二行的雙注釋,而保留第一行的一個(gè)注釋。模板文件的書寫方式如下。

根據(jù)上述模板庫(kù)文件,以及用戶可以自定義的mapping規(guī)則,生成了mapping的代碼片段。

4.2 自動(dòng)生成接口層代碼

cesm_run部分的代碼具有非常統(tǒng)一的塊結(jié)構(gòu),模式按照{(diào)ccc}setup,{ccc}prep,cpl→{ccc},run{ccc} model,ccc→{cpl}的順序執(zhí)行。當(dāng)然,組件之間的代碼也有穿插,如圖5,其中箭頭代表cesm_run的代碼順序。

由于cesm_run部分的代碼成塊結(jié)構(gòu),既不能逐行遍歷自定義的list,也不能像上述的〈list〉…〈/list〉遍歷順序相鄰的組件。因此定義新的規(guī)則,在模板代碼中遇到!{xmlinsert}(cpl2ccc.F90,dict_cpl2ccc,ocn)字符串轉(zhuǎn)化為命令。其中{xmlinsert}作為這種替換的標(biāo)志信息,第一列cpl2ccc.F90為子模板文件,第二列dict_cpl2ccc為用戶定義的模板字典信息,第三列ocn為模式信息。用模式ocn在模板字典dict_cpl2ccc中找到替換信息,如{ccc}替換為ocn,將此替換信息替換第一列cpl2ccc.F90的子模板文件,再將替換后的文件插入{xmlinsert}所在位置完成替換。

這種方式可以完成沒(méi)有子模式的絕大多數(shù)模式的自動(dòng)生成,如atm、ice等,然而對(duì)于有子模式的lnd則需要另加考慮。上述插入文本部分只寫{ccc},只會(huì)替換成lnd,然而lnd分量模式還包含子模式rof、sno,部分代碼需要自動(dòng)生成其中的三部分,因此不能一次性插入全部?jī)?nèi)容,即代碼*1,也不能單純地將全部的代碼*3,即不能將rof、sno看成與lnd對(duì)等的模式。此時(shí)需要再將子模板文件cpl2ccc.F90寫成多個(gè)子模式〈list〉的方式循環(huán)展開,一遍插入替換單次lnd代碼,一遍循環(huán)展開子部分。

Fig.5 Structures of cesm_run coding圖5 cesm_run的模式代碼塊順序結(jié)構(gòu)

模式字典定義了帶有子模式的替換規(guī)則。子模板定義了需要替換的變量,通過(guò)正則可以識(shí)別〈list〉后的括號(hào)內(nèi)容,找到[]內(nèi)的內(nèi)容,并查詢用戶字典,便可以找到循環(huán)遍歷的替換規(guī)則,如ccc2,最外層依次替換rof、sno,中層按照子模板逐行替換,最內(nèi)層遍歷[]的個(gè)數(shù)替換,通過(guò)下標(biāo)對(duì)應(yīng)。本例中最內(nèi)層先替換{ccc2}為rof,再替換{c2}為r,完成內(nèi)層替換的一行,然后進(jìn)行下一行,完成整個(gè)中層的逐行遍歷,進(jìn)行下一個(gè)sno的同等替換,即為外層遍歷。三層遍歷后的結(jié)果插入原文{xmlinsert}位置。

4.3 自動(dòng)生成的實(shí)現(xiàn)

4.3.1 提煉出統(tǒng)一的模板文件

將原有代碼根據(jù)功能劃分,提煉出統(tǒng)一的模板,不相同的部分通過(guò)特殊的標(biāo)簽替換。模式之間的代碼段具有相似的結(jié)構(gòu)特征,可以將這些相似的特征提煉成統(tǒng)一的代碼,不同的部分提取變量名稱,用特殊的符號(hào)替代,如{ccc}標(biāo)簽。統(tǒng)一的模板管理起來(lái)非常方便,如果需要修改,不需要修改每個(gè)分量模式的代碼,只需要修改統(tǒng)一的模板代碼便可以自動(dòng)生成所有模式的代碼,提高了代碼復(fù)用性,減少了代碼量。遍歷變量名稱數(shù)組,替換模板的特殊標(biāo)簽便是代碼自動(dòng)生成的第一步。

4.3.2 根據(jù)配置文件生成控制信息文件

設(shè)計(jì)用戶配置文件,自動(dòng)生成各模板的控制信息文件。用戶提供可供配置的腳本文件,可以在腳本文件中配置分量模式之間的數(shù)據(jù)交換關(guān)系,比如設(shè)置組件之間的mapping圖結(jié)構(gòu)。為了將上述腳本文件轉(zhuǎn)換為可以運(yùn)用到程序中的信息,耦合器接口提供腳本變量名稱轉(zhuǎn)換為數(shù)組定義的方式,經(jīng)過(guò)規(guī)則定義后,用戶定義的圖結(jié)構(gòu)轉(zhuǎn)化為二維數(shù)組形式,如mapping之間的雙向模式對(duì),可以用形如[sno,glc,2]的結(jié)構(gòu)表示,單向結(jié)構(gòu)可以用[atm,ice,-1]表示,最后一位數(shù)字代表mapping方向。將用戶的配置腳本轉(zhuǎn)化為特定規(guī)則的數(shù)據(jù)結(jié)構(gòu)是代碼自動(dòng)生成的第二步。

4.3.3 匹配規(guī)則完成模板替換

根據(jù)第一步中模板文件,設(shè)計(jì)匹配替換規(guī)則,匹配第二步中的控制文件,進(jìn)行循環(huán)遍歷,將替換后的模式次數(shù)的代碼段插入原文中,完成代碼自動(dòng)生成的過(guò)程。如何替換模板文件中的標(biāo)簽,如何遍歷變量名稱的數(shù)組文件,便需要替換規(guī)則加以說(shuō)明,這也是控制代碼自動(dòng)生成的Python腳本文件。簡(jiǎn)單的模板代碼行只需要順序遍歷一次變量數(shù)組文件即可,而模板代碼段,還需要遍歷待替換的行以及數(shù)組,如果遇到帶子模式的分量,如lnd,還需要在需要的位置遍歷子模式。遇到特例化的公式計(jì)算等,還需要預(yù)留出腳本替換的位置,供用戶自行添加腳本代碼。

自動(dòng)生成代碼的流程圖如圖6,從用戶可以編輯的腳本文件生成變量數(shù)組,通過(guò)某種規(guī)則循環(huán)遍歷變量數(shù)組,替換模板代碼段,將替換后的代碼插入原代碼段。

Fig.6 Flow of automatic generation coding圖6 代碼自動(dòng)生成的流程圖

5 結(jié)束語(yǔ)

地球系統(tǒng)模式CAS-ESM可用于理解過(guò)去氣候以及環(huán)境演變機(jī)理,并預(yù)測(cè)全球以及區(qū)域氣候與生態(tài)環(huán)境的變化。

CPL耦合器是地球系統(tǒng)模式CAS-ESM的核心部件之一,它將地球多個(gè)分量模式通過(guò)軟件的方式連接起來(lái),從而構(gòu)造出一個(gè)完整的地球系統(tǒng)模式軟件。CPL耦合器負(fù)責(zé)不同分量模式之間的數(shù)據(jù)轉(zhuǎn)換,同時(shí)執(zhí)行大量的通信來(lái)進(jìn)行數(shù)據(jù)交換,實(shí)現(xiàn)分量間的并行計(jì)算并控制整個(gè)地球系統(tǒng)模式的積分模擬[13]。

CPL耦合器實(shí)現(xiàn)了耦合流程,使得模式專家只需關(guān)心耦合物理量而無(wú)需關(guān)心其他分量模式的細(xì)節(jié)以及耦合流程,然而CPL耦合器需要模式專家從源代碼中了解耦合流程,添加耦合物理量,設(shè)置耦合頻率等配置環(huán)節(jié),都需要對(duì)耦合器的實(shí)現(xiàn)源碼進(jìn)行相應(yīng)的修改。

為了改變CPL耦合器對(duì)源碼的過(guò)分依賴,本文基于CAS-ESM中的CPL耦合器,設(shè)計(jì)并實(shí)現(xiàn)了耦合接口代碼復(fù)用技術(shù)以及代碼自動(dòng)生成技術(shù)。代碼復(fù)用技術(shù)使得模式代碼從系統(tǒng)中分離出來(lái);代碼自動(dòng)生成技術(shù)通過(guò)腳本配置的方式自動(dòng)生成耦合接口代碼,用戶只需要關(guān)心模板文件以及配置文件,便可以自動(dòng)生成代碼,取代手動(dòng)修改源代碼,從而簡(jiǎn)化了耦合器接口。最后將帶有上述耦合器接口的地球系統(tǒng)模式部署到中科院超級(jí)計(jì)算機(jī)“元”上,驗(yàn)證了程序的正確性。

[1]Wan Xiuquan,Liu Zedong,Shen Biao,et al.Introduction to the community earth system model and application to high performance computing[J].Advances in Earth Science, 2014,29(4):482-491.

[2]Lamarque J F,Emmons L K,Hess P G,et al.CAM-chem: description and evaluation of interactive atmospheric chemistry in CESM[J].Geoscientific Model Development Discussions,2011,4(3):2199-2278.

[3]Marcus D S,Wang T H,Jamie P,et al.Open access series of imaging studies(OASIS):cross-sectional MRI data in young,middle aged,nondemented,and demented older adults[J].Journal of Cognitive Neuroscience,2007,19(9): 1498-1507.

[4]Brumbaugh H,Kent J.autoSql and autoXml:code generators from the genome project[J].Linux Journal,2002(99):68-74.

[5]Peng Siwei,Chen Yuping.Research and implementation of render engine controller's auto source code generator[J]. Computer Systems&Applications,2010,19(4):69-72.

[6]Sun Hongchuan,Zhou Guangqing,Zeng Qingcun.Assessments of the climate system model(CAS-ESM-C)using IAP AGCM4 as its atmospheric component[J].Chinese Journal ofAtmospheric Sciences,2012,36(2):215-233.

[7]Cai Pengli,Wang Bang,Ji Jingxiao,et al.The putative cellodextrin transporter-like protein CLP1 is involved in cellulase induction in neurospora crassa[J].Journal of Biological Chemistry,2015,290(2):788-796.

[8]Smith R,Jones P,Briegleb B,et al.The parallel ocean program(POP)reference manual ocean component of the community climate system model(CCSM)and community earth system model(CESM),LAUR-01853[R].2010.

[9]Liu Hailong,Lin Pengfei,Yu Yongqiang,et al.The baseline evaluation of LASG/IAP climate system ocean model (LICOM)version 2[J].Acta Meteorologica Sinica,2012,26 (3):318-329.

[10]Leng Pei,Song Xiaoning,Li Zhaoliang,et al.Evaluation of the effects of soil layer classification in the common land model on modeled surface variables and the associated land surface soil moisture retrieval model[J].Remote Sensing, 2013,5(11):5514-5529.

[11]Bartholomé E,Belward A S.GLC2000:a new approach to global land cover mapping from earth observation data[J]. International Journal of Remote Sensing,2005,26(9):1959-1977.

[12]Worley P H,Craig A P,Dennis J M,et al.Performance of the community earth system model[C]//Proceedings of the 2011 International Conference for High Performance Computing,Networking,Storage and Analysis,Seatle,USA, Nov 12-18,2011.Piscataway,USA:IEEE,2011:1-11.

[13]Craig A P,Vertenstein M,Jacob R.A new flexible coupler for earth system modeling developed for CCSM4 and CESM1[J].International Journal of High Performance ComputingApplications,2011,26(1):31-42.

[14]Liu L,Yang G,Wang B,et al.C-Coupler1:a Chinese community coupler for earth system modelling[J].Geoscientific Model Development Discussions,2014,7(3):3889-3936.

附中文參考文獻(xiàn):

[5]彭四偉,陳玉萍.RE控制程序源代碼自動(dòng)生成程序的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2010,19(4):69-72.

[6]孫泓川,周廣慶,曾慶存.IAP第四代大氣環(huán)流模式的氣候系統(tǒng)模式模擬性能評(píng)估[J].大氣科學(xué),2012,36(2):215-233.

CHEN Yiran was born in 1991.She is an M.S.candidate at University of Chinese Academy of Sciences.Her research interests include high performance computing on earth system model and development of parallel software.

陳怡然(1991—),女,天津人,中國(guó)科學(xué)院大學(xué)碩士研究生,主要從事高性能計(jì)算在地球系統(tǒng)模式中的應(yīng)用算法研究及相關(guān)并行軟件開發(fā)。

JIANG Jinrong was born in 1977.He is an associate research fellow at Chinese Academy of Sciences.His research interests include high performance computing on earth system model and development of parallel software.

姜金榮(1977—),男,浙江舟山人,博士,中國(guó)科學(xué)院副研究員,主要從事高性能計(jì)算在地球系統(tǒng)模式中的應(yīng)用算法研究及相關(guān)并行軟件開發(fā)。

ZHAO Xiaoxi was born in 1991.She is an M.S.candidate at University of ChineseAcademy of Sciences.Her research interests include high performance computing on earth system model and development of parallel software.

趙曉溪(1991—),女,江蘇徐州人,中國(guó)科學(xué)院大學(xué)碩士生,主要從事高性能計(jì)算在地球系統(tǒng)模式中的應(yīng)用算法研究及相關(guān)并行軟件開發(fā)。

WAMG Yuzhu was born in 1988.His research interests include high performance computing on earth system model and development of parallel software.

王玉柱(1988—),男,河南周口人,博士,主要研究領(lǐng)域?yàn)楦咝阅苡?jì)算在地球系統(tǒng)模式中的應(yīng)用算法研究及相關(guān)并行軟件開發(fā)。

HAO Huiqun was born in 1991.His research interests include high performance computing on earth system model and development of parallel software.

郝卉群(1991—),男,北京人,碩士,主要從事高性能計(jì)算在地球系統(tǒng)模式中的應(yīng)用算法研究及相關(guān)并行軟件開發(fā)。

Research of CAS-ESM Coupler Interface*

CHEN Yiran1,2,3+,JIANG Jinrong1,2,ZHAO Xiaoxi1,2,3,WANG Yuzhu4,HAO Huiqun1,2
1.Supercomputing Center,Computer Network Information Center,ChineseAcademy of Sciences,Beijing 100190,China
2.Center of Scientific ComputingApplications&Research,ChineseAcademy of Sciences,Beijing 100190,China
3.University of ChineseAcademy of Sciences,Beijing 100049,China
4.Institute of Remote Sensing and Digital Earth,Chinese Academy of Sciences,Beijing 100094,China
+Corresponding author:E-mail:chenyr@sccas.cn

Coupler is an important part of the earth system model(ESM).It connects various component models. Based on the CPL coupler interface,this paper separates the component models codes from the system model,in order to achieve the goal to read coupler interface only rather than understand the complex internal coupler of the system for component models exports.Then this paper studies two ways to code with coupler interface:reusing the duplicate codes to get unification codes and automated generation codes.Firstly,repetitive codes of different component models from coupler interface are reused to unify.Secondly,codes will be automatically generated after filling up the corresponding contents of variables on the configuration files by component models exports.Those variables will replace special variables from template files and loop traversal.Those contents can be inserted into the final codes to finish automated generation codes.Furthermore,the ESM with coupler interface which adds coding reuse and automated genera-tion is deployed to Chinese Academy of Sciences(CAS)super computer,ERA.The results of coupler with the two techniques are consistent with the original simulation one.

earth system model(ESM);coupler;coding reuse;automated generation

10.3778/j.issn.1673-9418.1512060

A

TP338.6

*The Key Deployment Project of CAS under Grant No.KJZD-EW-TZ-G09(中科院重點(diǎn)部署項(xiàng)目).

Received 2015-11,Accepted 2016-01.

CNKI網(wǎng)絡(luò)優(yōu)先出版:2016-01-14,http://www.cnki.net/kcms/detail/11.5602.TP.20160114.1658.002.html

CHEN Yiran,JIANG Jinrong,ZHAO Xiaoxi,et al.Research of CAS-ESM coupler interface.Journal of Frontiers of Computer Science and Technology,2017,11(2):242-251.

猜你喜歡
分量代碼耦合
基于增強(qiáng)注意力的耦合協(xié)同過(guò)濾推薦方法
擎動(dòng)灣區(qū)制高點(diǎn),耦合前海價(jià)值圈!
復(fù)雜線束在雙BCI耦合下的終端響應(yīng)機(jī)理
畫里有話
一斤生漆的“分量”——“漆農(nóng)”劉照元的平常生活
一物千斤
基于磁耦合的高效水下非接觸式通信方法研究
創(chuàng)世代碼
創(chuàng)世代碼
創(chuàng)世代碼
义乌市| 博湖县| 北宁市| 庄河市| 邻水| 邯郸市| 吴川市| 白水县| 佛学| 响水县| 沂水县| 南充市| 布拖县| 潼南县| 广汉市| 江川县| 万盛区| 蒙山县| 南京市| 神池县| 伊宁市| 韶关市| 石城县| 丹东市| 游戏| 龙陵县| 东辽县| 临潭县| 宜兴市| 红原县| 仪征市| 三原县| 龙井市| 聂拉木县| 扬中市| 武陟县| 曲麻莱县| 清徐县| 三河市| 宁晋县| 察哈|