一种处理叠前逆时偏移数据的系统及方法技术领域
本发明涉及地质勘探领域,具体说涉及一种处理叠前逆时偏移数据的系统及
方法。
背景技术
叠前逆时偏移是一项计算密集型和数据密集型的地震偏移成像方法。近年来
快速发展的图形处理器(GraphicProcessingUnit简称GPU)技术,为叠前深度偏
移处理提供了强有力的工具,大大提高了叠前逆时偏移数据的处理效率。但是
GPU本身拥有的显存空间限制(一般为4-8GB)制约了GPU可以处理的叠前逆
时偏移数据的数据量以及计算量。
为了处理更大数据量以及计算量的叠前逆时偏移数据,并进一步提高叠前逆
时偏移数据的处理效率,需要一种新的处理叠前逆时偏移数据的系统及方法。
发明内容
针对现有处理方法存在的问题,本发明提供了一种处理叠前逆时偏移数据的
方法,所述方法包含以下步骤:
步骤一,获取待处理的叠前逆时偏移数据;
步骤二,将所述叠前逆时偏移数据划分为多个数据单元;
步骤三,分别以每个所述数据单元为处理对象同时对所有所述数据单元进行
并行处理,从而得到每个所述数据单元的处理结果,进而获得所述叠前逆时偏移
数据的处理结果。
在一实施例中,在所述步骤二中,根据计算需求动态确定所述数据单元的数
目。
在一实施例中,所述步骤三包含以下步骤:
数据划分步骤,将所述数据单元划分为独立数据以及重叠数据;
独立数据处理步骤,对所述独立数据进行处理从而获得独立数据处理结果;
重叠数据处理步骤,对所述重叠数据进行处理从而获得重叠数据处理结果。
在一实施例中,所述重叠数据处理步骤包含以下步骤:
第一重叠处理步骤,对所述重叠数据进行处理从而获取第一重叠处理结果;
数据交换步骤,对不同数据单元的对应的所述第一重叠处理结果进行数据交
换从而获取第二重叠处理结果。
在一实施例中,在所述步骤三中,在进行所述独立数据处理步骤的同时进行
所述数据交换步骤。
在一实施例中,所述重叠数据处理步骤还包含第二重叠处理步骤,对所述第
二重叠处理结果进行处理从而获取所述重叠数据处理结果。
在一实施例中,在所述独立数据处理步骤执行完毕时执行所述第二重叠处理
步骤。
在一实施例中,其特征在于,所述步骤三还包含获取数据单元处理结果步骤,
基于所述独立数据处理结果以及所述重叠数据处理结果获取所述数据单元的处
理结果。
本发明还提出了一种处理叠前逆时偏移数据的系统,所述系统包含:
多个计算模块,每个所述计算模块用于处理待处理的叠前逆时偏移数据的一
个数据单元;
数据中继模块,其与每个所述计算模块相连,用于实现所述计算模块之间的
数据交互。
在一实施例中,每个所述计算模块采用一块图形处理器构建。
与现有技术相比,利用本发明的处理方法以及系统处理数据,不仅避免了
GPU显存对数据量以及计算量的限制,还大大提高了数据处理效率。并进一步的
缩短了GPU处理数据的处理时间。
本发明的其它特征或优点将在随后的说明书中阐述。并且,本发明的部分特
征或优点将通过说明书而变得显而易见,或者通过实施本发明而被了解。本发
明的目的和部分优点可通过在说明书、权利要求书以及附图中所特别指出的步
骤来实现或获得。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明
的实施例共同用于解释本发明,并不构成对本发明的限制。在附图中:
图1是根据本发明一实施例执行流程图;
图2是根据本发明一实施例的数据单元划分示意图;
图3是现有技术处理数据的时间步示意图;
图4是根据本发明一实施例处理数据的时间步示意图;
图5是根据本发明一实施例的部分执行流程图。
具体实施方式
以下将结合附图及实施例来详细说明本发明的实施方式,借此本发明的实
施人员可以充分理解本发明如何应用技术手段来解决技术问题,并达成技术效
果的实现过程并依据上述实现过程具体实施本发明。需要说明的是,只要不构
成冲突,本发明中的各个实施例以及各实施例中的各个特征可以相互结合,所
形成的技术方案均在本发明的保护范围之内。
在现有技术中,当叠前逆时偏移数据的数据量较大时,由于GPU显存不足,
因此GPU无法满足数据量以及计算量需求。为了解决这一难题,本发明提出了
一种处理叠前逆时偏移数据的方法及系统。本发明利用GPU的并行计算架构
(ComputingUnifiedDeviceArchitecture简称CUDA)采用多卡联合作业模式来
解决单一GPU显存容量不足的问题。接下来基于流程图来详细描述本发明的方
法的执行过程。
附图的流程图中示出的步骤可以在包含诸如一组计算机可执行指令的计算
机系统中执行。虽然在流程图中示出了各步骤的逻辑顺序,但是在某些情况下,
可以以不同于此处的顺序执行所示出或描述的步骤。
如图1所示,首先执行步骤S110,获取待处理的叠前逆时偏移数据。然后执
行步骤S120,将待处理的叠前逆时偏移数据划分为多个数据单元。这样相对于叠
前逆时偏移数据整体而言,单独的一个数据单元的数据量以及计算量大大的减
少。在本实施例中,根据当前的计算需求动态确定数据单元的数目。针对划分后
的数据单元,本发明的处理系统构造有多个计算模块,每个计算模块用于处理一
个数据单元。
在本实施例中,每个所述计算模块采用一块GPU卡来构建。采用多块GPU,
每块GPU处理一个数据单元,基于GPU的CUDA架构,在整体上所有GPU可以并
行执行数据处理行为,即所有数据单元的处理行为可以同时进行。这样不仅解决
了单一GPU无法满足叠前逆时偏移数据整体的数据量以及计算量的问题,而且大
大提高了计算效率。
在本实施例中,将叠前逆时偏移数据划分成n个数据单元,每块GPU卡处
理一个数据单元。接下来就可以执行步骤S130,并行处理数据。分别以每个数据
单元为处理对象同时对所有数据单元进行并行处理,从而得到每个数据单元的处
理结果,进而获得叠前逆时偏移数据的处理结果。
当然的,在利用GPU进行数据处理之前要对GPU设备进行初始化、设备选
择、输出传输、线程网格的设定等这些初始工作,之后开始多卡GPU并行处理。
在本说明书中对上述准备步骤就不多加赘述。
相较于利用一个GPU卡处理全部的叠前逆时偏移数据的处理模式,多卡并
行处理模式下相应的逆时偏移计算也较复杂。叠前逆时偏移数据是由众多炮数据
体组成的,每次计算一个炮数据体。利用多卡联合计算一个炮数据体,意味着将
一个炮数据体分别用不同的GPU卡计算。即需要将一个炮数据体按照如图2所
示的方式分为n个数据单元(卡1、卡2…卡n)。由于炮数据体本身的数据内容
性质,在划分数据单元时,相邻两个数据单元会存在重叠区域,如图2所示。这
就导致在并行处理模式下,在计算过程中不仅需要GPU与主机间进行数据传输,
还需要GPU卡之间进行数据交换。由于GPU卡之间是不能直接进行数据传输的,
因此本发明的系统还构造有数据中继模块,其与每个计算模块(GPU卡)相连,
用于进行两个计算模块之间的数据交互。
在本实施例中,采用主机作为数据中继模块。GPU卡之间通过主机这一桥梁
进行数据交换。为了满足任意大规模叠前逆时偏移数据的处理,本发明的系统使
用了包含直接内存存取(DirectMemoryAccess,简称DMA)或远程直接数据存取
(RemoteDirectMemoryAccess简称RDMA)技术的GPU卡。DMA技术可以直接读
取和写入CUDA主机内存,消除不必要的系统内存拷贝和中央处理器(CPU)开
销,还支持GPU之间以及类似NUMA结构的GPU到其他GPU内存的直接访问的
P2P的DMA直接传输。
本发明还基于多点接口(MultiPointInterface简称MPI)技术设计了利用CPU内
存作为中转站的数据交换机制,这种机制不限定每次数据处理所需要的GPU卡的
数量。在本实施例中,根据当前数据处理的计算需求动态的规划需要的GPU卡的
数量。最简单的方式是由当前一炮数据的数据规模除以GPU一块卡的显存容量即
得到所需GPU卡的数量。
由于数据交换过程的存在,通过GPU多卡处理虽然可以解决GPU显存不足的
限制,但另一方面也引入了通讯量增加的问题。在本实施例中的处理系统中,每
次GPU卡之间的数据交换,就需要4次GPU与CPU之间的数据传输,以及一次CPU
内存间的数据传输。数据交换过程的存在大大增加了系统整体的输入输出通讯
量。不难理解,由于CPU与GPU的数据输出输出具有一定的访问延迟,再加上通
常情况下数据计算与数据传输是串行执行的,因此通讯量的增加即意味着最终处
理时间的延长。
定义完成一次数据计算以及相应的数据传输所需的处理时间为一个时间步。
图3为两块GPU卡执行两个时间步的并行数据处理流程示意图。如图3所示,311、
321、313以及323所标记的矩形段代表数据计算过程所消耗的时间;312、322、
314以及324所标记的矩形段代表数据交换过程所消耗的时间。由于GPU串行执行
数据计算过程以及数据交换过程,并且GPU1与GPU2并行执行数据处理。因此时
间步1即相当于311与312(或321与322)所代表的执行时间之和,时间步2即相当
于313与314(或323与324)所代表的执行时间之和。
为减短每个时间步,在本实施例中,将每片GPU所需要处理的数据进一步
划分。在同一片GPU内,其数据处理过程如图1虚线框A中的具体流程所示。
首先执行步骤S131,数据划分步骤。每块GPU卡所需要处理的数据可分为可独
立计算的独立数据以及需要进行数据交换的重叠数据。针对独立数据或重叠数据
分别进行处理从而获得独立数据处理结果或重叠数据处理结果。
步骤S131完成后,针对独立数据,执行步骤S135,独立数据处理步骤,其所
有的计算处理过程可以在一片GPU内完成。针对重叠数据,需要先进行步骤S132,
第一重叠处理步骤,基于重叠计算数据获取第一重叠处理结果。然后执行步骤
S133,数据交换步骤,对不同数据单元的对应的第一重叠处理结果进行数据交换
从而获取第二重叠处理结果。最后执行步骤S134,第二重叠数据处理步骤,基于
第二重叠处理结果获取重叠数据处理结果。
基于步骤S134以及步骤S135得到的重叠数据以及独立数据的处理结果执行
步骤S136,获取数据单元处理结果步骤,基于独立数据处理结果以及重叠数据处
理结果获取数据单元的处理结果。
基于上述数据处理过程,为了优化GPU卡间的数据通讯,减少整体的数据
处理时间,本发明的数据处理方法采用数据交换隐藏策略。本实施例中,利用
GPU流处理(Stream)技术来实现数据交换的隐藏。GPU计算中可以创建多个流
(Stream),每个流是按顺序执行的一系列操作,而不同的流与其他的流之间可
以是乱序执行的,也可以是并行执行的。这样,可以使一个流的计算与另一个流
的数据传输同时进行,从而提高GPU中资源的利用率。
在本实施例中,分别针对独立数据以及重叠数据的处理建立两个流。即步骤
S132以及S133属于一个流,步骤S135属于另一个流。在执行步骤S135的同时
执行步骤S133,从而达到隐藏步骤S133的执行时间的目的。由于步骤S135的执
行时间大于步骤S133的执行时间,因此步骤S134紧随步骤S135执行,步骤S136
紧随步骤S134在数据处理的最后执行。步骤S134以及步骤S136从属于哪一个
流并不影响本发明的数据交换隐藏策略的执行。为方便描述,在随后需要描述的
图4上,将步骤S134以及步骤S136的执行时段并入步骤S135的执行时段中,
步骤S134以及步骤S136的执行时段也不做具体体现。
结合图3以及图4所示,数据计算过程311可以划分为411以及412两个数
据计算过程。其中,数据计算过程411为图1中的S132,数据计算过程412为图
1中的S135、S134以及S136。类似数据计算过程311,数据计算过程313可以划
分为数据计算过程413以及414;数据计算过程321可以划分为数据计算过程421
以及422;数据计算过程323可以划分为数据计算过程423以及424。图3中的
数据交换过程312、314、322以及324不做进一步划分,为图4中的数据交换过
程431、432、433以及434。
在本实施例中,分别针对独立数据以及重叠数据建立两个流。如图4所示,
即针对GPU1在时间步1中,数据计算过程411和数据交换过程431属于一个流,
数据计算过程412属于一个流。针对GPU1在时间步1中,首先执行数据计算过
程411,数据计算过程411完成后同时开始数据计算过程412以及数据交换过程
431的执行。这样GPU1的时间步1就为数据计算过程411加上数据计算过程412
的执行时间(相当于图3中数据计算过程311的执行时间)。相较于图3中GPU1
的时间步1,数据交换过程312的执行时间被隐藏。GPU1的时间步2以及GPU2
的时间步1和2的情况与GPU1的时间步1相同,这里就不多加赘述。
定义流的具体方法,是创建一个对象,并在启动内核计算和进行数据交换时
将该对象作为参数传入,参数相同的属于同一个流,参数不同的属于不同的流。
如下属的具体例子所示:
cudaStream_tstream1,stream2;//创建两个流;
overlap_area<<<stream1>>>;//流1计算重叠数据;
separate_area<<<stream2>>>;//流2计算独立数据;
exchange_data<<<stream1>>>;//流1交换重叠数据;
save_bound_wave<<<stream1>>>;//流1存储波场。
在本实施例的一个具体应用例子中,叠前逆时偏移数据的处理包括震源波场
正向延拓以及接收器波场反向延拓。在一片GPU中,具体计算流程如图5所示,
首先执行步骤S510,计算重叠数据(流1)。然后在执行步骤S520,计算独立数
据(流2)。
在执行步骤S520的同时,首先执行步骤S530,将步骤S510中的结果数据复
制到主机内存;并随即执行步骤S540,利用主机内存进行数据交换;接着执行步
骤S550,将交换后的数据复制到显存,最后执行步骤S560,读取显存中的数据。
最终执行步骤S570,根据S520的结果以及S560中读取到的数据交换结果进
行波场叠加。并最终输出波场叠加结果或返回到步骤S510,进行下一轮的数据计
算处理。其具体地程序编写如下:
for(0->T)//震源波场正向延拓{
overlap_area(d_wave_s,stream1);//流1进行重合区域震源波场延拓计算
separate_area(d_wave_s,stream2);//流2进行独立区域震源波场延拓计算
exchange_data(stream1);//流1交换数据
save_bound_wave(stream1);//流1将计算完成的震源波场边界保存
}
for(T->0)//接收器波场反向延拓{
recov_bound_wave(stream1);//流1接收当前时间震源波场边界
overlap_area(d_wave_r,stream1);//流1计算当前时间重合区域接收器波
场
overlap_area(d_wave_s,stream1);//流1计算当前时间重合区域震源波场
separate_area(d_wave_s,stream2);//流2计算当前时间独立区域震源波场
separate_area(d_wave_r,stream2);//流2计算当前时间独立区域接收器波
场
imaging<<<dimGrid,dimBlock>>>(d_rimage,d_wave_s,d_wave_r,stream2);
//流2进行当前时间震源波场和接收器波场相关成像
exchange_data(d_wave_s,stream1);//流1交换震源波场重合区域数据
exchange_data(d_wave_r,stream1);//流1交换接收器波场重合区域数据
}
cudaMemcpy(RIMAGE,d_rimage,sizeof(float)*nx_apt*ny_apt*nz,cudaMemcpy
DeviceToHost);//将计算结果由GPU显存传回主机内存中;
当获取到每个数据单元的处理结果后,就可以将所有数据单元的处理结果组
合从而获得叠前逆时偏移数据的处理结果。并最终执行如图1所示的步骤S140,
输出结果步骤,将最终获取的叠前逆时偏移数据的处理结果输出给用户。
接下来以某工区的实际资料进行测试,如表1所示。假设两个具体的数据,
处理数据1需要使用4片GPU,处理数据2需要使用16片GPU。计算波场数据
量与GPU通信吞吐量,分别估计消耗的时间,然后与实际运行的总体时间比较,
若总时间与计算时间相当,表明通信时间被隐藏;若总时间与计算时间相差很大
则表明通信和计算并未实现隐藏。
如表1所示,MPI技术中通信时间和计算时间是串行完成。现有技术只采用
MPI技术,处理数据1通讯时间12.5,总运行时间40s;处理数据2通讯时间49.3,
总运行时间161.2s。本发明的系统采用了包含DMA(或RDMA)的技术的GPU
卡,采用MPI与DMA技术结合,通信效率得到了提高(处理数据1通讯时间5.2s,
处理数据2总通讯时间25.2s,),总运行时间缩短(处理数据1总运行时间40s,
处理数据2总运行时间161.2s)。但是由于DMA(或RDMA)仍然为串行完成,
GPU卡的总运行时间依然较长。采用本发明的处理系统以及方法(利用
RDMA+Stream技术),处理数据1通讯时间2.6,总运行时间28.02s;处理数据
2通讯时间12.4,总运行时间112.03s。总运行时间(28.02s以及112.03s)与纯计
算时间(28s以及112s)相当。证明了本发明的处理系统以及方法利用多线程流
计算与并行传输技术实现了通信时间隐藏,总体运行效率提高9%左右。
技术
GPU卡数
通讯量
通讯时间
计算量
计算时间
总运行时间
MPI
4
8GB
12.5s
112GB
28s
40s
MPI+DMA
4
8GB
5.2s
112GB
28s
33.2s
RDMA+Stream
4
8GB
2.6s
112GB
28s
28.02s
MPI
16
32GB
49.3s
448GB
112s
161.2s
MPI+DMA
16
32GB
25.2s
448GB
112s
137.2s
RDMA+Stream
16
32GB
12.4s
448GB
112s
112.03s
表1
综上,利用本发明的处理方法以及系统处理数据,不仅利用GPU并行处理
模式避免了GPU显存对数据量以及计算量的限制,还通过多GPU的并行处理大
大提高了数据处理效率。进一步的,还利用数据交换隐藏策略缩短了单一GPU
处理数据的计算时间。
虽然本发明所公开的实施方式如上,但所述的内容只是为了便于理解本发明
而采用的实施方式,并非用以限定本发明。本发明所述的方法还可有其他多种实
施例。在不背离本发明实质的情况下,熟悉本领域的技术人员当可根据本发明作
出各种相应的改变或变形,但这些相应的改变或变形都应属于本发明的权利要求
的保护范围。