欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于Linux集群平臺(tái)的DEM并行等高線生成方法與流程

文檔序號(hào):11145213閱讀:667來源:國(guó)知局
一種基于Linux集群平臺(tái)的DEM并行等高線生成方法與制造工藝

本發(fā)明屬于高性能地學(xué)計(jì)算領(lǐng)域,具體涉及一種基于Linux集群平臺(tái)的DEM并行等高線生成方法。



背景技術(shù):

眾所周知,自從1958年Miller在“Photogrammeric Engineering”雜志上發(fā)表題為“The Digital terrain model:theory and application”的論文中首次提出了數(shù)字地形表達(dá)的概念后,DTM、DEM的研究在隨后的幾十年里得到深入研究,已經(jīng)廣泛的應(yīng)用在諸如測(cè)繪與遙感、農(nóng)業(yè)規(guī)劃、土木工程、軍事、地學(xué)分析等領(lǐng)域。而等高線是地面高程相等的各相鄰點(diǎn)所連成的閉合曲線,用于描述地球表面地貌情況。作為表面形態(tài)的一種主要表現(xiàn)手段,等高線不但能簡(jiǎn)單正確地顯示地貌的形狀,還可以直觀和有效地表示空間連續(xù)分布的現(xiàn)象,精確反映在垂直和水平方向的強(qiáng)弱差異,具有較好的視覺效果,并能方便地進(jìn)行圖上量測(cè),這些特點(diǎn)使其成為專題地圖的重要表示方法,成為GIS中地理過程模擬與仿真的重要表現(xiàn)手段,在諸如地形模擬、水文模型建立、公路鐵路勘測(cè)規(guī)劃、自然資源管理、工程分析、計(jì)算領(lǐng)域、軍事領(lǐng)域有著廣泛應(yīng)用。

目前,獲取等高線的手段多種多樣,其中通過地形數(shù)據(jù)自動(dòng)生成等高線,如通過紙質(zhì)地圖掃描矢量化生成等高線,DEM柵格數(shù)據(jù)轉(zhuǎn)換成生成等高線等多種途徑和方法。其中利用DEM柵格數(shù)據(jù)通過算法自動(dòng)生成等高線是獲取等高線的最主要手段,該途徑既是利用DEM進(jìn)行地形分析的重要部分,也是GIS自動(dòng)制圖的一個(gè)重要研究?jī)?nèi)容。對(duì)于大多數(shù)GIS應(yīng)用程序而言,數(shù)字高程模型通常通過柵格數(shù)據(jù)結(jié)構(gòu)提供,因此DEM這一術(shù)語用來描述數(shù)字高程模型已經(jīng)得到廣泛接受。雖然推導(dǎo)坡度坡向的算法已經(jīng)十分成熟,但是DEM數(shù)據(jù)會(huì)影響推導(dǎo)的參數(shù)的準(zhǔn)確性。許多研究表明坡度坡向精度分析算法與DEM數(shù)據(jù)錯(cuò)誤、數(shù)據(jù)精度、柵格分辨率、柵格大小或者網(wǎng)格方向相關(guān)。

數(shù)字高程模型(DEM)是高程點(diǎn)的集合,可以用來描述地理特征,展示三維地形表面的特定區(qū)域。柵格數(shù)據(jù)格式是DEM最常用的數(shù)據(jù)格式。隨著DEM網(wǎng)格分辨率的提高,數(shù)字地形分析是GIS中的計(jì)算密集型任務(wù)之一。然而,某些特定的應(yīng)用程序要求GIS軟件為存儲(chǔ)、檢索和處理地理空間數(shù)據(jù)等操作提供高性能操作,在傳統(tǒng)的GIS中,這些需求已經(jīng)逐漸成為計(jì)算效率的瓶頸。

隨著HPC的快速發(fā)展,并行計(jì)算被應(yīng)用于改善GIS應(yīng)用程序性能。在過去的幾十年中,涌現(xiàn)了許多基于異構(gòu)網(wǎng)絡(luò)如何使GIS應(yīng)用并行處理的研究。2003年,Hawick等人提出了處理大規(guī)模地理數(shù)據(jù)的并行算法。



技術(shù)實(shí)現(xiàn)要素:

針對(duì)上述存在問題或不足,為解決現(xiàn)有等高線生成方法中,處理DEM數(shù)據(jù)時(shí)十分耗時(shí)的問題;本發(fā)明提供了一種基于Linux集群平臺(tái)的DEM并行等高線生成方法。

具體包含以下步驟:

步驟1、首先進(jìn)行環(huán)境初始化,然后Linux各個(gè)節(jié)點(diǎn)借助PVFS并行文件系統(tǒng)并發(fā)讀入輸入柵格數(shù)據(jù);

步驟2、GDAL(Geospatial Data Abstraction Library)讀取輸入的柵格數(shù)據(jù),獲取相應(yīng)的輸入?yún)?shù)及進(jìn)行校驗(yàn),然后初始化臨時(shí)Shapefile結(jié)果文件;

步驟3、計(jì)算出每個(gè)計(jì)算節(jié)點(diǎn)應(yīng)該處理的等高線區(qū)間:

即在進(jìn)程號(hào)大于等高線條數(shù)與進(jìn)程數(shù)目的模(nHeavryContour=nSumContour MOD numprocs)的情況下獲取平均處理的條數(shù)(nAverageContour),否則獲取(nAverageContour+1)即平均處理的條數(shù)加1;

步驟4、各個(gè)計(jì)算節(jié)點(diǎn)同時(shí)進(jìn)行下述操作:

獲取等高線區(qū)間內(nèi)柵格圖像中各點(diǎn)的高程值并形成矩陣,然后獲取等高線的條數(shù)及具體高程值,當(dāng)高程矩陣有高程值與要生成的等高線等級(jí)值相等時(shí),偏離微小量,便于進(jìn)行(level-Z0)(level-Z1)<0;

步驟5、各個(gè)計(jì)算節(jié)點(diǎn)各自生成各自產(chǎn)生的等高線數(shù)據(jù),然后將這些數(shù)據(jù)寫入對(duì)應(yīng)的臨時(shí)Shapefile文件里面;

步驟6、主節(jié)點(diǎn)接收來自各個(gè)計(jì)算節(jié)點(diǎn)的臨時(shí)Shapefile文件,并將所有臨時(shí)Shapefile文件合并,生成等高線。

進(jìn)一步的,還包括一個(gè)后續(xù)的步驟7、在上述柵格DEM生成等高線并行算法的基礎(chǔ)上,利用精靈進(jìn)程進(jìn)行離線的臨時(shí)的結(jié)果數(shù)據(jù)合成方法對(duì)步驟6進(jìn)行優(yōu)化及測(cè)試分析;或/和利用小熱點(diǎn)并行化方法對(duì)步驟4的微調(diào)過程(偏離微小量)進(jìn)行優(yōu)化及測(cè)試分析。

綜上所述,本發(fā)明采用Linux集群平臺(tái)對(duì)DEM等高線生成算法進(jìn)行并行可以取得可靠的加速比,能大幅度減少運(yùn)行時(shí)間,具有較多的模式選擇,性能提升穩(wěn)定可靠。

附圖說明

圖1柵格格網(wǎng)設(shè)置;

圖2柵格矩形四邊均有等高線穿過的情況;

圖3 GRASS中r.contour模塊整體實(shí)現(xiàn)算法流程;

圖4 GRASS中r.contour模塊cont函數(shù)實(shí)現(xiàn)結(jié)構(gòu)圖;

圖5改進(jìn)的柵格DEM生成等高線算法實(shí)現(xiàn)原理圖;

圖6改進(jìn)的柵格DEM生成等高線算法運(yùn)行參數(shù)及平臺(tái)硬件配置信息;

圖7改進(jìn)的柵格DEM生成等高線算法熱點(diǎn)分析(一);

圖8改進(jìn)的柵格DEM生成等高線算法熱點(diǎn)分析(二);

圖9并行算法設(shè)計(jì)方案;

圖10 MPI實(shí)現(xiàn)算法部分程序;

圖11 MPI并行優(yōu)化算法;

圖12 MPI并行優(yōu)化算法實(shí)現(xiàn)過程;

圖13優(yōu)化方法二部分代碼。

具體實(shí)施方式

下面結(jié)合附圖、表格和具體實(shí)施例,進(jìn)一步詳細(xì)說明本發(fā)明。

一、柵格DEM生成等高線算法原理

目前,計(jì)算機(jī)自動(dòng)繪制等高線的方法主要有兩類,即網(wǎng)格法和三角形法。它們生成等高線的步驟一致,主要包括:

1)在格網(wǎng)邊上內(nèi)插等高點(diǎn);

2)追蹤等值點(diǎn),形成某一高程值的若干等值線序列;

3)光滑等高線并輸出。

目前,應(yīng)用得最為廣泛的柵格生成等高線算法采用的是等值線傳播算法,隸屬于網(wǎng)格法這一類,該算法的效率為O(N)。等值線傳播算法的基本原理是:為了得到某一高程值的等高線,首先找到一個(gè)有對(duì)應(yīng)等高線穿過的格網(wǎng)作為初始格網(wǎng);然后由這個(gè)初始格網(wǎng)開始向鄰近的柵格(上、下、左、右)傳播這條等高線;當(dāng)某一條等高線穿過格網(wǎng)時(shí),可通過線性內(nèi)插方法求出等高點(diǎn);同時(shí)利用下述公理判斷其下一個(gè)傳播方向:

公理1:?jiǎn)卧窬W(wǎng)的邊與等高線交點(diǎn)的個(gè)數(shù)為0,2或4;

公理2:已知等高線與單元格網(wǎng)的邊有4個(gè)交點(diǎn),則在單元格網(wǎng)內(nèi)中心點(diǎn)和兩個(gè)頂點(diǎn)同號(hào)的對(duì)角線與等高線沒有交點(diǎn)。

直至所有柵格單元遍歷一遍,再利用相同方法進(jìn)行下一條等高線的獲取。一個(gè)完整的可實(shí)現(xiàn)的柵格數(shù)據(jù)生成等高線算法的描述如下:

3-1、標(biāo)志柵格圖像的柵格。

設(shè)置一個(gè)標(biāo)志,用來說明該柵格是否需要再被搜索,初始值與說明不再對(duì)該柵格進(jìn)行搜索的標(biāo)志值不同,被標(biāo)志后直至等高線高程發(fā)生變化后,標(biāo)志才會(huì)失效。

3-2、構(gòu)成柵格矩形。

將待搜索的柵格與其右,右下,下方各柵格一起組成柵格矩形。如圖3.3所示。

3-3、判斷柵格點(diǎn)間等高線是否穿過。

如圖1所示,以點(diǎn)0和1為例,設(shè)點(diǎn)0高程為Z0,點(diǎn)1高程為Z1,判斷它們之間是否有高程值為level的等高線穿過,可根據(jù)是否滿足式(1-1)進(jìn)行判斷。如果滿足(1-1)所列條件,則說明點(diǎn)0和點(diǎn)1之間有等高線穿過;反之則否。

(level-Z0)(level-Z1)<0 (1-1)

3-4、插入等高線矢量點(diǎn)。

對(duì)于每條等高線,依次搜索柵格圖像的各個(gè)柵格,對(duì)每一柵格,判斷該點(diǎn)是否出界及是否已被標(biāo)記不再搜索。如果均否,則判斷相鄰兩柵格之間是否有等高線穿過(如圖1的點(diǎn)01之間,12之間,23之間及30之間)。若有,則按線性內(nèi)插公式1-2計(jì)算并存入對(duì)應(yīng)數(shù)組。

線性插入法使用的條件是平面上點(diǎn)的插入,在我們要處理的柵格圖像中,四個(gè)角點(diǎn)可看作在一個(gè)平面內(nèi),因此可用線性插入法。

3-5、尋找該柵格可繼續(xù)搜索的方向。

通過上述提及的公理可知,尋找當(dāng)前搜索柵格可繼續(xù)搜索的方向有兩種情況:

a)柵格矩形只有兩邊有等高線穿過的情況。

在這種情況下,上一步中我們已經(jīng)插入了其中一個(gè)點(diǎn)(可稱之為第一個(gè)交點(diǎn)),而該柵格部分的等高線必然是從第一個(gè)交點(diǎn)指向第二個(gè)交點(diǎn),因此只需將第二個(gè)交點(diǎn)插入即可,將柵格矩形移到以這點(diǎn)所在邊為邊的新矩形上。

b)柵格矩形四邊均有等高線穿過的情況。

在這種情況下,我們已經(jīng)插入了第一個(gè)交點(diǎn),先求四個(gè)角點(diǎn)的高程平均值,設(shè)為mid(如圖2),那么在柵格矩形中必然存在一個(gè)點(diǎn),其高程與mid對(duì)應(yīng),再分別按照3-3中方法判斷mid與柵格矩形四個(gè)角點(diǎn)之間是否有等高線穿過,即可得到該柵格部分的等高線的后續(xù)搜索方向,將柵格矩形移到以這點(diǎn)所在邊為邊的新矩形上。

3-6、搜索完畢進(jìn)入下一柵格的搜索。

過程重復(fù)3-2至3-5步,直至該柵格圖像到底或已無柵格可再搜索,此時(shí)將進(jìn)入下一條等高線的搜索。

二、優(yōu)化后的等高線追蹤串行算法實(shí)現(xiàn)

當(dāng)?shù)雀呔€結(jié)束在柵格的邊緣(如上下左右)而呈現(xiàn)出首尾不相連的形狀時(shí),我們稱之為開曲線;而等高線在柵格單元內(nèi)部形成首尾相連的形狀時(shí),則為閉曲線。上述描述的等高線追蹤算法是沒有區(qū)分生成的等高線是開曲線或者閉曲線的,而在實(shí)際算法中,是把開曲線和閉曲線分開考慮,以有效地提高等高線追蹤算法的效率。本發(fā)明中的柵格數(shù)據(jù)生成等高線算法是采用GRASS GIS中的對(duì)應(yīng)的柵格數(shù)據(jù)生成等高線模塊r.contour所采用的等高線追蹤算法,它實(shí)際上是將等高線追蹤過程分為開曲線和閉曲線兩部分。

在GRASS中,由柵格圖像生成等高線算法即是將一幅柵格圖像按等高線條數(shù)或等高線步長(zhǎng),提取高程相等的點(diǎn),生成該圖像對(duì)應(yīng)的等高線矢量圖。算法模塊主體與上述等值線傳播算法基本原理描述類似,只是在在該算法處理之前,需要獲取生成等高線的序列,然后依次循環(huán)所有不同高程值依循上述算法原理生成對(duì)應(yīng)的等高線。

其算法實(shí)現(xiàn)的主要過程如下:

1)生成每一條等高線,需先設(shè)立柵格標(biāo)志數(shù)組,初始值為0,當(dāng)處理過并已記錄的柵格點(diǎn)均標(biāo)志為1,以后不再處理,直至下一條等高線開始;

2)對(duì)于每一條等高線,依次從柵格圖像的上部(前3行)、下部(最下面3行)、左部(最左邊3列)、右部(最右邊3列)、中間部(除去上下左右3行部分)的第一個(gè)柵格開始搜索,對(duì)每一個(gè)柵格,判斷該柵格點(diǎn)是否出界以及是否已被標(biāo)記為不再搜索;當(dāng)需要處理時(shí),則按上下、左右、中間的順序依次判斷相鄰兩柵格之間是否有等高線穿過;如果有,則按線性插入法插入,并記錄可繼續(xù)搜索的方向;

3)繼續(xù)其他可搜索的方向。直至該柵格已被標(biāo)記為不再搜索或出界或搜索的當(dāng)前柵格的相鄰柵格之間無等高線穿過,則該柵格搜索結(jié)束。同時(shí)需要將插入的矢量點(diǎn)予以記錄;

4)進(jìn)入下一個(gè)柵格的搜索,過程重復(fù)步驟2、步驟3,直至所有柵格均被搜索;

5)開始下一條等高線的生成。

在GRASS GIS中,柵格數(shù)據(jù)生成等高線算法的對(duì)應(yīng)模塊為r.contour,算法整體實(shí)現(xiàn)流程如圖3所示。

其中,利用獲取的高程值數(shù)據(jù)(z_array[])以及經(jīng)過處理的等高線序列(lev[])生成具體的等高線數(shù)據(jù)(分為開曲線、閉曲線)是整個(gè)模塊的主要部分,由cont()函數(shù)完成。該函數(shù)的具體實(shí)現(xiàn)流程如圖4所示。

在后續(xù)的研究中,我們實(shí)際采用的柵格數(shù)據(jù)生成等高線算法模塊是基于GRASS GIS的等高線生成模塊r.contour的,其算法基本原理一致,但為了保持模塊的可獨(dú)立運(yùn)行,在輸入/輸出數(shù)據(jù)格式上有著較大的區(qū)別。

因?yàn)椋?/p>

1)該算法模塊直接基于GRASS GIS基礎(chǔ)模塊,需要運(yùn)行g(shù)rass 64初始化模塊后才能運(yùn)行,即它與GRASS GIS有非常緊密的依賴關(guān)系。如果采用這個(gè)模塊,將使得實(shí)驗(yàn)程序變得非常龐大,而直接從里面剝離獨(dú)立算法也非常復(fù)雜。

2)由于該算法的輸入/輸出為GRASS GIS內(nèi)部定義的柵格和矢量數(shù)據(jù)格式文件,故如果不采用GRASS GIS依賴包,那么需要對(duì)該算法的輸入/輸出重新進(jìn)行設(shè)計(jì)。

改進(jìn)的、能獨(dú)立運(yùn)行的柵格數(shù)據(jù)生成等高線算法的流程圖見圖5。

三、串行等高線生成算法熱點(diǎn)分析

改進(jìn)后的串行等高線生成算法名為contourgen,運(yùn)行參數(shù)以及進(jìn)行熱點(diǎn)分析的平臺(tái)硬件配置如圖6所示,其中為了說明該算法在不同計(jì)算規(guī)模下情況,通過調(diào)整生成等高線的步長(zhǎng)(參數(shù)s)來進(jìn)行的,步長(zhǎng)越短,生成的等高線愈密計(jì)算規(guī)模愈大。

圖7,8分別為該串行程序在Linux平臺(tái)上的熱點(diǎn)測(cè)試信息,從中可以看出:不管計(jì)算規(guī)模如何,其中熱點(diǎn)部分(contour部分,即生成等高線部分)占了整個(gè)運(yùn)行時(shí)間的89.2%左右(在四個(gè)實(shí)驗(yàn)中依次為86.2%,89.1%,90.0%,91.5%)。其中另外一個(gè)耗時(shí)的子過程是Dismatrix,即進(jìn)行柵格單元與要生成等高線高程值的微調(diào)過程(如果柵格單元高程值與要生成的某等高線相同,需要加上一個(gè)非常小的增量,便于進(jìn)行(level-Z0)(level-Z1)<0,該熱點(diǎn)在四次中依次對(duì)應(yīng)為11.3%,10.3%,9.7%,8.3%。

從上可知,不管數(shù)據(jù)大小如何,計(jì)算規(guī)模如何,熱點(diǎn)依然集中在生成等高線這部(contour),那么為了減少算法運(yùn)算時(shí)間,需要從這部分進(jìn)行入手進(jìn)行并行化。

四、柵格DEM生成等高線并行算法設(shè)計(jì)與實(shí)現(xiàn)

基于已有柵格數(shù)據(jù)生成等高線串行算法以及常見MPI并行化方案,本發(fā)明選擇了一種并行化方案具體實(shí)現(xiàn)。

1)MPI并行化方案

該算法采用以下并行方案:每個(gè)節(jié)點(diǎn)均可以獨(dú)立讀取完整的DEM輸入數(shù)據(jù),主節(jié)點(diǎn)分解不同等級(jí)(如等高線為100,150,200米…)的等高線任務(wù)給各個(gè)節(jié)點(diǎn);每個(gè)節(jié)點(diǎn)各自生成不同等級(jí)的等高線,然后同時(shí)生成結(jié)果文件輸出。

該算法設(shè)定的輸出格式為shapefile,本發(fā)明采用的方式是:各個(gè)進(jìn)程獨(dú)立生成臨時(shí)的shapefile文件,然后由主節(jié)點(diǎn)將這些臨時(shí)的shapefile文件合并的方式進(jìn)行。具體實(shí)現(xiàn)示意圖如圖9所示。

2)MPI并行算法實(shí)現(xiàn)

其中,需要重點(diǎn)關(guān)注以下幾個(gè)主要問題:

a)PVFS并行文件系統(tǒng)的讀寫問題;PVFS并行文件系統(tǒng)的讀寫與傳統(tǒng)文件讀寫調(diào)用函數(shù)一致,它在每個(gè)節(jié)點(diǎn)都有輸入文件的備份,可以有效地避免傳統(tǒng)方式多個(gè)節(jié)點(diǎn)讀取同一個(gè)文件發(fā)生沖突的現(xiàn)象發(fā)生。

b)計(jì)算各個(gè)計(jì)算節(jié)點(diǎn)處理的等高線區(qū)間問題;對(duì)每個(gè)節(jié)點(diǎn)計(jì)算的等高線區(qū)間,可采用下述算法實(shí)現(xiàn)均分(圖10)。

采用上述算法的結(jié)果時(shí),在進(jìn)程號(hào)大于等高線條數(shù)與進(jìn)程數(shù)目的模(nHeavryContour=nSumContour MOD numprocs)的情況下獲取平均處理的條數(shù)(nAverageContour),否則獲取(nAverageContour+1)。

c)不同計(jì)算節(jié)點(diǎn)生成臨時(shí)SHAPEFILE文件以及主節(jié)點(diǎn)合成最后生成文件問題。每個(gè)節(jié)點(diǎn)各自生成各自產(chǎn)生的等高線數(shù)據(jù),然后將這些數(shù)據(jù)寫入對(duì)應(yīng)的臨時(shí)SHAPEFILE文件里面;主節(jié)點(diǎn)在合成之前,需要先在生成SHAPEFILE文件前去探測(cè)各個(gè)臨時(shí)SHAPEFILE文件實(shí)體對(duì)象的個(gè)數(shù),然后按照總的實(shí)體個(gè)數(shù)進(jìn)行初始化。

3)MPI并行算法性能優(yōu)化方法

通過實(shí)驗(yàn)分析,該并行算法可以很好解決多個(gè)計(jì)算節(jié)點(diǎn)同時(shí)讀取輸入數(shù)據(jù)的問題,但注意到一個(gè)現(xiàn)實(shí)存在的問題:在將各個(gè)不同節(jié)點(diǎn)生成臨時(shí)Shapefile文件合成最后的輸出文件時(shí),都是由主節(jié)點(diǎn)完成。如果參與的節(jié)點(diǎn)很多,而且生成的臨時(shí)Shapefile文件有很大的情況,這部分的耗時(shí)也將成為該MPI并行算法的一個(gè)瓶頸所在。

調(diào)研已有文獻(xiàn)發(fā)現(xiàn):可以利用獨(dú)立分布式數(shù)據(jù)庫解決這個(gè)問題。但是由于該算法輸出為傳統(tǒng)的Shapefile文件格式,需要打開文件,生成對(duì)應(yīng)的文件頭,然后寫入數(shù)據(jù)。這一系列操作皆由Shapefile庫提供,非普通的讀寫操作。正是因?yàn)檫@個(gè)原因,采用分布式數(shù)據(jù)庫并不是最好的解決辦法。本發(fā)明采用將最后Shapefile合并操作采用離線方式完成。

另一方面,如果MPI集群中的每個(gè)節(jié)點(diǎn)CPU都是多核的,那么還可以通過MPI+OpenMP混合編程模型來提高該并行算法的性能。即將不同的等高線序列分配給不同的計(jì)算節(jié)點(diǎn)進(jìn)行處理,在每個(gè)獨(dú)立的計(jì)算節(jié)點(diǎn)上,某部分等高線序列處理時(shí)又采用多核進(jìn)行多線程處理,從而細(xì)化了計(jì)算力度,充分利用了硬件潛能。這種混合編程方式尤其對(duì)于計(jì)算節(jié)點(diǎn)=NP值,而不是核心數(shù)對(duì)應(yīng)NP值的情形尤其適用。

3-1)優(yōu)化1:利用精靈進(jìn)程進(jìn)行離線的臨時(shí)的結(jié)果數(shù)據(jù)合成方法

采用離線合并Shapefile文件方式,最簡(jiǎn)單的一種方法是:將所有節(jié)點(diǎn)的生成的臨時(shí)Shapefile文件合并為一個(gè)完整的Shapefile文件的操作單獨(dú)抽取出來,做成一個(gè)可執(zhí)行程序的方式由主節(jié)點(diǎn)最后以離線方式調(diào)用,而非由它執(zhí)行完后才結(jié)束整個(gè)程序的方式,如圖11所示。

為了讓調(diào)用的可執(zhí)行程序(這里指Shapefile合并程序)以離線方式運(yùn)行,在MPI主進(jìn)程調(diào)用的過程中采用如下形式:

mpirun-np 4./contourgen-i../../data/srtm_41_14/srtm_41_14.gif-o/home/fhuang/contourgen/contourGen-opt2-deamon/output/result-s 5

然而在實(shí)際運(yùn)行中,該合并程序雖然是離線運(yùn)行,但仍然是在返回子進(jìn)程結(jié)果后,即程序運(yùn)行完畢后MPI主進(jìn)程才結(jié)束運(yùn)行。很顯然,采用這種方式不能達(dá)到預(yù)期目的。

后來通過調(diào)研,可以采用精靈進(jìn)程的方式實(shí)現(xiàn)該目的。即精靈進(jìn)程常駐內(nèi)存運(yùn)行,當(dāng)滿足設(shè)定條件(通過寫入文件變量變化或socket編程方式)觸發(fā),將指定目錄的文件調(diào)用Shapefile庫函數(shù)進(jìn)行合并。而MPI主進(jìn)程則在合并前已經(jīng)終止完成。

考慮到實(shí)現(xiàn)的簡(jiǎn)便性,本實(shí)施例采用的是通過觸發(fā)某一特定文件來驅(qū)動(dòng)精靈進(jìn)程進(jìn)行合并的方法。具體技術(shù)實(shí)現(xiàn)過程如圖12所示。

值得指出的是,精靈進(jìn)程需要先于MPI程序運(yùn)行前啟動(dòng)。而且為了實(shí)現(xiàn)MPI并行程序與離線Shapefile合并程序的異步運(yùn)行,即MPI并行程序在調(diào)用合并程序后自動(dòng)結(jié)束,而合并程序仍在運(yùn)行,因此需要等待30秒后再對(duì)結(jié)果數(shù)據(jù)進(jìn)行操作。

3-2)優(yōu)化2:小熱點(diǎn)并行化方法

從MPI基本算法的各步耗時(shí)對(duì)比結(jié)果可知,當(dāng)數(shù)據(jù)量、計(jì)算規(guī)模達(dá)到一定程度時(shí),第二步操作——對(duì)獲取的Z數(shù)組依次與要生成的等高線序列進(jìn)行比對(duì),如果有高程值與任一將要生成的等高線數(shù)組中值相等時(shí),需要將Z數(shù)組中的高程值做一個(gè)微小的改動(dòng)。因?yàn)樵谂袛嗍欠裼幸傻牡雀呔€經(jīng)過該像元時(shí),是通過公式(level-Z0)(level-Z1)<0進(jìn)行計(jì)算的;如果不做一個(gè)微小的調(diào)整,將會(huì)出現(xiàn)等于0的情況。如果出現(xiàn)這種情況,則直接有可能導(dǎo)致公式(1)出現(xiàn)分母為0的情況出現(xiàn),程序?qū)⒊霈F(xiàn)崩潰。故在生成等高線之前,需要進(jìn)行如下處理(附圖13):

這部分代碼函數(shù)對(duì)應(yīng)DisplaceMatrix,從VTune分析結(jié)果可知,是這個(gè)算法的小熱點(diǎn)(平均值9.9%)。該部分在數(shù)據(jù)量不大(影響Z數(shù)組大小)以及等高線間距較密(影響計(jì)算規(guī)模,直接增加這部分的操作次數(shù))時(shí),這部分的性能將成為整個(gè)并行算法的新的瓶頸。

通過分析可知,對(duì)這個(gè)小熱點(diǎn)問題可以采用如下方法進(jìn)行并行化。

a)不同進(jìn)程只掃描Z數(shù)組中的一部分區(qū)域,記錄下需要微調(diào)的行列信息;

b)每個(gè)進(jìn)程通過MPI_Allreduce()函數(shù)獲取整個(gè)Z數(shù)組需要微調(diào)的總個(gè)數(shù);

c)每個(gè)進(jìn)程分別開辟對(duì)應(yīng)空間,通過MPI_Allgather()和MPI_Allgatherv()函數(shù)獲取整個(gè)Z數(shù)組需要微調(diào)的全部位置信息;

d)每個(gè)進(jìn)程統(tǒng)一對(duì)各自的Z數(shù)組進(jìn)行微調(diào)。

采用這種方法,理論上可以將時(shí)間縮短為原來的1/N,當(dāng)然一個(gè)像元值出現(xiàn)等于生成等高線數(shù)組的概率以及最后需要收集改動(dòng)信息(需要微調(diào)位置的數(shù)組)大小有關(guān),因?yàn)槿绻枰诟鱾€(gè)進(jìn)程間收集的數(shù)據(jù)量非常大,將影響這部分的并行效果。

3-3)終極優(yōu)化:優(yōu)化方法3-1+優(yōu)化方法3-2

對(duì)于該算法來說,就是將前面的兩種優(yōu)化綜合起來,即充分將整個(gè)MPI算法進(jìn)行整體優(yōu)化,得到性能的整體大幅度提升。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
观塘区| 科技| 伊吾县| 杭锦后旗| 连城县| 济南市| 巴里| 阳原县| 荔浦县| 大荔县| 青田县| 武宁县| 新丰县| 上蔡县| 德州市| 嘉定区| 出国| 佛坪县| 邵武市| 莱西市| 中方县| 当雄县| 黄山市| 萨嘎县| 泗阳县| 湄潭县| 翁牛特旗| 元谋县| 海口市| 堆龙德庆县| 东乌珠穆沁旗| 手机| 武功县| 镇平县| 灌云县| 余庆县| 吉首市| 泰兴市| 宕昌县| 资讯 | 永胜县|