專利名稱:一種在集群環(huán)境中對遙感影像數(shù)據(jù)進行高效并行存取的方法
技術領域:
本發(fā)明涉及一種在集群環(huán)境中對遙感影像數(shù)據(jù)進行高效并行存取的方法,技術應用領域為遙感影像數(shù)據(jù)并行處理等。
背景技術:
隨著對地觀測技術的長足進步,遙感影像數(shù) 據(jù)日益增長,遙感影像處理呈現(xiàn)出數(shù)據(jù)密集和計算密集的特點,現(xiàn)有的遙感影像處理串行算法模式和傳統(tǒng)硬件平臺已成為性能瓶頸,完全不能滿足海量遙感數(shù)據(jù)快速處理的需求。以集群為代表的高性能計算設備的普及為遙感影像高效處理提供了契機,為了有效利用集群等高性能設備,迫切需要研發(fā)遙感影像處理并行算法。然而當前研發(fā)的遙感影像處理并行算法在I/o部分存在兩方面問題I)由于遙感影像數(shù)據(jù)存儲格式繁多,要求所研發(fā)的遙感影像處理并行算法應能支持多種常用的遙感影像數(shù)據(jù)格式;2)如果不能提升大規(guī)模遙感影像數(shù)據(jù)的I/O效率,將直接影響并行算法實際應用的性能。目前在遙感影像數(shù)據(jù)處理領域廣泛使用GDAL (Geospatial Data AbstractionLibrary,地理空間數(shù)據(jù)抽象庫)來讀取遙感影像數(shù)據(jù),該庫提供了一個統(tǒng)一的標準接口來讀寫近75種格式的遙感影像數(shù)據(jù),具有效率高、可擴展性好等優(yōu)點。如果GDAL能被用于遙感影像處理并行算法的研發(fā),那么將解決遙感影像數(shù)據(jù)存儲格式繁多問題。然而在研發(fā)遙感影像處理并行算法過程中發(fā)現(xiàn),GDAL存在適用性差的問題。當前大多數(shù)遙感影像處理算法都可采用簡單規(guī)則數(shù)據(jù)劃分的并行策略來進行并行化,常用的數(shù)據(jù)劃分方式有按行劃分、按列劃分和按塊劃分,上述三種數(shù)據(jù)劃分方式有各自優(yōu)勢,需根據(jù)算法特點和數(shù)據(jù)特點來選擇。作為遙感影像處理并行算法的I/o庫,需支持上述三種基本數(shù)據(jù)劃分方式。然而,GDAL只支持按行數(shù)據(jù)劃分,當多個進程使用GDAL按列或按塊并行讀寫某一遙感影像數(shù)據(jù)文件時,效率很低(遠遠低于按行數(shù)據(jù)劃分),結果的正確性也得不到保證。GDAL按列或按塊并行讀寫遙感影像文件效率低下且出錯的原因在于產生了大量非連續(xù)的數(shù)據(jù)讀寫請求。從用戶視角看遙感影像文件應該是二維的柵格,但從文件視角來看目前大部分的遙感影像文件是按行線性存儲的一維條帶,因此當使用按列或按塊數(shù)據(jù)劃分方式對遙感影像文件進行劃分時,每個進程需要訪問遙感影像文件多個相對較小、非連續(xù)的數(shù)據(jù)段。由于GDAL是建立在文件系統(tǒng)之上的應用層I/O庫,而現(xiàn)有的文件系統(tǒng)一次數(shù)據(jù)讀寫請求只能訪問一段連續(xù)數(shù)據(jù),因此每個進程使用GDAL都將產生大量的小型數(shù)據(jù)讀寫請求,導致性能急劇下降。此外,各個進程訪問的數(shù)據(jù)不連續(xù),并且可能跨越較大的數(shù)據(jù)塊,使得GDAL的加鎖機制出現(xiàn)困難,最終導致結果錯誤。
發(fā)明內容
本發(fā)明的目的是提供一種在集群環(huán)境中對遙感影像數(shù)據(jù)進行高效并行存取的方法,該方法建立在GDAL庫基礎上,通過構建一個遙感影像數(shù)據(jù)重分布模塊,將大量非連續(xù)的小型數(shù)據(jù)讀寫請求聚合成少量連續(xù)的大型數(shù)據(jù)讀寫請求,從而提高了 GDAL按列或按塊并行讀寫某一遙感影像數(shù)據(jù)文件的效率,同時也保證了結果的正確性,解決了 GDAL在遙感影像處理并行算法研發(fā)中適用性差的問題。本發(fā)明的技術解決方案為一種在集群環(huán)境中對遙感影像文件數(shù)據(jù)進行高效并行存取的方法,步驟如下(I)在集群環(huán)境中,使用消息傳遞(MPI)并行編程技術,各個進程將各自要讀寫的遙感影像數(shù)據(jù)塊的范圍信息發(fā)給主進程,主進程負責收集各個進程的讀寫范圍信息。(2)主進程根據(jù)所有進程的讀寫范圍信息 判斷數(shù)據(jù)劃分方式,并根據(jù)數(shù)據(jù)劃分方式來確定各個進程數(shù)據(jù)重分布的方式,并將數(shù)據(jù)重分布所需的信息發(fā)送給各個進程。數(shù)據(jù)重分布的目的有兩個一個是將各個進程由于按行或者按塊劃分導致的非連續(xù)讀寫請求變成連續(xù)讀寫請求,一個是將大量的小型讀寫請求聚合成少量的大型讀寫請求。如果是按行數(shù)據(jù)劃分,主進程認為所有進程的讀寫請求已經是連續(xù)的,如果進程數(shù)目不多,即讀寫請求數(shù)目較少,沒有超過設定的閾值(進程數(shù)目多少是相對的,該閾值依賴于集群環(huán)境,默認值為小于32,用戶也可根據(jù)實際情況設置該值),主進程認為各個進程不需要進行數(shù)據(jù)重分布操作;如果進程數(shù)目較多即已超過設定的閾值(進程數(shù)目多少是相對的,該閾值依賴于集群環(huán)境,默認值為大于32,用戶也可根據(jù)實際情況設置該值),即讀寫請求數(shù)目很多,主進程認為各個進程需要執(zhí)行數(shù)據(jù)重分布操作;如果是按列或按塊數(shù)據(jù)劃分,主進程認為各個進程應該在存取遙感影像文件前先進行數(shù)據(jù)重分布。為了使各個進程獲得數(shù)據(jù)重分布的所需的信息,主進程發(fā)送三組信息至各個進程1)是否需要數(shù)據(jù)重分布;2)數(shù)據(jù)劃分方法(按行、按列、按塊);3)操作數(shù)據(jù)方式,讀操作和寫操作,簡稱讀寫。(3)各個進程接收和解析主進程發(fā)來的數(shù)據(jù)重分布信息。如果接收到的信息是不需要進行數(shù)據(jù)重分布,那么各個進程使用GDAL庫的RasterlO函數(shù)直接按原來按行數(shù)據(jù)劃分方式來讀寫。(4)如果各個進程接收到的信息是需要進行數(shù)據(jù)重分布,并且原來的數(shù)據(jù)劃分方式是按行數(shù)據(jù)劃分,那么采用如下數(shù)據(jù)重分布策略。下面以讀遙感影像文件數(shù)據(jù)為例,解釋按行數(shù)據(jù)劃分使用數(shù)據(jù)重分布的方案(第一種數(shù)據(jù)重分布方法)。假設有2η個進程(P[I],P[2],一PDn]),這些進程以按行劃分的方式將遙感影像文件劃分成2η個數(shù)據(jù)塊(Block[I] ,Block[2],-Block[2n]),各個進程如果直接去讀需要產生2n個讀請求(P[l]讀Block[l],P[2]讀Block[2]等)。為了減少讀請求數(shù)目,采用兩步操作。第一步,奇數(shù)號進程首先生成一個臨時緩沖區(qū),然后一次讀取兩個數(shù)據(jù)塊到該臨時緩沖區(qū),即P[2k-1]調用GDAL庫的RasterlO函數(shù)讀取數(shù)據(jù)塊Block[2k_l]和Block[2k],由于這兩個數(shù)據(jù)塊合并后在文件中是連續(xù)分布的,所以只需要一次讀請求操作;第二步,奇數(shù)號進程P[2k-1]與相鄰偶數(shù)號進程P[2k]通信,P[2k-1]將臨時緩沖區(qū)的連續(xù)數(shù)據(jù)分成兩個數(shù)據(jù)塊Block[2k-l]和Block[2k],并將數(shù)據(jù)塊Block[2k]以消息傳遞的方式發(fā)送至進程P [2k]。通過上述兩步操作,這樣讀請求數(shù)目可以降為原來的一半。對于各個進程按行寫也是如此,第一步是奇數(shù)號進程P[2k_l]生成臨時緩沖區(qū),偶數(shù)號進程即P[2k]將數(shù)據(jù)塊Block[2k]以消息傳遞的方式發(fā)送至進程P[2k-l],P[2k-l]將Block[2k]和Block[2k-l]合并成連續(xù)數(shù)據(jù),并放置到臨時緩沖區(qū);第二步是P[2k_l]調用GDAL庫的RasterlO函數(shù)將臨時緩沖區(qū)中的數(shù)據(jù)連續(xù)寫進影像文件,由于臨時緩沖區(qū)中的數(shù)據(jù)是連續(xù)的,所以可以一次寫入,這樣寫請求次數(shù)也可降低為原來一半。(5)如果各個進程接收到的信息是需要進行數(shù)據(jù)重分布,并且原來的數(shù)據(jù)劃分方式是按列或按塊數(shù)據(jù)劃分,那么采用如下數(shù)據(jù)重分布策略。下面以讀遙感影像文件數(shù)據(jù)為例,解 釋按塊數(shù)據(jù)劃分使用數(shù)據(jù)重分布的方案(按列劃分可以看成是按塊劃分的一種特例)(第二種數(shù)據(jù)重分布方法)。假設有mXn個進程(P[l][l],P[l][2],…P[l][n],P[2][l],…P[m] [η]),這些進程以按塊劃分的方式將遙感影像文件劃分成 mXn 個數(shù)據(jù)塊(Block[l] [I],Block[l] [2], ...Block[l] [n],Block[2],…Block[m] [η]),各個進程如果直接去讀要產生mXn個讀請求(P[l] [I]讀Block[l],P[m][n]讀Block[m][n]等)。為了減少讀請求數(shù)目,采用兩步操作。第一步,每一行最左端的進程P [ * ] [I]先生成一個臨時緩沖區(qū),然后P [ * ] [I]調用GDAL庫的RasterlO函數(shù)讀取數(shù)據(jù)塊Block[ * ] [I], Block[ * ] [2],…Block[ * ] [η],由于這些數(shù)據(jù)塊合并后在文件中是連續(xù)分布的,因此只需一次讀請求操作即可將這些數(shù)據(jù)塊讀到臨時緩沖區(qū)中;第二步,Pt * ][1]將其臨時緩沖區(qū)中的連續(xù)數(shù)據(jù)分成各個數(shù)據(jù)塊Block[ * ][1],Block[ * ][2],…Block[ * ] [η],并將這些數(shù)據(jù)塊以消息傳遞的方式發(fā)送至進程P[ * ],Pt * ][2],-P[ * ][n];通過這種數(shù)據(jù)重分布方案,讀請求數(shù)目將從原來的mXn降低為m。對于各個進程按列或按塊寫遙感影像文件數(shù)據(jù)也是如此,第一步是每一行最左端的進程P[ * ][1]先生成一個臨時緩沖區(qū),然后每一行各個進程?[ * ][l],p[ * ][2]r··P[ * ] [η]將自己的數(shù)據(jù)塊 Block [ * ] [I], Block [ * ] [2], ... Block [ * ] [n]以消息傳遞的方式發(fā)送至進程Ρ[ * ] [I],Pt * ] [I]合并這些數(shù)據(jù)塊,生成連續(xù)數(shù)據(jù),并放置到臨時緩沖區(qū);第二步P[ * ][1]調用GDAL庫的RasterlO函數(shù)將臨時緩沖區(qū)的連續(xù)數(shù)據(jù)寫入遙感影像文件,由于臨時緩沖區(qū)中的數(shù)據(jù)是連續(xù)的,所以可以一次寫入;通過這種數(shù)據(jù)重分布方案,寫請求數(shù)目從原來的mXn降低為m。本發(fā)明與現(xiàn)有技術相比的優(yōu)點在于(I)目前在遙感影像數(shù)據(jù)處理中廣泛使用GDAL庫來讀寫遙感影像文件,但是多進程使用GDAL按列或按塊并行讀寫遙感影像文件會得到錯誤的結果,而按行讀寫能保證結果正確。本發(fā)明在GDAL基礎上構建了一個數(shù)據(jù)重分布模塊,能自動將按列或按塊并行讀寫轉化成按行并行讀寫,從而保證了結果的正確性。通過使用本發(fā)明,GDAL庫可被用于遙感影像處理并行算法的研發(fā),從而解決了遙感影像數(shù)據(jù)存儲格式繁多的問題。(2)多進程使用GDAL按列或按塊并行讀寫遙感影像文件會產生大量非連續(xù)的I/O請求,從而大大降低了讀寫速度。本發(fā)明構建的數(shù)據(jù)重分布模塊通過通信的手段將大量非連續(xù)的小型讀寫請求聚合成少量連續(xù)的大型讀寫請求,從而提高了并行讀寫遙感影像文件的效率。通過使用本發(fā)明,遙感影像處理并行算法使用GDAL庫并行讀寫遙感影像文件的效率將大大提升。
圖I為本發(fā)明方法的流程圖2為使用本發(fā)明方法與直接使用GDAL庫并行讀寫遙感影像文件的結果對比圖;其中(a)表示4個進程直接使用GDAL按2X2分塊并行讀寫得到的結果;(b)是4個進程使用本發(fā)明按塊并行讀寫遙感影像文件得到的結果;圖3為使用本發(fā)明與直接使用GDAL庫并行讀寫遙感影像文件的效率對比圖。
具體實施例方式下面結合如圖I所示的流程圖,4個進程以按塊數(shù)據(jù)劃分方式(2X2)來并行寫寬24496像素、高17100像素、大小為I. 65G tiff格式的灰度遙感影像文件為例,說明本發(fā)明的具體實施方法I.各個進程將各自要讀寫的遙感 影像數(shù)據(jù)塊范圍信息打包后發(fā)送至主進程。數(shù)據(jù)包格式為〈進程號,數(shù)據(jù)塊左上角坐標,寬,高 >,比如進程4使用消息傳遞并行編程庫(MPI)將如下消息包發(fā)送給主進程1,〈2,(12248,0),12248,8550〉。2.主進程通過消息傳遞技術接收各個進程發(fā)來的消息,判斷出數(shù)據(jù)劃分方式,并據(jù)此生成數(shù)據(jù)重分布的信息,打包后發(fā)送至所有進程。數(shù)據(jù)包格式為〈進程號,是否需要數(shù)據(jù)重分布,數(shù)據(jù)劃分方法,數(shù)據(jù)操作方式〉。如果主進程判斷出是使用按行數(shù)據(jù)劃分方式,那么將進一步判斷進程數(shù)目有無超過設定的閾值,如果超過閾值,主進程認為應該使用數(shù)據(jù)重分布策略,如果是按列或按塊數(shù)據(jù)劃分,那么直接判斷應該使用數(shù)據(jù)重分布策略。比如此時主進程判斷出是按2X2分塊來進行數(shù)據(jù)劃分,這時主進程認為應該使用數(shù)據(jù)重分布策略,并生成消息包發(fā)送給各個進程,比如發(fā)送給進程2的消息包為〈2,是,2X2按塊,寫〉。3.各個進程收到主進程傳來的關于數(shù)據(jù)重分布的消息包,并進行解析。比如這時進程2收到消息包為〈2,是,2X2按塊,寫〉。4.根據(jù)解析得到的消息,各個進程執(zhí)行相應的并行讀寫策略如果不需要數(shù)據(jù)重分布,那么各個進程使用GDAL庫執(zhí)行按行并行讀寫操作;如果需要數(shù)據(jù)重分布,且是按行數(shù)據(jù)劃分的,則采用按第一種數(shù)據(jù)重分布方法,即奇數(shù)號進程負責讀寫文件,偶數(shù)號進程與左鄰奇數(shù)號進程通信;如果是按列或按塊數(shù)據(jù)劃分,則采用按第二種數(shù)據(jù)重分布方法,即每一行最左端的進程負責讀寫文件操作,其它進程與本行最左端的進程通信。比如進程2解析數(shù)據(jù)包后得知它需要在讀寫文件前進行數(shù)據(jù)重分布操作,而且根據(jù)2X2分塊數(shù)據(jù)劃分方式,進程2會把它的數(shù)據(jù)發(fā)送至進程I ;而進程I根據(jù)解析后的消息生成一個臨時緩沖區(qū),存放自己的數(shù)據(jù)以及從進程2接收的數(shù)據(jù),最后進程I調用GDAL的RasterlO函數(shù)將緩沖區(qū)的數(shù)據(jù)寫入遙感影像文件。進程4和進程3的操作分別與進程2和進程I相似,由進程3重組兩塊數(shù)據(jù),然后寫入遙感影像文件。對比分析實驗在集群環(huán)境上分別使用本發(fā)明方法和直接使用GDAL庫來并行讀寫遙感影像文件,來驗證兩種方式讀寫結果的正確性,圖2為對該遙感影像文件做聚合分析后的結果,其中(a)表示4個進程直接使用GDAL按2X2分塊并行讀寫得到的結果,可以看到(a)中有三塊黑色矩形區(qū)域,這三塊區(qū)域代表空值,表示直接使用GDAL按塊并行讀寫會得到錯誤結果;(b)是4個進程使用本發(fā)明按塊并行讀寫遙感影像文件得到的結果,顯示本發(fā)明得到的結果正確。為了驗證本發(fā)明方法是否能提升并行讀寫遙感影像文件的效率,實驗統(tǒng)計了在不同分塊情況下使用本發(fā)明方法并行讀寫遙感影像文件所花的時間。如圖3所示,本發(fā)明實驗使用的遙感影像數(shù)據(jù)文件寬24496像素、高17100像素,圖3的橫坐標為分塊數(shù)目aXb,a表示按行劃分數(shù)目,b表示按列劃分數(shù)目??梢钥闯鍪褂帽景l(fā)明方法讀寫遙感影像文件所花的時間遠遠小于直接使用GDAL的方法,從而也證明了本發(fā)明方法能大幅提升并行讀寫遙感影像文件的效率,具有較好的實用價值。本發(fā)明說明書中未作詳細描述的內容屬于本領域專業(yè)技術人員公知的現(xiàn)有技術。以上所述僅是本發(fā)明的優(yōu)選實施 方式,應當指出,對于本領域的普通技術人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本發(fā)明的保護范圍。
權利要求
1.一種在集群環(huán)境中對遙感影像數(shù)據(jù)進行高效并行存取的方法,其特征在于步驟如下 (1)在集群環(huán)境中,各個進程將各自要讀寫的遙感影像數(shù)據(jù)塊的范圍信息發(fā)給主進程,主進程負責收集各個進程讀寫遙感影像數(shù)據(jù)塊的范圍信息; (2)主進程根據(jù)所有進程讀寫遙感影像數(shù)據(jù)塊的范圍信息判斷數(shù)據(jù)劃分方式,并根據(jù)數(shù)據(jù)劃分方式來確定各個進程數(shù)據(jù)重分布的方式,將數(shù)據(jù)重分布所需的信息發(fā)送給各個進程;所述數(shù)據(jù)重分的信息包括三組,一是是否需要數(shù)據(jù)重分布;二是數(shù)據(jù)劃分方法,即按行、按列或按塊;三是操作數(shù)據(jù)方式,包括讀操作和寫操作,簡稱讀寫; (3)各個進程接收和解析主進程發(fā)來的數(shù)據(jù)重分布信息,如果接收到的信息是不需要進行數(shù)據(jù)重分布,那么各個進程使用GDAL庫的RasterlO函數(shù)直接按原來按行數(shù)據(jù)劃分方式來讀寫; (4)如果各個進程接收到的信息是需要進行數(shù)據(jù)重分布,并且是按行數(shù)據(jù)劃分,則數(shù)據(jù)重分布策略為奇數(shù)號進程負責讀寫文件,偶數(shù)號進程與左鄰奇數(shù)號進程通信; (5)如果各個進程接收到的信息是需要進行數(shù)據(jù)重分布,并且原來的數(shù)據(jù)劃分方式是按列或按塊數(shù)據(jù)劃分,則數(shù)據(jù)重分布策略為每一行最左端的進程負責讀寫文件操作,其它進程與本行最左端的進程通信。
2.根據(jù)權利要求I所述的在集群環(huán)境中對遙感影像數(shù)據(jù)進行高效并行存取的方法,其特征在于所述步驟(2)中如果是按行數(shù)據(jù)劃分,且進程數(shù)目不多即沒有超過設定的閾值,即讀寫請求數(shù)目較少,則主進程認為各個進程不需要進行數(shù)據(jù)重分布操作;如果進程數(shù)目較多即讀寫請求數(shù)目很多,即已超過設定的閾值,則主進程認為各個進程需要執(zhí)行數(shù)據(jù)重分布操作;如果是按列或按塊數(shù)據(jù)劃分,主進程認為各個進程應該在存取遙感影像文件前先進行數(shù)據(jù)重分布。
3.根據(jù)權利要求I所述的在集群環(huán)境中對遙感影像數(shù)據(jù)進行高效并行存取的方法,其特征在于所述步驟(4)中奇數(shù)號進程負責讀寫文件,偶數(shù)號進程與左鄰奇數(shù)號進程通信的具體實現(xiàn)為 假設有2n個進程,即P[l],P[2],…P [2n],這些進程以按行劃分的方式將遙感影像文件劃分成2n個數(shù)據(jù)塊,即Block[l],Block[2],Block[2n];如果是讀請求,為了減少讀請求數(shù)目,采用兩步操作第一步,奇數(shù)號進程首先生成一個臨時緩沖區(qū),然后一次讀取兩個數(shù)據(jù)塊到該臨時緩沖區(qū),即P[2k-1]調用GDAL庫的RasterlO函數(shù)讀取數(shù)據(jù)塊Block[2k-l]和Block[2k],由于這兩個數(shù)據(jù)塊合并后在文件中是連續(xù)分布的,所以只需要一次讀請求操作;第二步,奇數(shù)號進程P[2k-1]與相鄰偶數(shù)號進程P[2k]通信,P[2k-1]將臨時緩沖區(qū)的連續(xù)數(shù)據(jù)分成兩個數(shù)據(jù)塊Block[2k-l]和Block[2k],并將數(shù)據(jù)塊Block[2k]以消息傳遞的方式發(fā)送至進程P[2k];通過上述兩步操作,讀請求數(shù)目能夠降為原來的一半; 對于各個進程按行寫也是如此,第一步是奇數(shù)號進程P[2k-1]生成臨時緩沖區(qū),偶數(shù)號進程即P[2k]將數(shù)據(jù)塊Block[2k]以消息傳遞的方式發(fā)送至進程P[2k-1],P[2k-1]將Block[2k]和Block[2k-l]合并成連續(xù)數(shù)據(jù),并放置到臨時緩沖區(qū);第二步是P[2k-1]調用GDAL庫的RasterlO函數(shù)將臨時緩沖區(qū)中的數(shù)據(jù)連續(xù)寫進影像文件,由于臨時緩沖區(qū)中的數(shù)據(jù)是連續(xù)的,所以能夠一次寫入,這樣寫請求次數(shù)也能降低為原來一半。
4.根據(jù)權利要求I所述的在集群環(huán)境中對遙感影像數(shù)據(jù)進行高效并行存取的方法,其特征在于所述步驟(5)中每一行最左端的進程負責讀寫文件操作,其它進程與本行最左端的進程通信的具體實現(xiàn)為:假設有11^11個進程,即?[1][1],?[1][2],…P[l][n],P[2][I],…P[m] [n],這些進程以按塊劃分的方式將遙感影像文件劃分成mXn個數(shù)據(jù)塊,即Block[l] [I],Block[l] [2],…Block[l] [n],Block[2] [I],…Block[m] [n],對于讀請求,為了減少讀請求數(shù)目,采用兩步操作第一步,每一行最左端的進程P [ * ][1]先生成一個臨時緩沖區(qū),然后P[ * ] [I]調用GDAL庫的RasterlO函數(shù)讀取數(shù)據(jù)塊Block[ * ] [I],Block[ * ][2],…Block[ * ][n],由于這些數(shù)據(jù)塊合并后在文件中是連續(xù)分布的,因此只需一次讀請求操作即可將這些數(shù)據(jù)塊讀到臨時緩沖區(qū)中;第二步,P[ * ] [I]將其臨時緩沖區(qū)中的連續(xù)數(shù)據(jù)分成各個數(shù)據(jù)塊Block[ * ] [I] ,Block[ * ] [2],…Block[ * ] [n],并將這些數(shù)據(jù)塊以消息傳遞的方式發(fā)送至進程P[ * ] [I],Pt * ] [2],-P[ * ] [n];通過這種數(shù)據(jù)重分布方案,讀請求數(shù)目將從原來的mXn降低為m ; 對于各個進程按列或按塊寫遙感影像文件數(shù)據(jù)也是如此,第一步是每一行最左端的進程P[ * ][1]先生成一個臨時緩沖區(qū),然后每一行各個進程?[ * ][1],P[ * ][2],…P[ * ] [n]將自己的數(shù)據(jù)塊 Block[ * ] [I], Block[ * ] [2],…Block[ * ] [n]以消息傳遞的方式發(fā)送至進程P[ * ] [I],Pt * ] [I]合并這些數(shù)據(jù)塊,生成連續(xù)數(shù)據(jù),并放置到臨時 緩沖區(qū);第二步P[ * ][1]調用GDAL庫的RasterlO函數(shù)將臨時緩沖區(qū)的連續(xù)數(shù)據(jù)寫入遙感影像文件,由于臨時緩沖區(qū)中的數(shù)據(jù)是連續(xù)的,所以能夠一次寫入;通過這種數(shù)據(jù)重分布方案,寫請求數(shù)目從原來的mXn降低為m。
全文摘要
一種在集群環(huán)境中對遙感影像數(shù)據(jù)進行高效并行存取的方法,在GDAL庫基礎上,通過構建一個遙感影像數(shù)據(jù)重分布模塊,將大量非連續(xù)的小型數(shù)據(jù)讀寫請求聚合成少量連續(xù)的大型數(shù)據(jù)讀寫請求,提高了并行讀寫遙感影像文件的效率。技術方案為各進程與主進程通信確定數(shù)據(jù)重分布的方案;如果不需要數(shù)據(jù)重分布,各進程直接按行讀寫數(shù)據(jù);如果需要且是按行數(shù)據(jù)劃分,那么奇數(shù)號進程負責讀寫文件,偶數(shù)號進程與左鄰奇數(shù)號進程通信;如果需要且是按列或按塊數(shù)據(jù)劃分,每一行最左端的進程負責讀寫文件操作,其它進程與本行最左端的進程通信。本發(fā)明克服了GDAL庫在按列或按塊并行讀寫遙感影像文件效率低下且出錯的問題,可被用于遙感影像處理并行算法的研發(fā)。
文檔編號G06F3/06GK102819407SQ201210278969
公開日2012年12月12日 申請日期2012年8月7日 優(yōu)先權日2012年8月7日
發(fā)明者占利軍, 秦承志 申請人:中國科學院地理科學與資源研究所