基于CUDA的测井数据并行处理方法初探
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于CUDA的测井数据并行处理方法初探
张宫;李宁;罗超;武宏亮;冯庆付
【摘要】测井数据处理程序大多基于CPU的串行程序,在处理信息量较大或算法较为复杂的数据时,处理速度难以满足实际需求.探索了GPU并行处理技术在测井数据处理中的应用;在CUDA(Compute Unified Device Architecture)平台上实现了基于GPU的核磁共振T2谱反演算法程序;对T2谱反演程序进行了详细分析,在移植到CUDA平台时对程序的访存模式进行了优化.对基于CPU和GPU的测井数据处理程序进行了对比实验,测试的T2谱反演程序获得了约18倍的加速比,表明基于GPU的处理程序具有明显的效率优势.
【期刊名称】《测井技术》
【年(卷),期】2016(040)004
【总页数】4页(P439-442)
【关键词】测井数据处理;T2谱反演;CUDA;GPU并行计算
【作者】张宫;李宁;罗超;武宏亮;冯庆付
【作者单位】中国石油勘探开发研究院,北京100083;北京大学地球与空间科学学院,北京100871;中国石油勘探开发研究院,北京100083;中国石油勘探开发研究院,北京100083;中国石油勘探开发研究院,北京100083;中国石油勘探开发研究院,北京100083
【正文语种】中文
【中图分类】P631.84
0 引言
随着测井技术的发展,测井数据量越来越大,处理方法越来越复杂,这对用于处理数据的计算机和处理软件提出了新的要求。
测井数据处理软件以单机为主,处理程序也都为基于CPU的串行程序,在处理信息量较大或算法较为复杂的数据时,处理能力显得不足。
虽然计算机的性能在不断地提高,但还是很难满足测井对数据处理速度的要求,尤其是高端测井数据处理,有时处理一口井数据的时间往往达到几十分钟甚至数个小时。
针对上述问题,研究了在单机上利用CUDA(Compute Unified Device Architecture)平台,基于GPU高效处理测井数据的方法。
CUDA技术是针对GPU 的C语言环境之一,利用该技术,能够方便使用GPU处理复杂的计算密集型难题。
自CUDA平台推出以来,基于CUDA平台的高性能并行计算就被广泛应用于地球物理勘探领域[1]。
在地震勘探领域,CUDA技术已经被应用于解决地震波数值模拟[2]、偏移成像[3]等问题;在测井领域,双侧向测井有限元正演算法中CUDA技术的相关应用已有报导[4],但测井数据处理中还未见有相关应用。
本文分析了测井数据处理并行计算的可行性,尝试了在测井数据处理中使用CUDA技术进行加速,并以核磁共振测井T2谱反演处理为例对加速效果进行了分析。
1 测井数据处理过程的并行性
一般的测井数据处理程序包括数据加载、数据计算、数据写回3个步骤。
其中数据加载和写回由于需要对硬盘进行读写操作,只能作为串行程序执行,测井数据的并行处理集中在数据计算的环节。
并行数据处理分为2种模式,一种是任务并行性;另一种是数据的并行性,只有满足这2个条件之一,并行处理才会发挥优势。
典型的测井数据采集方法是以井眼为基础,逐深度点的采集储层地球物理信息,数据处理时每个深度点的数据可以单独处理,这个特点恰好满足并行计算数据的并行性要求。
图1 数据依赖示意图
某些特殊的测井数据处理时,1个深度点的计算结果,需要从临近的1个或多个点进行取值而产生数据依赖(见图1),这将破坏数据的可并行性。
对于这种情况,仍旧可以采用迭代重合处理的方法进行并行化,即把处理任务按照结果个数进行分割,每个深度点的结果作为一个独立的运算单元,只是取值时把当前深度的值和附近需要的值一并进行读取。
该方法虽然在数据读取的时候稍有性能的浪费,但对于计算密集型的数据处理同样会带来处理效率的提高。
2 基于CUDA平台的GPU并行数据处理
与CPU不同,GPU中大部分晶体管被用来进行计算,只有少量晶体管被用来进行指令控制,因此可以在单个芯片上集成大量的处理单元(见图2),从而拥有CPU无法相比的计算性能。
以最新的显卡K80为例,其拥有高达4 992个处理单元,单精度峰值处理达到8.7万亿次。
良好的硬件需要有配套的软件才能发挥其优势,CUDA平台利用较为通用的C语言扩展集,为用户提供了一系列接口,使在GPU上进行通用计算变得简单可行。
图2 CPU与GPU芯片设计对比
与CPU上运行的程序设计最大的不同就是需要考虑存储器的选择,GPU能够使用的存储器类型很多(见表1),需要根据实际情况进行选择,从而使访存性能达到最优。
GPU拥有成百上千个计算单元,但每个计算单元所拥有的寄存器和共享存储空间却是有限的,设计GPU并行程序时,除了考虑任务和数据的并行性外,还要考虑单个独立的计算单元需要的存储空间。
例如,对于核磁共振测井T2谱反演算法,假如输入的回波串长度为500个单精度浮点数,布点个数为30个,那么1个计算单元需要约60 kB的存储空间。
以GTX765M显卡为例,每个线程块寄存器数量为65 536,共享存储容量为48 kB,显然满足不了1个计算单元60 kB的存储需求,只能退而求其次,选择相对较慢的全局存储或纹理存储。
表1 GPU存储器类型存储类型寄存器共享内存纹理内存常量内存全局内存带宽~8TB/s~1.5TB/s~200MB/s~200MB/s~200MB/s延迟1个周期1~32个周期400~600个周期400~600个周期400~600个周期
3 测井数据处理程序的并行化改进
在Windows平台上改写了常规测井数据处理程序以及核磁共振T2谱反演程序,并对处理效率进行了测试。
3.1 核磁共振测井T2谱反演
T2谱反演是核磁共振测井数据处理的关键步骤,也是利用核磁共振测井资料进行储层参数计算和油气水识别的前提条件。
核磁共振测井获取的每个回波信号实际都是多种弛豫组分的总体效应叠加,可以用多指数函数模型表示
(1)
式中,A(t)为t时刻测到的回波幅度;T2i为第i种弛豫分量的横向弛豫时间;Pi为第i 种弛豫分量的零时刻信号大小。
每一特征弛豫时间T2i=αi/ρ,都可以用来表征孔隙尺寸的大小;Pi对应某种特征弛豫尺寸孔隙的孔隙度大小。
在反演中,T2i是预先设定一系列的值(T2布点),确定各设定弛豫T2i和特征弛豫组分m后,结合回波串A(tj),j=1,…,n可以构成一个超定方程组,其矩阵形式
XP=A
(2)
式中,P=(P1,…,Pm)T;A=(A(t1),A(t2),…,A(tn))T;
由上述方程组计算得出Pi的过程叫做T2谱反演。
一系列预设的Ti与对应的Pi构成了核磁弛豫分布,它们可以用来表征孔隙大小的分布。
T2谱反演算法归根到底是
一个求解超定线性方程最优非负解的问题。
通常这个方程会非常大,需要利用矩阵分解或迭代方法进行求解,方法有奇异值分解法、模平滑法和迭代法,这几种算法都存在计算速度慢的问题[6]。
为了测试,在原有的改进型截断奇异值分解法(SVD)反演算法基础上,利用CUDA平台将原程序改写为GPU并行计算的T2谱反演算法程序。
3.2 并行算法设计及优化
核磁共振测井T2谱反演流程如图3所示,重要的步骤便是进行奇异值分解,如果把奇异值分解算法全部放在GPU上进行,就不得不考虑存储空间的问题。
在回波串长度为500,T2布点为30个的情况下,单个深度点需要的存储空间远远大于单个线程块最大寄存器和共享存储容量,只能考虑全局存储。
图3 T2谱反演处理流程
另外,GPU和CPU架构差异较大,对于拥有较大的计算能力且带宽远大于CPU,但在数百个线程同时执行时,数据吞吐方面仍旧会显得带宽不足。
对于T2谱反演算法,除了把计算任务移植到GPU上外,还要进行访存模式的优化。
在程序设计完毕后对程序进行了访存模式检查,尽量采取合并访存的方式进行数据访问。
3.3 并行结果及效率分析
为了验证程序的正确性和效率,采用某实测井数据进行测试,处理井段长度为1 000 m,采样间隔0.1 m,处理点数为10 000个。
每个深度点采集的回波串个数为500个,T2反演布点数目设置为30,对数均匀分布于0.3~3 000 ms之间。
测试使用的计算机CPU为酷睿I74 700MQ,拥有8个逻辑核心,标准频率为2.4 GHz;对比用的GPU为英伟达GTX765M,拥有768个处理单元,2 GB的全局存储。
原有在CPU 上运行的程序处理完成耗费时间131 428 ms,进行GPU并行化改进后处理耗时为7 248 ms,加速比达到18倍左右。
图4 计算结果对比
图4中第1道为深度道;第2、3道分别为原有在CPU上运行的T2谱反演程序计
算的结果及移植到CUDA平台利用GPU计算的结果,其结果几乎完全一致;第4、5、6、7道分别是用2个T2谱计算得到的几何平均值、总孔隙度、有效孔隙度和可
动流体孔隙度,可以看出在个别地方略有差异外,结果完全一致。
分析发现,计算结果的差异是因为CPU和GPU浮点数保留位数不同,但两者的计算结果在可接受误差
范围内。
4 结论
(1) 基于GPU的处理程序具有明显的效率优势,测试的T2谱反演程序获得了约18
倍的加速比。
说明CUDA的GPU并行计算可以应用于测井数据处理中,在计算密
集型的测井数据处理方面可以带来可观的性能提升。
(2) 在进行GPU并行程序设计时,除了考虑处理任务的并行性外,还要根据实际情况进行存储器的选择及访存的优化,才能使GPU的性能充分发挥。
参考文献:
[1] 张军华, 臧胜涛, 单联瑜, 等. 高性能计算的发展现状及趋势 [J]. 石油地球物理勘探, 2010, 45(6): 918-925.
[2] 王守进, 林年添, 丁仁伟, 等. 利用GPU技术及分块策略加速地震波场模拟 [J].
地球物理学进展, 2014, 29(3): 1292-1297.
[3] 张兵, 赵改善, 黄骏, 等. 地震叠前深度偏移在CUDA平台上的实现 [J]. 勘探地球物理进展, 2008, 31(6): 0427-0433.
[4] 苏俊, 尚景涛, 邹长春. 双侧向测井有限元正演算法的GPU并行实现[C]∥中国
地球科学联合学术年会, 北京: 2014.
[5] 何宗斌, 张宫, 樊鹤. 一种基于并行计算技术提高测井数据处理速度的方法 [J].
石油天然气学报, 2012, 34(7): 76-79.
[6] 张宫. 核磁共振测井数据处理方法与软件开发研究 [D]. 武汉: 长江大学, 2013.。