时移地震油藏监测技术是在油藏生产过程中,在同一油气田不同的时间重复进行地震测量,地震响应随时间的变化可以表征油藏性质的变化。通过特殊的四维地震处理技术,差异分析技术和计算机可视化技术来描述油藏内部物性参数的变化和追踪流体前缘。随着油田勘探开发的深入,资料的数据量和处理量越来越大,资料要进行大规模并行处理已成为人们的共识。在同等情况下,时移地震油藏监测要处理的数据量是一般勘探方法的三倍。所以,时移地震油藏监测中高性能的计算变得越来越重要,并行处理的要求更加迫切。
时移地震油藏监测正演模拟通常由声波方程或弹性波方程的有限差分数值模型近似其纵波方程。对于有限差分的并行实现,可以采用数据并行来实现并行计算。即将问题空间分成同样大小的子区,分别由不同的集群节点完成对它们的计算。分区的前提是对于每个网格的计算操作都是相同的。分区的原则是在微机集群中均匀分配任务和数据。
时移地震油藏监测资料处理要经过面元重置、互均衡处理、一致性分析、差异分析等许多环节。这些环节中涉及各种变换以及相关分析等数学运算,它们本身可以进行并行计算,其变换域的数据往往也适合并行处理。
二、计算机集群与Java技术
为解决网络计算平台异构性问题,目前的趋势是分布技术和并行技术的结合。集群是分布式并行计算系统的一种类型,它是由一组完整的计算机互连而成的,能作为一个单独的统一计算资源来使用。集群系统将多台计算机通过高速局域网相互连接起来,配备一定的并行支撑软件,形成一个松散耦合的并行计算环境,协同地并行求解同一个问题。随着网络和低档计算机的性能不断提高而价格不断下降,使用一组在结构和性能上互异的计算机组成集群进行网络并行计算已成为当前超级计算的重要发展方向。
典型的集群并行计算编程环境有消息传递界面MPI、并行虚拟机PVM和数据并行编程语言HFP。另外,Java技术在并行计算方面有着独特的特点:①Java具有平台独立性,它支持在分布计算机网络上的计算,每台计算机可以使用不同的平台,Java可以作为底层平台在微机集群上进行高性能计算。②Java除了支持以Java远程方法调用(RMI)为基础的Java分布对象模型,还支持通用的CORBA模型。③Java支持并行编程模型,有的模型被包括在Java开发工具(JDK)中(如Java线程API),有的是JDK之外的(如JavaSpace);另外,还有MPI和PVM的Java实现——JMPI和JPVM。④Java可以进行基于Web的并行计算。
Java的引入给分布式并行计算系统的实现带来了一些新特点。Java是面向网络的跨平台语言, 移植性、网络应用和安全问题是该语言本身的特征。对分布式问题,Java在语义上提供了更为简洁清晰的描述。用Java来构造系统,在实现上更符合网络的特点。
三、Java并发处理技术
Java在语言级通过使用线程来支持并发处理机制。在Java之前的大多数编程语言只能通过直接访问操作系统的特定库,才能实现并发处理。这种方式的缺点是,一方面使对并发处理变得非常困难,另一方面使得移植到其他平台成了一件不可能的事情。Java不仅在语言级实现了和平台无关的并发处理支持,而且还让编程变得非常简单。
Java并发处理机制的核心是java.lang.Thread类。通过这个类我们可以启动、中断、唤醒、减慢、加速和终止一个线程。此外,Java语言中还提供其他有用的方式,例如Runnable接口等,帮助我们使用这种类。另外在基类java.lang.Object类里也提供了一些方法用来支持线程的使用。此外,Java语言中还有synchronized和volatile两个关键字用于支持并发处理,所有这些都是语言本身不可分割的一部分。
在Java语言中有两种创建一个新线程的方式。其中比较简单的一种方式是通过从Thread类派生一个子类,然后通过创建该子类的实例创建新线程。继承的子类必须实现run()方法。这个方法将被系统调用,在这个方法中指定新线程中要执行的方法内容。可以说run()方法代表了这个线程的根本方法。创建了一个实例以后,再调用它的start()方法,这时将会导致从系统中分离出一个新的线程,并且新线程里的run()方法开始有机会执行。需要传给新线程的参数不能通过run()方法传递,而是通过派生的Thread类的子类的构浩函数来传递。第一种方法使用的是继承方式,而Java又只支持单重继承,因此创建线程就需要有第二种变通的方式来避免直接继承Thread类。不过为了让系统知道要执行什么操作,新的线程需要有一个提供了run()方法的类,这个类可以通过实现Runnable接口的方式达到要求。Runnable接口标志着这个类是一个提供run()方法的类,这样线程就可以调用它。在创建一个线程的时候就可以将这个类的实例传给Thread类的构造方法。通过这种方式,就可以将一个线程指定到可以继承任意类的一个类中。
四、Jini技术和JavaSpace技术
Jini是分布式系统体系结构的一种,它利用Java构建分布式系统的中间件。Jini的基础是Socket和远程方法调用(RMI)的分布式计算机制。我们可以借助于Jini,创造出一个富有弹性、容易管理且可随时随地使用各种服务的网络计算环境。
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:在分布式计算的环境中,必须确保程序执行的先后顺序,利用事件的观念可以帮助我们解决这个问题。
有了Jini的架构以及程序设计模型后,我们可以利用这些技术来设计管理网络资源的服务,以促进分布式计算的发展。
JavaSpaces是用Jini所发展的技术,并且通过RMI进行网络通讯,一般应用在N层(n-tiers)架构的中间层(middle tiers)。JavaSpaces虽然能提供需求者与供应者之间查询与沟通的机制,但它并不是资料库,而是以简单的messaging system为基础,进而提供更强大的功能。
Jini提供了在分布式环境中寻找(look-up)、注册(registration)、租借(leasing)等功能。而JavaSpaces则负责管理分布式对象的处理程序(processing)、共享(sharing)、以及流通(migration)等。因此Jini与JavaSpaces彼此存在着相互合作的关系。简单地说,JavaSpaces就好像网络上的一个市场,它提供一个简单、快速、统一的界面,让网络上分布的资源可以被分享、协调与流通。