時移地震油藏監(jiān)測技術是在油藏生產過程中,,在同一油氣田不同的時間重復進行地震測量,,地震響應隨時間的變化可以表征油藏性質的變化。通過特殊的四維地震處理技術,,差異分析技術和計算機可視化技術來描述油藏內部物性參數的變化和追蹤流體前緣,。隨著油田勘探開發(fā)的深入,,資料的數據量和處理量越來越大,資料要進行大規(guī)模并行處理已成為人們的共識,。在同等情況下,,時移地震油藏監(jiān)測要處理的數據量是一般勘探方法的三倍。所以,,時移地震油藏監(jiān)測中高性能的計算變得越來越重要,,并行處理的要求更加迫切。
時移地震油藏監(jiān)測正演模擬通常由聲波方程或彈性波方程的有限差分數值模型近似其縱波方程,。對于有限差分的并行實現,,可以采用數據并行來實現并行計算。即將問題空間分成同樣大小的子區(qū),,分別由不同的集群節(jié)點完成對它們的計算,。分區(qū)的前提是對于每個網格的計算操作都是相同的。分區(qū)的原則是在微機集群中均勻分配任務和數據,。
時移地震油藏監(jiān)測資料處理要經過面元重置,、互均衡處理、一致性分析,、差異分析等許多環(huán)節(jié),。這些環(huán)節(jié)中涉及各種變換以及相關分析等數學運算,它們本身可以進行并行計算,,其變換域的數據往往也適合并行處理,。
二、計算機集群與Java技術
為解決網絡計算平臺異構性問題,,目前的趨勢是分布技術和并行技術的結合,。集群是分布式并行計算系統(tǒng)的一種類型,它是由一組完整的計算機互連而成的,,能作為一個單獨的統(tǒng)一計算資源來使用,。集群系統(tǒng)將多臺計算機通過高速局域網相互連接起來,配備一定的并行支撐軟件,,形成一個松散耦合的并行計算環(huán)境,,協(xié)同地并行求解同一個問題。隨著網絡和低檔計算機的性能不斷提高而價格不斷下降,,使用一組在結構和性能上互異的計算機組成集群進行網絡并行計算已成為當前超級計算的重要發(fā)展方向,。
典型的集群并行計算編程環(huán)境有消息傳遞界面MPI、并行虛擬機PVM和數據并行編程語言HFP,。另外,,Java技術在并行計算方面有著獨特的特點:①Java具有平臺獨立性,它支持在分布計算機網絡上的計算,,每臺計算機可以使用不同的平臺,,Java可以作為底層平臺在微機集群上進行高性能計算,。②Java除了支持以Java遠程方法調用(RMI)為基礎的Java分布對象模型,還支持通用的CORBA模型,。③Java支持并行編程模型,,有的模型被包括在Java開發(fā)工具(JDK)中(如Java線程API),有的是JDK之外的(如JavaSpace),;另外,,還有MPI和PVM的Java實現——JMPI和JPVM。④Java可以進行基于Web的并行計算,。
Java的引入給分布式并行計算系統(tǒng)的實現帶來了一些新特點,。Java是面向網絡的跨平臺語言, 移植性、網絡應用和安全問題是該語言本身的特征,。對分布式問題,,Java在語義上提供了更為簡潔清晰的描述。用Java來構造系統(tǒng),,在實現上更符合網絡的特點,。
三、Java并發(fā)處理技術
Java在語言級通過使用線程來支持并發(fā)處理機制,。在Java之前的大多數編程語言只能通過直接訪問操作系統(tǒng)的特定庫,,才能實現并發(fā)處理。這種方式的缺點是,,一方面使對并發(fā)處理變得非常困難,,另一方面使得移植到其他平臺成了一件不可能的事情。Java不僅在語言級實現了和平臺無關的并發(fā)處理支持,,而且還讓編程變得非常簡單,。
Java并發(fā)處理機制的核心是java.lang.Thread類,。通過這個類我們可以啟動,、中斷、喚醒,、減慢,、加速和終止一個線程。此外,,Java語言中還提供其他有用的方式,,例如Runnable接口等,幫助我們使用這種類,。另外在基類java.lang.Object類里也提供了一些方法用來支持線程的使用,。此外,Java語言中還有synchronized和volatile兩個關鍵字用于支持并發(fā)處理,,所有這些都是語言本身不可分割的一部分,。
在Java語言中有兩種創(chuàng)建一個新線程的方式,。其中比較簡單的一種方式是通過從Thread類派生一個子類,然后通過創(chuàng)建該子類的實例創(chuàng)建新線程,。繼承的子類必須實現run()方法,。這個方法將被系統(tǒng)調用,在這個方法中指定新線程中要執(zhí)行的方法內容,??梢哉frun()方法代表了這個線程的根本方法。創(chuàng)建了一個實例以后,,再調用它的start()方法,,這時將會導致從系統(tǒng)中分離出一個新的線程,并且新線程里的run()方法開始有機會執(zhí)行,。需要傳給新線程的參數不能通過run()方法傳遞,,而是通過派生的Thread類的子類的構浩函數來傳遞。第一種方法使用的是繼承方式,,而Java又只支持單重繼承,,因此創(chuàng)建線程就需要有第二種變通的方式來避免直接繼承Thread類。不過為了讓系統(tǒng)知道要執(zhí)行什么操作,,新的線程需要有一個提供了run()方法的類,,這個類可以通過實現Runnable接口的方式達到要求。Runnable接口標志著這個類是一個提供run()方法的類,,這樣線程就可以調用它,。在創(chuàng)建一個線程的時候就可以將這個類的實例傳給Thread類的構造方法。通過這種方式,,就可以將一個線程指定到可以繼承任意類的一個類中,。
四、Jini技術和JavaSpace技術
Jini是分布式系統(tǒng)體系結構的一種,,它利用Java構建分布式系統(tǒng)的中間件,。Jini的基礎是Socket和遠程方法調用(RMI)的分布式計算機制。我們可以借助于Jini,,創(chuàng)造出一個富有彈性,、容易管理且可隨時隨地使用各種服務的網絡計算環(huán)境。
Jini的體系結構是由基礎建設(infrastructure),、程序設計模型(programming model),、服務(services)三方面所構成。
Jini基礎建設的核心包含以下幾個部分:(1)Discovery Protocol:提供了如何讓網絡上任何種類的資源加入聯盟的方式,。(2)eXtended RMI:Jini的元件彼此溝通時所使用的機制,。(3)Distributed Security:定義了Jini 聯盟成員的使用權限。(4)Lookup Service:用來展現聯盟中的所有成員,以及幫助使用者尋找網絡資源,,或者負責提供聯盟中的資源給使用者使用,。
Jini提供一些分布式的程序設計模型,而Jini的基礎構造,,就是利用這些模型來組合,。模型所提供的界面(Interface)包括以下幾個類型:(1)Leasing Interface:負責管理對象被使用的時間。(2)Two Phase Commit Interface:是一個輕量級的(light-weight),、面向對象的(object-oriented)界面,。負責管理分布式事務處理(transaction),如roll back,、roll forward等,。(3)Events Interface:在分布式計算的環(huán)境中,必須確保程序執(zhí)行的先后順序,,利用事件的觀念可以幫助我們解決這個問題,。
有了Jini的架構以及程序設計模型后,我們可以利用這些技術來設計管理網絡資源的服務,,以促進分布式計算的發(fā)展,。
JavaSpaces是用Jini所發(fā)展的技術,并且通過RMI進行網絡通訊,,一般應用在N層(n-tiers)架構的中間層(middle tiers),。JavaSpaces雖然能提供需求者與供應者之間查詢與溝通的機制,但它并不是資料庫,,而是以簡單的messaging system為基礎,,進而提供更強大的功能。
Jini提供了在分布式環(huán)境中尋找(look-up),、注冊(registration),、租借(leasing)等功能。而JavaSpaces則負責管理分布式對象的處理程序(processing),、共享(sharing),、以及流通(migration)等。因此Jini與JavaSpaces彼此存在著相互合作的關系,。簡單地說,,JavaSpaces就好像網絡上的一個市場,,它提供一個簡單,、快速、統(tǒng)一的界面,,讓網絡上分布的資源可以被分享,、協(xié)調與流通。