一種海洋數(shù)值模式并行框架的設計方法
【專利摘要】本發(fā)明公開了一種海洋數(shù)值模式并行框架的設計方法,通過對典型的海洋數(shù)值模式的計算特征進行分析,將并行功能模塊與物理過程計算模塊分離開來,并將并行功能封裝成一個獨立的模塊。并行框架的設計只需關(guān)注并行功能的實現(xiàn)和并行效率的優(yōu)化,無需關(guān)注具體求解的物理問題,從而具有高度的通用性;而海洋數(shù)值模式的開發(fā)可以使用并行框架實現(xiàn)并行化,從而可以從數(shù)據(jù)分解、進程間通訊、并行輸入輸出等繁瑣的細節(jié)中解脫出來,更加專注于物理過程的實現(xiàn)。
【專利說明】
一種海洋數(shù)值模式并行框架的設計方法
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及海洋數(shù)值處理領(lǐng)域,具體涉及一種海洋數(shù)值模式并行框架的設計方法?!颈尘凹夹g(shù)】
[0002]物理海洋研究中,數(shù)值模擬是一個非常重要的研究手段。而高分辨率海洋數(shù)值模擬的計算量是很大的,為了盡快取得模擬結(jié)果,需要借助高性能計算機來減少程序的運行時間。這就需要將已有的數(shù)值模式改為并行程序,或開發(fā)支持并行運算的數(shù)值模式。然而, 并行程序的設計在思路和方法上與串行程序有著很大的差別,其開發(fā)難度也比較大。
【發(fā)明內(nèi)容】
[0003]為解決上述問題,本發(fā)明提供了一種海洋數(shù)值模式并行框架的設計方法,通過對典型的海洋數(shù)值模式的計算特征進行分析,將并行功能模塊與物理過程計算模塊分離開來,并將并行功能封裝成一個獨立的模塊。并行框架的設計只需關(guān)注并行功能的實現(xiàn)和并行效率的優(yōu)化,無需關(guān)注具體求解的物理問題,從而具有高度的通用性;而海洋數(shù)值模式的開發(fā)可以使用并行框架實現(xiàn)并行化,從而可以從數(shù)據(jù)分解、進程間通訊、并行輸入輸出等繁瑣的細節(jié)中解脫出來,更加專注于物理過程的實現(xiàn)。
[0004]為實現(xiàn)上述目的,本發(fā)明采取的技術(shù)方案為:
[0005]—種海洋數(shù)值模式并行框架的設計方法,其特征在于,包括如下步驟:
[0006]S1、完成FP0M框架的初始化工作,在使用FP0M框架的功能前,必須首先對其進行調(diào)用;
[0007]S2、釋放已分配的資源,每個進行必須在程序結(jié)束前對其進行調(diào)用;
[0008]S3、進行均勻網(wǎng)格劃分的區(qū)域分解:完成x方向的全域網(wǎng)格數(shù)、y方向的全域網(wǎng)格數(shù)、x方向的進程數(shù)、y方向的進程數(shù)、邊界網(wǎng)格數(shù)、用來存儲子區(qū)域(包括邊界網(wǎng)格)數(shù)據(jù)所需的x方向最小維度長度、用來存儲子區(qū)域(包括邊界網(wǎng)格)數(shù)據(jù)所需的y方向最小維度長度的輸入,如果為.FALSE.則在bnx和bny中返回用來存儲子區(qū)域數(shù)據(jù)所需的最小維度長度;如果為.TRUE.,則使用bnx和bny中指定的維度長度來存儲子區(qū)域數(shù)據(jù)根據(jù)指定的進程數(shù),對總網(wǎng)格數(shù)進行區(qū)域劃分,得到各進程存儲的子區(qū)域的網(wǎng)格數(shù);
[0009]S4、進行具備負載平衡的區(qū)域分解:完成x方向的全域網(wǎng)格數(shù)、y方向的全域網(wǎng)格數(shù)、全域各網(wǎng)格的負載、x方向的進程數(shù)、y方向的進程數(shù)、邊界網(wǎng)格數(shù)、用來存儲子區(qū)域(包括邊界網(wǎng)格)數(shù)據(jù)所需的x方向最小維度長度、用來存儲子區(qū)域(包括邊界網(wǎng)格)數(shù)據(jù)所需的 y方向最小維度長度的輸入,如果為.FALSE.則在bnx和bny中返回用來存儲子區(qū)域數(shù)據(jù)所需的最小維度長度;如果為.TRUE.,則使用bnx和bny中指定的維度長度來存儲子區(qū)域數(shù)據(jù)根據(jù)指定的進程數(shù),對總網(wǎng)格數(shù)進行區(qū)域劃分,得到各進程存儲的子區(qū)域的網(wǎng)格數(shù);根據(jù) workload指定的負載進行區(qū)域分解,以實現(xiàn)負載平衡,其它與FP0M_DEC0MP_UNIF0RM相同;
[0010]S5、邊界網(wǎng)格數(shù)據(jù)更新;由相鄰進程更新邊界網(wǎng)格的數(shù)據(jù),其中〈TYPE〉可以為CHAR,INT,REAL,分別用來完成character,integer和real類型的邊界網(wǎng)格數(shù)據(jù)更新;
[0011] S6、進行循環(huán)起止范圍的轉(zhuǎn)換:完成內(nèi)網(wǎng)格循環(huán)起止范圍以及包含邊界網(wǎng)格的循環(huán)起止范圍的轉(zhuǎn)換;
[0012] S7、進行局部下標與全局下標的轉(zhuǎn)換;[〇〇13] S8、進行并行輸入輸出;[〇〇14] S81、并行打開文件:打開文件以進行并行讀寫操作,其中〈TYPE〉可以為CHAR,INT, REAL,分別用來進行character,integer和real類型數(shù)據(jù)的讀寫操作;[〇〇15] S82、并行關(guān)閉文件:關(guān)閉已打開的并行10文件;[〇〇16] S83、并行讀文件:并行讀取數(shù)據(jù),其中〈TYPE〉可以為CHAR,INT,REAL,分別用來讀取 character,integer 和real 類型的數(shù)據(jù);[〇〇17] S84、并行寫文件:并行寫入數(shù)據(jù),其中〈TYPE〉可以為0^1?,預1',1^41,分別用來寫入 character,integer 和real 類型的數(shù)據(jù);[〇〇18] S9、進行數(shù)據(jù)的散發(fā)和收集;[〇〇19] S91、數(shù)據(jù)散發(fā):將根進程中GArray的數(shù)據(jù)散發(fā)到各個進程,其中〈TYPE〉可以為 CHAR,INT,REAL,分別用來散發(fā)character,integer和real類型的數(shù)據(jù);
[0020] S92、數(shù)據(jù)收集:從各進程收集數(shù)據(jù)存入到根進程的GArray中,其中〈TYPE〉可以為 CHAR,INT,REAL,分別用來收集character,integer和real類型的數(shù)據(jù);[〇〇21] S93、共享數(shù)據(jù):共享GArray的數(shù)據(jù),返回一個指向共享數(shù)據(jù)的句柄,其中〈TYPE〉可以為CHAR,INT,REAL,分別用來共享character,integer和real類型的數(shù)據(jù);[0〇22] S94、關(guān)閉共孚:關(guān)閉wh指向的共孚數(shù)據(jù);[〇〇23] S95、共享數(shù)據(jù)散發(fā):從根進程將win指向的共享數(shù)據(jù)散發(fā)數(shù)據(jù)到各進程,其中〈 TYPE〉可以為CHAR,INT,REAL,分別用來散發(fā)character,integer和real類型的數(shù)據(jù);[〇〇24] S96、共享數(shù)據(jù)收集:從各進程接收數(shù)據(jù)到根進程中win指向的共享數(shù)據(jù),其中〈 TYPE〉可以為CHAR,INT,REAL,分別用來收集character,integer和real類型的數(shù)據(jù);[〇〇25] S10、完成廣播和規(guī)約;[〇〇26] S101、廣播:將以dat為起始的num個數(shù)據(jù)從根進程廣播到其它進程,其中〈TYPE〉可以為CHAR,INT,REAL,分別用來廣播character,integer和real類型的數(shù)據(jù);[〇〇27] S102、規(guī)約:對value進行指定的規(guī)約操作,并將結(jié)果存入根進程,其中〈TYPE〉可以為INT,REAL,分別用來規(guī)約integer和real類型的數(shù)據(jù);
[0028] S103、組規(guī)約:對value進行指定的規(guī)約操作,所有進程都可以得到規(guī)約結(jié)果,其中 〈TYPE〉可以為INT,REAL,分別用來規(guī)約integer和real類型的數(shù)據(jù);
[0029] S11、進行屏顯調(diào)試;
[0030] S111、顯示進程信息:每個進程顯示自己的ID以及相關(guān)信息;[〇〇31] S112、顯示信息:根進程或所有進程在標準輸出上顯示指定的信息;[〇〇32] S113、顯示子區(qū)域數(shù)據(jù):根據(jù)elefmt指定的格式顯示數(shù)據(jù)A,其中〈TYPE〉可以為 CHAR,INT,REAL,分別用來顯示character,integer和real類型的數(shù)據(jù)。
[0033]其中,所述內(nèi)網(wǎng)格循環(huán)起止范圍的轉(zhuǎn)換具體包括:
[0034]完成x方向相對于全域網(wǎng)格的循環(huán)起始值的輸入,函數(shù)返回值為x方向相對于子區(qū)域網(wǎng)格的循環(huán)起始值;
[0035]完成x方向相對于全域網(wǎng)格的循環(huán)結(jié)束值的輸入,函數(shù)返回值為X方向相對于子區(qū)域網(wǎng)格的循環(huán)結(jié)束值;
[0036]完成y方向相對于全域網(wǎng)格的循環(huán)起始值的輸入,函數(shù)返回值為y方向相對于子區(qū)域網(wǎng)格的循環(huán)起始值;
[0037]完成y方向相對于全域網(wǎng)格的循環(huán)結(jié)束值的輸入,函數(shù)返回值為y方向相對于子區(qū)域網(wǎng)格的循環(huán)結(jié)束值。
[0038]其中,所述包含邊界網(wǎng)格的循環(huán)起止范圍的轉(zhuǎn)換具體包括:
[0039]完成x方向相對于全域網(wǎng)格的循環(huán)起始值的輸入,排除在外的邊界網(wǎng)格數(shù),函數(shù)返回值為x方向相對于子區(qū)域網(wǎng)格的循環(huán)起始值,可指定排除在外的邊界網(wǎng)格數(shù);
[0040]完成x方向相對于全域網(wǎng)格的循環(huán)結(jié)束值的輸入,排除在外的邊界網(wǎng)格數(shù),函數(shù)返回值為x方向相對于子區(qū)域網(wǎng)格的循環(huán)結(jié)束值,可指定排除在外的邊界網(wǎng)格數(shù);
[0041]完成y方向相對于全域網(wǎng)格的循環(huán)起始值的輸入,排除在外的邊界網(wǎng)格數(shù),函數(shù)返回值為y方向相對于子區(qū)域網(wǎng)格的循環(huán)起始值,可指定排除在外的邊界網(wǎng)格數(shù);
[0042]完成y方向相對于全域網(wǎng)格的循環(huán)結(jié)束值的輸入,排除在外的邊界網(wǎng)格數(shù),函數(shù)返回值為y方向相對于子區(qū)域網(wǎng)格的循環(huán)結(jié)束值,可指定排除在外的邊界網(wǎng)格數(shù)。
[0043]其中,所述步驟S7具體包括
[0044]完成x方向全域網(wǎng)格的下標的輸入,將x方向全域網(wǎng)格下標轉(zhuǎn)換為相對于子區(qū)域網(wǎng)格的下標;[〇〇45]完成y方向全域網(wǎng)格的下標的輸入,將y方向全域網(wǎng)格下標轉(zhuǎn)換為相對于子區(qū)域網(wǎng)格的下標;
[0046]完成x方向子區(qū)域網(wǎng)格的下標的輸入,將x方向子區(qū)域網(wǎng)格下標轉(zhuǎn)換為相對于全域網(wǎng)格的下標;
[0047]完成y方向子區(qū)域網(wǎng)格的下標的輸入,將y方向子區(qū)域網(wǎng)格下標轉(zhuǎn)換為相對于全區(qū)域網(wǎng)格的下標。[〇〇48]其中,所述FP0M框架包括如下功能:
[0049](1)判斷當前進程是否為根進程:若當前進程為根進程,則返回.TRUE.,否則返回.FALSE;
[0050](2)獲取進程ID,并返回當前進程的ID;[〇〇51](3)實現(xiàn)進程同步;
[0052](4)開始計時;[〇〇53](5)耗時顯示:顯示從上次計時開始以秒為單位經(jīng)過的時間。[〇〇54]本發(fā)明具有以下有益效果:
[0055]將原一直長期使用的串行模式并行,提高計算效率和時效性,減少計算時間,充分使用計算資源;可以使用并行框架對海洋數(shù)值實現(xiàn)并行化,從而可以從數(shù)據(jù)分解、進程間通訊、并行輸入輸出等繁瑣的細節(jié)中解脫出來,更加專注于物理過程的實現(xiàn)?!靖綀D說明】
[0056]圖1為本發(fā)明實施例其中的渤黃海M2分潮同潮圖。
[0057]圖2為本發(fā)明實施例1中加速比和并行效率的示意圖。
[0058]圖3為本發(fā)明實施例2中印度洋流場及上層厚度異常示意圖。
[0059]圖4為本發(fā)明實施例2中加速比和并行效率示意圖。
[0060]圖5為本發(fā)明實施例3中的海表面水位起伏示意圖。[0061 ]圖6為本發(fā)明實施例3中加速比和并行效率示意圖。[〇〇62]圖7為本發(fā)明實施例4中南海10 lm深度處的煒向斜壓流示意圖。
[0063]圖8為本發(fā)明實施例3中加速比和并行效率示意圖。【具體實施方式】[〇〇64]為了使本發(fā)明的目的及優(yōu)點更加清楚明白,以下結(jié)合實施例對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。[〇〇65]在以下實施例中使用FP0M框架對四個海洋數(shù)值模式進行了并行化,并對并行性能進行了測試和分析。硬件平臺為:一個節(jié)點,共有2個CPU,每個CPU有6個內(nèi)核,主頻為 2.67GHz,內(nèi)存大小為24GB。操作系統(tǒng)為:Centos Linux,開發(fā)環(huán)境為Intel Compiler 2015 和Intel Parallel Stud1 XE 2013評估版。使用mpich2(版本1.3.2pl)作為MPI并行庫進行以下算例的編譯調(diào)試。
[0066]實施例1
[0067]二維潮波伴隨同化數(shù)值模式的并行
[0068]本實施例使用一個二維潮波伴隨同化數(shù)值模型來來模擬渤黃海的潮汐。開邊界條件和底摩擦系數(shù)的確定是潮汐潮流數(shù)值模擬中很重要的一個方面,利用伴隨同化方法可以反演潮汐模型中的開邊界條件和底摩擦系數(shù)。本實驗利用二維潮波伴隨同化模型,同化高度計資料,模擬渤黃海的M2分潮。首先,將原有的串行程序使用FP0M框架改為并行程序。串行程序共有1210行(不含空行,但包含必要注釋),改為并行后,共添加代碼110行,修改104 行,并行程序共1320行。添加行數(shù)占串行程序總行數(shù)的9.1%,修改行數(shù)占8.6%。圖1為模擬得到的渤黃海M2分潮的同潮圖。[〇〇69]下面對加速比和并行效率進行分析(圖2)。該算例分別用1,2,4,6,8,10和12個進程進行了計算。從圖2中看到,當使用12個進程時加速比達到了 7,效率在0.6左右,并行效果良好。使用12個進程計算時的區(qū)域分解方式比使用10個進程時的負載更加平衡,因而使用 12個進程時并行效率更高一些。
[0070] 實施例2[〇〇71] 一層半約化重力風生環(huán)流數(shù)值模式的并行
[0072]本算例使用一個1.5層約化重力風生海流模型進行印度洋海流的數(shù)值模擬實驗。 整個世界大洋都存在海流,并且其時空變化是連續(xù)的,通過它們把世界大洋有機的聯(lián)系在一起。根據(jù)大洋上的實際風場,同時考慮到科氏力隨煒度的變化這一事實以及地形的摩擦作用,就可以模擬出海流的基本特征,掌握了各大洋海流的基本特征,對于航運以及對氣候的研究都具有重大意義。由于海流的模擬要求比較高的分辨率,因而其計算量非常大。本算例首先使用FP0M將該數(shù)值模型進行并行化,并行后程序代碼共364行(不包括空行和注釋行),其中在串行改并行的過程中添加代碼35行,修改代碼62行,分別占總代碼行數(shù)的9.6% 和17%,共有21處代碼調(diào)用了 FP0M函數(shù)/子程序。然后使用并行化的數(shù)值模式,進行了印度洋海流的數(shù)值模擬實驗,并對加速比和并行效率進行了測試。在該實驗中,水平分辨率為1/ 12度,水平方向網(wǎng)格數(shù)為1201X841,垂向分為2層,空間網(wǎng)格數(shù)共計2020082個。
[0073]圖3為模擬得到的印度洋的流場以及上層厚度的異常,從中可以清晰地看到西赤道印度洋的流系很復雜,而在南印度洋存在一個逆時針的流環(huán)。[〇〇74]下面對加速比和并行效率進行分析(圖4)。該算例分別用1,2,4,6,8,10,12個進程進行了計算,使用1個進程時計算時間約為632秒。從圖4中看到,當使用12個進程時加速比為7.5左右,并行效率在0.6左右,并行效果良好。[〇〇75] 實施例3
[0076]大洋西向強化數(shù)值模式的并行
[0077]本算例利用一個一層半正壓模式模擬定常風場的作用下大洋流場西向強化現(xiàn)象。 西向強化是大洋環(huán)流中的一個重要現(xiàn)象,Stommel和Munk等分別通過0效應,底摩擦以及非線性慣性作用等從理論上解釋了大洋的西向強化現(xiàn)象。由于大洋的空間尺度往往較大,需要較大的計算量,因此往往比較耗費時間,需要通過并行縮短總的計算時間。本算例中首先使用FP0M將該數(shù)值模型進行并行化,并行后程序代碼共453行(不包括空行和注釋行),其中在串行改并行的過程中添加代碼24行,修改代碼10行,分別占總代碼行數(shù)的5.3%和2.2%, 共有34處代碼調(diào)用了 FP0M函數(shù)/子程序。然后使用并行化的數(shù)值模式,進行了大洋西向強化的數(shù)值模擬實驗,并對加速比和并行效率進行了測試。在該實驗中,水平分辨率為〇.〇25°, 水平方向網(wǎng)格數(shù)為1205X4810,垂向分為2層,空間網(wǎng)格數(shù)共計5796050個。
[0078]圖5為模擬得到的大洋在定常風作用下導致的海平面起伏的分布及對應的海流分布狀況。從圖中明顯可以看出,在定常風的作用下大洋西側(cè)海面明顯高于東側(cè)海面,大洋西側(cè)流速大于大洋東側(cè)的流速。[〇〇79]下面對加速比和并行效率進行分析(圖6)。該算例分別用1,2,4,6,8,10和12個進程進行了計算,使用1個進程時計算時間約為0.5小時。從圖6中看到,當使用12個進程時加速比達到了 11.4,效率在0.95左右。進程數(shù)為8時,其效率最小但仍可達到0.91左右,并行效果較好。由于在12個進程時采用了4 X 3的進程分解方案,比10個進程時的5 X 2更為合理,因而其效率也較高。
[0080] 實施例4[0081 ]三維等密度坐標內(nèi)潮數(shù)值模式的并行
[0082]本算例使用一個三維等密度坐標內(nèi)潮數(shù)值模型進行南海內(nèi)潮的數(shù)值模擬實驗。內(nèi)潮是發(fā)生在海洋內(nèi)部的具有潮汐頻率的波動,由表面潮與海底地形相互作用而生成,其造成的海水起伏高達數(shù)百米。內(nèi)潮無論是對于海洋科學研究本身還是對于人類從事海上活動都具有極其重要的意義。然而實際海洋內(nèi)潮的數(shù)值模擬必須使用三維數(shù)值模式,而且在空間上要有比較高的分辨率,因而其計算量非常大。本算例中首先使用FP0M將該數(shù)值模型進行并行化,并行后程序代碼共4463行(不包括空行和注釋行),其中在串行改并行的過程中添加代碼117行,修改代碼163行,分別占總代碼行數(shù)的2.6%和3.7%,共有87處代碼調(diào)用了 FP0M函數(shù)/子程序。然后使用并行化的數(shù)值模式,進行了南海內(nèi)潮的數(shù)值模擬實驗,并對加速比和并行效率進行了測試。在該實驗中,水平分辨率為5',水平方向網(wǎng)格數(shù)為361 X361, 垂向分為54層,空間網(wǎng)格數(shù)共計7037334個。[〇〇83]圖7為模擬得到的101m深度處的煒向斜壓流,從中可以清晰地看到呂宋海峽是南海內(nèi)潮的主要生成源地,生成的內(nèi)潮分為三個分支,分別傳到太平洋、東沙群島以及南海海盆。
[0084]下面對加速比和并行效率進行分析(圖8)。該算例分別用1,2,4,6,8,10和12個進程進行了計算,使用1個進程時計算時間約為2.12小時。從圖8中看到,當使用12個進程時加速比達到了 8,效率在0.7左右,并行效果良好。
[0085]以上所述僅是本發(fā)明的優(yōu)選實施方式,應當指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以作出若干改進和潤飾,這些改進和潤飾也應視為本發(fā)明的保護范圍。
【主權(quán)項】
1.一種海洋數(shù)值模式并行框架的設計方法,其特征在于,包括如下步驟:51、完成FPOM框架的初始化工作,在使用FPOM框架的功能前,必須首先對其進行調(diào)用;52、釋放已分配的資源,每個進行必須在程序結(jié)束前對其進行調(diào)用;53、進行均勻網(wǎng)格劃分的區(qū)域分解:完成x方向的全域網(wǎng)格數(shù)、y方向的全域網(wǎng)格數(shù)、x方 向的進程數(shù)、y方向的進程數(shù)、邊界網(wǎng)格數(shù)、用來存儲子區(qū)域(包括邊界網(wǎng)格)數(shù)據(jù)所需的x方 向最小維度長度、用來存儲子區(qū)域(包括邊界網(wǎng)格)數(shù)據(jù)所需的y方向最小維度長度的輸入, 如果為.FALSE.則在bnx和bny中返回用來存儲子區(qū)域數(shù)據(jù)所需的最小維度長度;如果為.TRUE.,則使用bnx和bny中指定的維度長度來存儲子區(qū)域數(shù)據(jù)根據(jù)指定的進程數(shù),對總網(wǎng) 格數(shù)進行區(qū)域劃分,得到各進程存儲的子區(qū)域的網(wǎng)格數(shù);54、進行具備負載平衡的區(qū)域分解:完成x方向的全域網(wǎng)格數(shù)、y方向的全域網(wǎng)格數(shù)、全 域各網(wǎng)格的負載、x方向的進程數(shù)、y方向的進程數(shù)、邊界網(wǎng)格數(shù)、用來存儲子區(qū)域(包括邊界 網(wǎng)格)數(shù)據(jù)所需的x方向最小維度長度、用來存儲子區(qū)域(包括邊界網(wǎng)格)數(shù)據(jù)所需的y方向 最小維度長度的輸入,如果為.FALSE.則在bnx和bny中返回用來存儲子區(qū)域數(shù)據(jù)所需的最 小維度長度;如果為.TRUE.,則使用bnx和bny中指定的維度長度來存儲子區(qū)域數(shù)據(jù)根據(jù)指 定的進程數(shù),對總網(wǎng)格數(shù)進行區(qū)域劃分,得到各進程存儲的子區(qū)域的網(wǎng)格數(shù);根據(jù)workload 指定的負載進行區(qū)域分解,以實現(xiàn)負載平衡,其它與FP0M_DEC0MP_UNIF0RM相同;55、邊界網(wǎng)格數(shù)據(jù)更新:由相鄰進程更新邊界網(wǎng)格的數(shù)據(jù),其中〈TYPE〉可以為CHAR, INT,REAL,分別用來完成character,integer和real類型的邊界網(wǎng)格數(shù)據(jù)更新;56、進行循環(huán)起止范圍的轉(zhuǎn)換:完成內(nèi)網(wǎng)格循環(huán)起止范圍以及包含邊界網(wǎng)格的循環(huán)起 止范圍的轉(zhuǎn)換;57、進行局部下標與全局下標的轉(zhuǎn)換;58、進行并行輸入輸出;581、并行打開文件:打開文件以進行并行讀寫操作,其中〈TYPE〉可以為CHAR,INT, REAL,分別用來進行character,integer和real類型數(shù)據(jù)的讀寫操作;582、并行關(guān)閉文件:關(guān)閉已打開的并行10文件;583、并行讀文件:并行讀取數(shù)據(jù),其中〈TYPE〉可以為0^1?,1價,1^41,分別用來讀取 character,integer 和real 類型的數(shù)據(jù);584、并行寫文件:并行寫入數(shù)據(jù),其中〈TYPE〉可以為0^1?,預1',1^41,分別用來寫入 character,integer 和real 類型的數(shù)據(jù);59、進行數(shù)據(jù)的散發(fā)和收集;591、數(shù)據(jù)散發(fā):將根進程中GArray的數(shù)據(jù)散發(fā)到各個進程,其中〈TYPE〉可以為CHAR, INT,REAL,分別用來散發(fā)character,integer和real類型的數(shù)據(jù);592、數(shù)據(jù)收集:從各進程收集數(shù)據(jù)存入到根進程的GArray中,其中〈TYPE〉可以為CHAR, INT,REAL,分別用來收集character,integer和real類型的數(shù)據(jù);593、共享數(shù)據(jù):共享GArray的數(shù)據(jù),返回一個指向共享數(shù)據(jù)的句柄,其中〈TYPE〉可以為 CHAR,INT,REAL,分別用來共享character,integer和real類型的數(shù)據(jù);594、關(guān)閉共孚:關(guān)閉wh指向的共孚數(shù)據(jù);595、共享數(shù)據(jù)散發(fā):從根進程將win指向的共享數(shù)據(jù)散發(fā)數(shù)據(jù)到各進程,其中〈TYPE〉可 以為CHAR,INT,REAL,分別用來散發(fā)character,integer和real類型的數(shù)據(jù);S96、共享數(shù)據(jù)收集:從各進程接收數(shù)據(jù)到根進程中win指向的共享數(shù)據(jù),其中〈TYPE〉可 以為CHAR,INT,REAL,分別用來收集character,integer和real類型的數(shù)據(jù);510、完成廣播和規(guī)約;5101、廣播:將以dat為起始的num個數(shù)據(jù)從根進程廣播到其它進程,其中〈TYPE〉可以為 CHAR,INT,REAL,分別用來廣播character,integer和real類型的數(shù)據(jù);5102、規(guī)約:對value進行指定的規(guī)約操作,并將結(jié)果存入根進程,其中〈TYPE〉可以為 INT,REAL,分別用來規(guī)約integer和real類型的數(shù)據(jù);5103、組規(guī)約:對value進行指定的規(guī)約操作,所有進程都可以得到規(guī)約結(jié)果,其中〈 TYPE〉可以為INT,REAL,分別用來規(guī)約integer和real類型的數(shù)據(jù);511、進行屏顯調(diào)試;5111、顯示進程信息:每個進程顯示自己的ID以及相關(guān)信息;5112、顯示信息:根進程或所有進程在標準輸出上顯示指定的信息;5113、顯示子區(qū)域數(shù)據(jù):根據(jù)elefmt指定的格式顯示數(shù)據(jù)A,其中〈TYPE〉可以為CHAR, INT,REAL,分別用來顯示character,integer和real類型的數(shù)據(jù)。2.根據(jù)權(quán)利要求1所述的一種海洋數(shù)值模式并行框架的設計方法,其特征在于,所述內(nèi) 網(wǎng)格循環(huán)起止范圍的轉(zhuǎn)換具體包括:完成x方向相對于全域網(wǎng)格的循環(huán)起始值的輸入,函數(shù)返回值為x方向相對于子區(qū)域網(wǎng) 格的循環(huán)起始值;完成X方向相對于全域網(wǎng)格的循環(huán)結(jié)束值的輸入,函數(shù)返回值為X方向相對于子區(qū)域網(wǎng) 格的循環(huán)結(jié)束值;完成y方向相對于全域網(wǎng)格的循環(huán)起始值的輸入,函數(shù)返回值為y方向相對于子區(qū)域網(wǎng) 格的循環(huán)起始值;完成y方向相對于全域網(wǎng)格的循環(huán)結(jié)束值的輸入,函數(shù)返回值為y方向相對于子區(qū)域網(wǎng) 格的循環(huán)結(jié)束值。3.根據(jù)權(quán)利要求1所述的一種海洋數(shù)值模式并行框架的設計方法,其特征在于,所述包 含邊界網(wǎng)格的循環(huán)起止范圍的轉(zhuǎn)換具體包括:完成X方向相對于全域網(wǎng)格的循環(huán)起始值的輸入,排除在外的邊界網(wǎng)格數(shù),函數(shù)返回值 為X方向相對于子區(qū)域網(wǎng)格的循環(huán)起始值,可指定排除在外的邊界網(wǎng)格數(shù);完成X方向相對于全域網(wǎng)格的循環(huán)結(jié)束值的輸入,排除在外的邊界網(wǎng)格數(shù),函數(shù)返回值 為X方向相對于子區(qū)域網(wǎng)格的循環(huán)結(jié)束值,可指定排除在外的邊界網(wǎng)格數(shù);完成y方向相對于全域網(wǎng)格的循環(huán)起始值的輸入,排除在外的邊界網(wǎng)格數(shù),函數(shù)返回值 為y方向相對于子區(qū)域網(wǎng)格的循環(huán)起始值,可指定排除在外的邊界網(wǎng)格數(shù);完成y方向相對于全域網(wǎng)格的循環(huán)結(jié)束值的輸入,排除在外的邊界網(wǎng)格數(shù),函數(shù)返回值 為y方向相對于子區(qū)域網(wǎng)格的循環(huán)結(jié)束值,可指定排除在外的邊界網(wǎng)格數(shù)。4.根據(jù)權(quán)利要求1所述的一種海洋數(shù)值模式并行框架的設計方法,其特征在于,所述步 驟S7具體包括完成x方向全域網(wǎng)格的下標的輸入,將x方向全域網(wǎng)格下標轉(zhuǎn)換為相對于子區(qū)域網(wǎng)格的 下標;完成y方向全域網(wǎng)格的下標的輸入,將y方向全域網(wǎng)格下標轉(zhuǎn)換為相對于子區(qū)域網(wǎng)格的下標;完成X方向子區(qū)域網(wǎng)格的下標的輸入,將X方向子區(qū)域網(wǎng)格下標轉(zhuǎn)換為相對于全域網(wǎng)格 的下標;完成y方向子區(qū)域網(wǎng)格的下標的輸入,將y方向子區(qū)域網(wǎng)格下標轉(zhuǎn)換為相對于全區(qū)域網(wǎng) 格的下標。5.根據(jù)權(quán)利要求1所述的一種海洋數(shù)值模式并行框架的設計方法,其特征在于,所述 FPOM框架包括如下功能:(1)判斷當前進程是否為根進程:若當前進程為根進程,則返回.TRUE.,否則返回.FALSE;(2)獲取進程ID,并返回當前進程的ID;(3)實現(xiàn)進程同步;(4)開始計時;(5)耗時顯示:顯示從上次計時開始以秒為單位經(jīng)過的時間。
【文檔編號】G06F17/50GK105956226SQ201610243750
【公開日】2016年9月21日
【申請日】2016年4月14日
【發(fā)明人】苗春葆, 沈飆, 林霄沛, 李明悝, 錢成春, 宋振亞, 劉海行, 張從
【申請人】中國海洋大學