基于CUDA的海洋涡旋及Argo浮标交集数据快速提取算法

文档序号:10535778阅读:531来源:国知局
基于CUDA的海洋涡旋及Argo浮标交集数据快速提取算法
【专利摘要】本发明提出了一种使用CUDA并行加速提取海洋涡旋和Argo浮标相交数据集的算法。使用CPU/GPU异构,优化数据格式,减少数据传输量,使其缩短CPU和GPU之间拷贝时间;结合海洋涡旋的数据特点——不同涡旋之间一般互不影响,将每一个涡旋视为一个单位,用一个线程块表示,进而将一个涡旋一天的数据用一个线程表示,优化线程分配;在内核函数中遍历Argo浮标的点集数据,将涡旋数据和Argo浮标数据的儒略日进行匹配,然后应用平面包围盒算法和PNPoly算法计算出在涡旋边界范围内的Argo浮标数据;在数据存储过程中,优化涡旋数据组织形式,将所有信息整合到一个数据集中。分配线程的方式具有较强的逻辑性,在内核函数的计算过程中对算法进行了优化,大幅提高了数据集的生成效率。
【专利说明】
基于CUDA的海洋涡旋及Argo浮标交集数据快速提取算法
技术领域
[0001]该发明涉及海洋涡旋数据结构分析和涡旋浮标交集数据提取技术,具体来说是实现了 GPU并行计算架构CUDA加速提取海洋涡旋和Argo浮标相交数据集的算法。
【背景技术】
[0002]目前,分析中尺度涡旋的数据主要来自遥感反演数据。根据遥感数据,人们给中尺度涡旋的定义为中尺度涡旋(又称天气式海洋涡旋),是指海洋中直径约为100-300千米的涡旋。它通常分为两种:气旋式涡旋(在北半球为逆时针旋转),反气旋式涡旋(在北半球为顺时针旋转)。中尺度涡旋在海洋动力学以及盐分、能量的输送和其它生物、化学过程中都起着非常重要的作用,进而影响着该海域大洋环流,温度、盐度以及叶绿素等的垂直与水平分布,甚至影响地形地貌的改变。本发明将Argo浮标的温盐数据和轨迹数据与涡旋数据相结合得到的数据集对于研究大洋中的中尺度涡的轨迹和三维结构特征(温、盐和流)具有重大意义。根据遥感反演数据估计全球大洋中,每天约有上万个中尺度涡旋。借助遥感手段进行筛选,目前全球大洋中生命周期大于15天的中尺度涡旋的数量估计约为每天六多千个,一年全球大洋中中尺度涡旋的数量为50000多个,其存活平均时间为7个周左右。另外,Argo计划在全球大洋中每隔300千米布放一个卫星跟踪浮标,总计为3000个,组成一个庞大的Argo全球海洋观测网。3000个浮标中可用浮标至少要维持在2000个以上,每个Argo浮标每次发送15条信息,发送的时间间隔为一天、四天、十天不等。一年一个Argo浮标总共发送约2000条数据。海洋涡旋数据集中记录了涡心的经玮度坐标、儒略日和涡旋的边界数组等信息,Argo浮标数据集中记录了浮标的元数据、技术数据、轨迹数据、剖面数据,本发明中用到的主要数据包括经玮度位置、儒略日(Argo浮标发出数据的日期)、浮标周期数和浮标号等信息,数据量庞大。海洋涡旋数据的计算一般多以MATLAB为计算工具来生成数据集。按照全球每年56000多个涡旋来计算,使用MATLAB已经不能够以较高的效率来完成这项工作,配置低的计算机在计算过程中会因为内存不足停止计算,配置高的计算机则需要几天的时间完成一年涡旋和Argo浮标数据交集的提取工作。每次数据的调整均要耗费很大的时间成本。为了全面分析中尺度涡旋的分布情况、运动轨迹和内部结构特征,全球范围无疑是最理想的范围,但涡旋和Argo浮标的总数据量级达到千亿,CPU已经不能满足我们的需要。GPU并行计算擅长做中尺度涡旋和Argo浮标数据交集提取等计算公式不复杂但数据量大的数值计算。我们需要一种能够快速进行并行计算的工具一一CUDA。
[0003]CUDA编程模型将CPU作为主机(host),GPU作为协处理器或者设备(device),在一个系统中可以存在一个主机和若干个设备。能够使用GPU计算的程序必须具有以下特点:需要处理的数据量比较大,数据以数组或矩阵形式有序存储,并且对这些数据要进行的处理方式基本相同,各个数据之间的依赖性或者说耦合很小。本发明所研究的处理海洋涡旋和Argo浮标相交数据集算法具备以上所有要求,适合用CUDA进行加速。
[0004]在CUDA模型中,CPU与GPU协同工作,各司其职。CPU/GPU异构并行计算在处理过程中,CPU负责进行逻辑性强的事物处理和串行计算,GPU则专注于执行高度线程化的并行处理任务。CPU、GPU各自拥有相互独立的存储器地址空间:主机端的内存和设备端的显存。为了满足计算的需要,CPU的设计目标是使执行单元能够以很低的延迟获得数据和指令,因此采用了复杂的控制逻辑和分支预测,以及大量的缓存来提高执行效率;而GHJ必须在有限的面积上实现很强的计算能力和很高的存储器带宽,因此需要大量执行单元来运行更多相对简单的线程,在当前线程等待数据时就切换到另一个处于就绪状态等待计算的线程。简而言之,CPU对延迟将更敏感,而GPU则侧重于提高整体的数据吞吐量。CPU和GPU设计目标的不同决定了两者在架构和性能上的巨大差异,CPU、GPU异构模式就能充分调用两方面的优势,使其共同提高数据计算能力。本文将对CUDA并行计算技术的应用进行研究,重点挖掘其在处理中尺度涡旋和Argo浮标相交数据集中的优势。

【发明内容】

[0005]本发明可以加速提取海洋涡旋和Argo浮标相交数据集。在读取涡旋数据和Argo浮标数据后对数据的组织结构进行优化,使其适合CUDA的线程分配。CPU与GPU之间的二维指针数组的传输和内存分配使用了二维指针拷贝。为了减少数据传输的时间,缓解显存的压力,CPU必须尽可能少的向GPU中传递数据,本发明只拷贝需要在GPU中进行运算的值。在内核函数中计算海洋涡旋和Argo浮标相交数据集时优化算法,以提高计算效率。得益于合理的线程分配,只需要记录匹配成功的涡旋和Argo浮标数据的指针地址,将记录传回CPU中后,查找相应指针的值,最后将所有涡旋数据集整理汇总到文件中。
[0006]为了实现上述目标,主要技术方案包括:
1、编辑已有的涡旋数据和Argo浮标数据集的组织形式。读取并处理已有的涡旋数据和Argo浮标数据,将其存储成二维结构体指针数组。首先,对海洋涡旋数据进行分析,将一条涡旋的所有属性进行排列,并使用标识符标识每一条涡旋,还要记录该涡旋的轨迹,以便了解其运动规律。在处理涡旋数据集时,应注意需在CUDA的环境中进行处理,在后期可以方便与提取涡旋浮标交集数据的过程进行串行计算。处理Argo浮标数据集时,不以Argo浮标的浮标号数组划分,而是以Argo浮标发出数据的日期(儒略日)进行数组的划分。涡旋和浮标数据先通过儒略日进行匹配筛选适合的Argo浮标比在遍历每条浮标数据过程中匹配其儒略日在效率上可以提高上千倍。
[0007]2、合理分配GPU内存。为CUDA的host端和device端分配内存,并将需要计算的数值从host端传入device端。在CUDA建构下,内存分为两大类:系统内存和设备内存。由于GPU对设备内存的读写速度大于对系统内存的读写速度,因此在调用用于计算的的核函数之前,不仅需要为数据划分系统内存,还要在设备内存上划分相应的内存来供线程进行读写操作。在分配内存和内存间数据传输时,需要进行二维指针拷贝,拷贝分为两步:I)将主机端矩阵元素拷贝到缓存中;2)将设备端矩阵行向量指针指向缓存中各行向量指针分配的空间。在⑶DA中对涡旋数据集进行线程分配,CUDA线程分两个层次,网格Grid和块Block,一个网格包含多个块,一个块内部嵌套包含多个线程。为了减少运行时间,我们需要尽可能少的在CPU与GPU之间进行传值。所以,存储涡旋数据和Argo浮标数据时需要较强的逻辑性,我们考虑将每一个涡旋划分成一个线程块,每个涡旋每天的数据划分成一个线程。在内核函数中使用计数器和原子操作,当多个线程同时访问全局存储器的同一位置时,保证每个线程能够实现对共享可写数据的互斥操作;在一个操作完成之前,其他任何线程都无法访问此地址,所有的线程一旦找到匹配的涡旋和Argo浮标数据时,都要排队进行计数并记录涡旋和Argo浮标的。
[0008]3、优化提取涡旋与Argo浮标数据交集算法。计算涡旋和Argo浮标数据交集,得到全球海洋中尺度祸旋最大似转流速度内的Argo浮标数据,计算方法是逐个匹配Argo浮标位置与涡旋边界数组的关系,首先使用平面包围盒算法检测Argo浮标点是否在涡旋外包围矩形内,然后根据PNPoly算法判断Argo浮标是否在涡旋边界内,记录每条匹配的Argo浮标号和涡旋序号。该浮标位于涡旋内部,其记录的数据能够反映涡旋的物理属性特征。
[0009]4、整合涡旋数据和Argo浮标数据相交数据集。在存储过程中,根据匹配的涡旋和Argo浮标数据存储地址索引查找其全部信息,将信息存储到.mat类型的元胞数组中。以单个涡旋为第一层元胞,以涡旋的儒略日为第二层元胞,以该涡旋该儒略日内涡旋内的Argo浮标数据为第三层元胞。涡旋的所有相关信息就整合到一个数据集中,在分析涡旋的结构特征和运动轨迹时方便快捷的进行信息的调用和提取。
[0010]本发明的有益效果在于:该算法优化了海洋涡旋和Argo浮标数据组织形式,成倍的加速了海洋涡旋和Argo浮标相交数据集的提取,降低了时间成本。
【附图说明】
[0011 ]图1基于CUDA并行加速海洋涡旋Argo浮标相交数据集快速提取算法流程图图2 GPU线程资源分配图
图3 PNPoly算法应用于计算涡旋和Argo浮标相交数据集示意图图4涡旋数据集示意图图5 1999-2015涡旋内Argo浮标剖面个数图图6 1999-2015反气旋涡内Argo浮标剖面个数图。
【具体实施方式】
[0012]本发明基于⑶DA框架使用C++语言实现了加速提取海洋涡旋和Argo浮标数据集。由于全球大洋中中尺度涡旋大量存在,为了提高研究价值,我们目前只研究存活时间超过15天的涡旋。实现该算法的计算机基本参数有:显卡:NVIDIA GeForce GTX 550 Ti 1GB;系统安装内存:4GB ;开发环境:Visual Stud1 2010 ;CUDA版本:7.5实现该算法的主要步骤如图1所示,可以描述为:
1、读取已有的涡旋数据和Argo浮标数据,并将其存储成二维结构体指针数组。2、为CUDA的host端和device端分配内存,并将需要计算的数值从host端拷贝到device端。在进行内存分配和数据传输时,需要进行二维指针拷贝,拷贝分为两步:I)将主机端矩阵元素拷贝到缓存中;2)将设备端矩阵行向量指针指向缓存中各行向量指针分配的空间。3、根据硬件条件和涡旋数据结构进行线程分配。为了优化程序,减少运行时间,我们需要尽可能减少在CPU与GPU之间进行传值。所以,存储涡旋数据和Argo浮标数据时需要较强的逻辑性,我们考虑将每一个涡旋划分成一个线程块,将每个涡旋的单天数据划分成一个线程,如图2所示。传值时,将涡心的经度、玮度、儒略日、边界数组,Argo浮标的经度、玮度、儒略日,以及一个用来记录结果的空指针从CPU传入GP14、在求涡旋和Argo浮标数据交集时,如图3所示,首先取涡旋边界数组中横、纵坐标的最大值和最小值,构造矩形,判断Argo浮标点是否在矩形内。如果在矩形内,则通过Argo浮标点水平画条射线,根据射线穿过涡旋边界多边形的相交次数判断Argo浮标是否在涡旋内,如果为穿越次数为奇数,表示Argo浮标在涡旋内部,记录当前祸旋和Argo浮标的编号。5、将计算结果从device端拷贝到host端。内核函数计算结束时,将匹配的涡旋和Argo浮标在存储空间的位置传回CPU端。6、将匹配的涡旋和Argo浮标数据存储到文件中。根据从GPU传回的匹配的涡旋和Argo浮标存储空间的位置找到相应的涡旋和Argo浮标所有信息,例如Argo浮标的浮标号等,组织形式如图4所示,记录到.mat类型的文件中。7、释放申请的指针,关闭打开的文件。
[0013]本发明利用GPU高并行计算性能,结合中尺度涡旋的数据组织形式进行科学的线程分配,提高了数据集生成效率。在相同性能的计算机上进行对比试验,使用CUDA加速提取海洋涡旋和Argo浮标相交数据集的方法,比一般使用MATLAB进行计算的方法在结果上数据存储形式更科学,速度上提升了50倍左右。图5是我们计算得到全球范围内1999-2015涡旋内Argo浮标剖面个数图,图6是全球范围内1999-2015反气旋涡内Argo浮标剖面个数图,另夕卜,还计算了每一年气旋涡和反气旋涡的数据集,以便进行涡旋特征提取和数据挖掘。
【主权项】
1.基于CUDA的海洋涡旋及Argo浮标交集数据快速提取算法,其特征在于,其所述结合海洋涡旋和Argo浮标的数据特征优化GPU并行计算技术的方法包括以下步骤:(I)在CPU端对涡旋数据和Argo浮标数据进行整合,处理成适合进行线程分配的形式;(2)在GPU端分配计算资源,在CUDA平台上分配线程时考虑海洋涡旋的数据组织形式;(3)在内核函数中,对涡旋数据集和Argo浮标数据集进行匹配计算,并通过原子操作和计数器记录相交的海洋涡旋和Argo浮标数据,减少CPU与GPU之间的数据传输量;(4)将匹配成功的数据集拷贝到CPU端,并优化存储形式。2.根据权利要求1所述的基于CUDA的海洋涡旋和Argo浮标相交数据集快速提取算法,其特征在于,所述步骤(2)中,涡旋信息在读取时进行筛选和重新排列,存储为二维结构体指针;根据涡旋的涡心和儒略日信息分组涡旋的方式在线程分配时就能发挥其逻辑上的优势;传值时,将涡旋的经度、玮度、儒略日、半径,Argo浮标的经度、玮度、儒略日,以及一个用来记录结果的空指针从CPU端拷贝到GPU端,其他大量的属性信息保存在CPU端的数组中,不参与拷贝传值。3.根据权利要求1所述的基于CUDA的海洋涡旋和Argo浮标相交数据集快速提取算法,其特征在于,所述步骤(3)中,计算涡旋和Argo浮标数据交集,得到全球海洋中中尺度涡旋最大地转流速度范围内的Argo浮标数据,计算方法是逐个匹配Argo浮标位置与涡旋边界数组的关系,首先使用平面包围盒算法检测Argo浮标点是否在涡旋外包围矩形内,然后根据PNPoly算法判断Argo浮标是否在涡旋边界内,记录每组匹配的Argo浮标号和涡旋序号;为了减少数据传输的时间代价,提高生成数据集的效率,本发明引入了原子操作和计数器等操作;当线程搜索到涡旋半径范围内的Argo浮标时,停止进行排队,计数器自增,记录相交的海洋涡旋和Argo浮标数据序号,在排队时保证每个线程能够实现对共享可写数据的互斥操作。4.根据权利要求1所述的基于CUDA的海洋涡旋和Argo浮标相交数据集快速提取算法,其特征在于,所述步骤(4)中,根据GPU传回的海洋涡旋和Argo浮标相交数据序号从二维数组指针中取值,将信息存储到.mat类型的元胞数组中;以单个涡旋为第一层元胞,以涡旋的儒略日为第二层元胞,以该涡旋该儒略日内涡旋内的Argo浮标数据为第三层元胞;将涡旋的所有相关信息整合到一个数据集中,为数据可视化和快速检索操作做好准备工作。
【文档编号】G06T1/20GK105894439SQ201610202090
【公开日】2016年8月24日
【申请日】2016年4月5日
【发明人】马纯永, 陈戈, 张玉, 李硕, 盖周恩, 高佳佳, 王维娜
【申请人】中国海洋大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1