发明内容
针对现有技术中存在的不足,本发明的目的之一在于解决上述现有技术中存在的一个或多个问题。例如,本发明的目的之一在于提出一种基于多核处理器的地震数据快速访问方法,以实现地震数据的高效快速访问存取。
为了实现上述目的,本发明提供了一种基于多核处理器的地震数据快速访问方法。所述方法通过在多核处理器硬件环境中实施并行内存映射任务分配及划分,实现地震数据的快速访问存取,所述方法包括以下步骤:
A,实时获取访问存取的地震数据文件大小,并确定映射视图大小;确定拟使用运行的线程数,所述线程数不大于计算机处理器CPU的核数n且为正整数;计算总任务数,对含有所述总任务数个任务的任务池进行初始化,任务池中第i个位置的任务为第i个映射视图的起始位移,所述第i个映射视图的起始位移=i×视图大小,i=1,2,…,n。
B,使用系统创建文件函数打开或创建地震数据的文件核心对象,并将返回的文件句柄作为地震数据的内存映射对象参数。
C,当读取的地震数据量在程序执行前已经确定,如果对地质数据进行顺序访问,访问过程中不会产生任务量的变化时,采用将划分好的任务以固定的方式分配给各个执行线程,具体地:
初始化各个线程的任务队列,总数为i(i=1,2,…,n),将所述任务池中的任务均分给n个线程,并将分配给第i个线程的任务保存在任务队列i(i=1,2,…,n)中;各执行线程并行检索各自的任务队列,如果任务队列为空,则结束当前线程,并转至步骤E,否则从任务队列中提取出一个视图映射起始位移;各执行线程以获取的起始位移为映射起始位移,调用文件映射视图函数来映射划分的地震数据。
当读取的地震数据量在程序开始执行时并不能确定时,采取将所有任务按轮询的方式逐个分配给各个处于空闲状态的处理器,具体地:
多核处理器执行线程判断任务池是否为空,如果任务为空,则结束当前线程并转至步骤E;否则,从任务池中提取出一个视图映射起始位移,各执行线程以获取的起始位移为映射起始位移,调用文件映射视图函数来映射划分的地震数据。
D、各执行线程中分别处理此线程所映射视图下的地震数据,直到各自线程访问存取完成后,解除各自对应的视图映射,并返回至所述步骤C。
E、所有访问存取地震数据任务执行完毕后,关闭内存映射文件和文件核心对象;否则等待。
根据本发明基于多核处理器的地震数据快速访问方法的一个实施例,所述映射视图大小是64KB的整数倍,例如,所述映射视图大小的指定值为64KB。
根据本发明基于多核处理器的地震数据快速访问方法的一个实施例,所述方法适用于采用linux操作系统的计算机。
与现有技术相比,本发明的有益效果包括:能够实现地震数据的高效快速访问存取,且针对数据规模逐步扩大的情况下,在运行过程中具有稳定的加速比,拥有良好的扩展性,多核处理器计算机环境下的大数据处理领域的数据快速存取问题具有一定的借鉴作用。
具体实施方式
在下文中,将结合示例性实施例详细地描述根据本发明的基于多核处理器的地震数据快速访问方法。
本发明提出了一种基于多核处理器的地震数据快速访问方法。该方法的基本思路在于:基于多核处理器并行计算与linux系统内存映射文件技术原理,通过在多核处理器硬件环境中执行并行内存映射任务分配及划分,实现地震数据的高效快速访问存取。
其中,内存映射文件与虚拟内存有些类似,通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区域,只是内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而非系统的页文件,而且在对该文件进行操作之前必须首先对文件进行映射,就如同将整个文件从磁盘加载到内存。由此可以看出,使用内存映射文件处理存储于磁盘上的文件时,将不必再对文件执行I/O操作,这意味着在对文件进行处理时将不必再为文件申请并分配缓存,所有的文件缓存操作均由系统直接管理,由于取消了将文件数据加载到内存、数据从内存到文件的回写以及释放内存块等步骤,使得内存映射文件在处理大数据量的文件时能起到相当重要的作用。另外,实际工程中的系统往往需要在多个进程之间共享数据,如果数据量小,处理方法是灵活多变的,如果共享数据容量巨大,那么就需要借助于内存映射文件来进行。实际上,内存映射文件正是解决本地多个进程间数据共享的最有效方法。
也就是说,内存映射文件指的是硬盘上文件的位置与进程逻辑地址空间中一块大小相同的区域之间的一一对应。这种对应关系属于逻辑上的概念。在内存映射的过程中,并没有实际的数据拷贝,文件没有被载入内存,只是逻辑上被放入了内存,即建立并初始化了相关的数据结构。这个过程通过系统调用实现,所以建立内存映射的效率很高。
在多核处理器硬件环境中的海量地震数据划分的核心思想就是将给定的地震数据划分成n个长度相等的子数据域,将n个子数据域用n个线程并行处理。对文件进行内存映射时,系统要求文件开始映射的位移是64KB的整数倍,因此在选取映射视图大小时,需要按照64KB的倍数进行操作。单纯的使用一般的数据划分方法难以达精确划分数据的目的。所以实现地震数据并行内存映射任务分配采用以64KB为单位,将所需要读取的文件划分为m块,n个线程,每个线程分到个64KB大小的数据块进行快速访问存取。
根据本发明示例性实施例的基于多核处理器的地震数据快速访问方法,包括以下步骤:
A,实时获取访问存取的地震数据文件大小,并确定映射视图大小,例如,在本实施例中,以一个视图的指定值64KB为映射视图大小;确定拟使用运行的线程数,所述线程数不大于计算机处理器CPU的核数n且为正整数,这里,为体现多核处理器的优势,线程数优选大于1,并且线程数取为计算器CPU核数n为理想状态,通常计算机还有其它应用同时运行,因此,优选线程数取小于核数n;计算总任务数对含有tasknum个任务的任务池进行初始化,任务池中第i个位置的任务为第i个映射视图的起始位移,既第i个映射视图的起始位移=i×视图大小,i=1,2,…,n。
B,使用系统创建文件函数打开或创建地震数据的文件核心对象,并将返回的文件句柄(在数据文件的输入输出中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄。文件句柄对于打开的文件是唯一的识别依据)作为地震数据的内存映射对象参数。
C,由于地震数据对处理器的读写有要求。对多核处理器环境下的海量地震数据进行访问存取数据时,通常面临两种情况:第一种情况:当读取的地震数据量在程序执行前已经确定,如果对地质数据进行顺序访问,访问过程中不会产生任务量的变化时,采用将划分好的任务以固定的方式分配给各个执行线程,具体地:
初始化各个线程的任务队列,总数为i(i=1,2,…,n),将所述任务池中的任务均分给n个线程,并将分配给第i个线程的任务保存在任务队列i(i=1,2,…,n)中。
各执行线程并行检索各自的任务队列,如果任务队列为空,则结束当前线程,并转至步骤E,否则从任务队列中提取出一个视图映射起始位移。
各执行线程以获取的起始位移为映射起始位移,调用文件映射视图函数来映射划分的地震数据。
对多核处理器环境下的海量地震数据进行访问存取数据时,面临的第二种情况是:当读取的地震数据量在程序开始执行时并不能确定时,采取将所有任务按轮询的方式逐个分配给各个处于空闲状态的处理器,具体地:
多核处理器执行线程判断任务池是否为空,如果任务为空,则结束当前线程并转至步骤E;否则,从任务池中提取出一个视图映射起始位移,各执行线程以获取的起始位移为映射起始位移,调用文件映射视图函数来映射划分的地震数据。
D、各执行线程中分别处理此线程所映射视图下的地震数据,直到各自线程访问存取完成后,解除各自对应的视图映射,并返回至所述步骤C。
E、所有访问存取地震数据任务执行完毕后,关闭内存映射文件和文件核心对象;否则等待。
为进一步验证本申请的应用效果,申请人进行了应用实例验证:应用的并行环境:CPU:Intel双CPU六核Xeon处理器,主频2.80GHz,12MB二级缓存;硬盘:500GB SATA10000rpm,内存:48GB。地震数据大小32.86GB,线程数取4,测试随机读写地震数据文件,采用操作系统指令的方法需耗时约354秒,采用基于多核处理器的地震数据快速访问方法耗时约189秒。
本发明针对的是地震数据处理中心只会采用的网络存储方式。网络存储则必须考虑通信的传递而达到数据并行处理的一致性。本发明采用的方法只适用于地震数据处理领域计算机设备采用的linux操作系统,采用的系统函数指令方法与windows系统有明显的差别。
综上所述,本发明专利提出的一种基于多核处理器的地震数据快速访问方法。该方法基于多核处理器并行计算与linux系统内存映射文件技术原理,通过在多核处理器硬件环境中执行并行内存映射任务分配及划分,实现地震数据的高效快速访问存取。并且,该方法针对数据规模扩大的情况拥有良好的扩展性,对多核处理器计算机环境下的大数据处理领域的数据快速存取问题具有一定的借鉴作用,在石油地震勘探资料海量数据处理方面具有很好的应用前景。
尽管上面已经通过结合示例性实施例描述了本发明,但是本领域技术人员应该清楚,在不脱离权利要求所限定的精神和范围的情况下,可对本发明的示例性实施例进行各种修改和改变。