一种基于OpenCL的正演数值模拟方法技术

技术编号:20022735 阅读:15 留言:0更新日期:2019-01-06 02:57
公开了一种基于OpenCL的正演数值模拟方法。该方法包括以下步骤:1)创建多个OpenCL内存对象;2)将网格模型数据、差分参数、边界条件及震源子波从本地内存同步到用于存放输入数据的相应内存中;3)创建进行有限差分计算的Kernel程序对象;4)选择炮点,调用Kernel程序对象进行单炮的时间片循环;5)将步骤4)得到的炮集及快照数据存放在输出数据相应的内存中;6)在时间片循环结束后,将进行所有单炮输出的炮集和快照数据从OpenCL内存同步到本地内存。本发明专利技术提高了代码的可移植性及性能,消除了平台无关性,令正演数值模拟应用于越来越纷繁复杂的异构计算硬件,减少了软件研发与维护的开销成本。

【技术实现步骤摘要】
一种基于OpenCL的正演数值模拟方法
本专利技术涉及地震资料解释领域,更具体地,涉及一种基于OpenCL的正演数值模拟方法。
技术介绍
当前,以正演模拟等为代表的地震处理技术对高性能计算机的计算和数据处理能力有很高的要求,基于通用处理器的同构集群已经越来越不能满足需求。计算密度和计算效能远高于同构集群的异构集群(以NVIDIA公司CUDA架构GPU为主)日益成为地震处理的主流计算平台。近几年,国外各大石油公司纷纷购买GPU异构集群,并将计算强度高的地震处理算法移植到异构集群上。尽管GPU硬件发展如日中天,但软件应用方面仍面临很大的挑战,如何快速有效的开发基于大规模异构集群的石油物探软件是当前面临的最大难题,这个难题又具体表现为以下两个方面:1、各异构计算平台都有专门的编程模型,导致代码不具有可移植性;2、程序性能严重依赖于硬件参数导致每次移植代码需要重新调优。以NVIDIA的GPU计算平台为例,为某个型号GPU开发的CUDA程序,无法自动在另一个型号的GPU上获得高性能,需要重新调优。以上问题使得异构计算门槛较高,且软件研发与维护的开销很大,严重阻碍了GPU异构计算的推广应用。OpenCL(OpenComputingLanguage)编程模型的出现为解决异构计算的当前困境指明了方向。OpenCL是面向异构计算系统的通用并行编程开放标准,使用OpenCL开发的程序可以在Intel和AMD公司的CPU、NVIDIA和AMD公司的GPU、IBM公司的Cell处理器、以及Altera公司的FPGA等产品上运行。由于OpenCL具有平台无关性,自诞生以来,它的使用者持续迅速增长,已经成为一个重要的异构计算软件开发解决方案。和国外的情况类似,由于OpenCL是较新的技术,且多数公司使用NVIDIA公司产品,因此目前在国内地震处理领域,编程语言还是以CUDA为主,OpenCL应用较少。随着异构计算技术不断发展,硬件种类越来越多(如Intel的MIC众核产品),今后采用的异构计算硬件会呈现多样化,而OpenCL的平台无关性能解决代码的可移植性问题,另外该模型的并行高效能也使得它将会有更大的发展空间。公开于本专利技术
技术介绍
部分的信息仅仅旨在加深对本专利技术的一般
技术介绍
的理解,而不应当被视为承认或以任何形式暗示该信息构成已为本领域技术人员所公知的现有技术。
技术实现思路
为了解决上述现有技术中存在的难题,提出了一种基于OpenCL的正演数值模拟方法,能够克服现有基于CUDA的正演数值模拟方法的缺点和不足。本专利技术的基于OpenCL的正演数值模拟方法可以包括以下步骤:1)创建多个OpenCL内存对象,以形成用于存放正演数值模拟的输入数据和输出数据的内存空间;2)将网格模型数据、差分参数、边界条件及震源子波从本地内存同步到用于存放输入数据的相应OpenCL内存空间中;3)创建进行有限差分计算的Kernel程序对象;4)选择炮点,调用Kernel程序对象进行单炮的时间片循环,以计算炮集和快照数据;5)将步骤4)得到的炮集及快照数据存放在输出数据相应的OpenCL内存空间中;6)在时间片循环结束后,将进行所有单炮输出的炮集和快照数据从OpenCL内存空间同步到本地内存中。优选地,通过APIclEnqueueMapBuffer()与APIclEnqueueUnmapMemObject()的配对实现本地内存与OpenCL内存空间之间的信息交互。优选地,步骤3)包括创建3个Kernel程序对象,分别进行速度方程的计算、应力方程的计算以及边界计算。优选地,采用Stencil计算模式进行速度方程的计算和应力方程的计算。优选地,所述网格模型数据包括纵波、横波、密度的模型数据。优选地,所述差分参数包括x,z方向的网格数、网格步长、子波主频、样点数、采样间隔。优选地,所述网格模型数据经分块处理后,分块地载入OpenCL内存空间中。本专利技术将OpenCL异构编程模型用于正演数值模拟方法,提高了其代码的可移植性及性能,消除了平台无关性,令正演数值模拟应用于越来越纷繁复杂的异构计算硬件,减少了软件研发与维护的开销成本,从而更好地指导地震资料的采集、处理及解释工作。本专利技术的方法和装置具有其它的特性和优点,这些特性和优点从并入本文中的附图和随后的具体实施例中将是显而易见的,或者将在并入本文中的附图和随后的具体实施例中进行详细陈述,这些附图和具体实施例共同用于解释本专利技术的特定原理。附图说明通过结合附图对本专利技术示例性实施例进行更详细的描述,本专利技术的上述以及其它目的、特征和优势将变得更加明显,其中,在本专利技术示例性实施例中,相同的参考标号通常代表相同部件。图1为根据本专利技术的示例性实施方案的基于OpenCL的正演数值模拟方法的流程图。图2为网格模型数据分块进入设备端进行计算的示意图。图3为Stencil计算示意图。图4为创建的OpenCL内存对象的脚本示例图。图5为对图所中的OpenCL内存对象的说明。图6为网格模型数据分块载入设备端的脚本示例图。图7为创建的Kernel程序对象的脚本示例图。图8为设置Kernel参数的脚本示例图。图9为回收资源,输出炮集及快照数据的脚本示例图。具体实施方式下面将参照附图更详细地描述本专利技术。虽然附图中显示了本专利技术的优选实施例,然而应该理解,可以以各种形式实现本专利技术而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了使本专利技术更加透彻和完整,并且能够将本专利技术的范围完整地传达给本领域的技术人员。以下参考图1详细描述根据本专利技术示例性实施例的基于OpenCL的正演数值模拟方法的流程图。该方法可以主要包括以步骤:步骤1:创建多个OpenCL内存对象,以形成用于存放正演数值模拟的输入数据和输出数据的内存空间。首先创建平台对象,得到一个OpenCL平台;接下来创建GPU设备,并创建作用于GPU设备上的context以及创建command队列。在做好以上准备后,即可以创建OpenCL内存对象。所创建的OpenCL内存对象用于存放正演数值模拟的输入数据和输出数据。本专利技术针对二维弹性波,基于波动方程,采用有限差分算法进行正演数值模拟。输入数据通常包括网格模型数据、差分数据、边界条件以及震源子波;输出数据通常包括炮集和快照数据。所述网格模型数据通常包括纵波、横波、密度的模型数据等等;所述差分数据通常包括x,z方向的网格数、网格步长、子波主频、样点数、采样间隔,还可以包括例如时间采样步长、子波类型、最小和最大炮检距、算子长度、传播时间长度、存储记录的时间采样等等。边界条件可以包括四周边界宽度等等。这些数据可以从参数文件中获取。本领域技术人员应当理解,差分参数还可以包括其他任何差分计算所需要的参数。步骤2:将网格模型数据、差分参数、边界条件及震源子波从本地内存同步到用于存放输入数据的相应OpenCL内存空间中。输入数据首先存放于本地内存中。通过APIclEnqueueMapBuffer()与APIclEnqueueUnmapMemObject()的配对实现本地内存与OpenCL内存之间的信息交互,从而将网格模型数据、差分参数、边界条件及震源子波从host端内存同步到用于存放输入数据的相应OpenCL内存空间,也即使输入数据载入设备端以进行计算。APIc本文档来自技高网
...

【技术保护点】
1.一种基于OpenCL的正演数值模拟方法,其特征在于,所述方法包括以下步骤:1)创建多个OpenCL内存对象,以形成用于存放正演数值模拟的输入数据和输出数据的内存空间;2)将网格模型数据、差分参数、边界条件及震源子波从本地内存同步到用于存放输入数据的相应OpenCL内存空间中;3)创建进行有限差分计算的Kernel程序对象;4)选择炮点,调用Kernel程序对象进行单炮的时间片循环,以计算炮集和快照数据;5)将步骤4)得到的炮集及快照数据存放在输出数据相应的OpenCL内存空间中;6)在时间片循环结束后,将进行所有单炮输出的炮集和快照数据从OpenCL内存空间同步到本地内存中。

【技术特征摘要】
1.一种基于OpenCL的正演数值模拟方法,其特征在于,所述方法包括以下步骤:1)创建多个OpenCL内存对象,以形成用于存放正演数值模拟的输入数据和输出数据的内存空间;2)将网格模型数据、差分参数、边界条件及震源子波从本地内存同步到用于存放输入数据的相应OpenCL内存空间中;3)创建进行有限差分计算的Kernel程序对象;4)选择炮点,调用Kernel程序对象进行单炮的时间片循环,以计算炮集和快照数据;5)将步骤4)得到的炮集及快照数据存放在输出数据相应的OpenCL内存空间中;6)在时间片循环结束后,将进行所有单炮输出的炮集和快照数据从OpenCL内存空间同步到本地内存中。2.根据权利要求1所述的基于OpenCL的正演数值模拟方法,其特征在于,通过APIclEnqueueMapBuffer()与APIclEnqueueUnmapMemObject...

【专利技术属性】
技术研发人员:杨尚琴洪承煜
申请(专利权)人:中国石油化工股份有限公司中国石油化工股份有限公司石油物探技术研究院
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1