CN115686784A - 一种基于多机多进程的地理网格金字塔并行构建方法 - Google Patents
一种基于多机多进程的地理网格金字塔并行构建方法 Download PDFInfo
- Publication number
- CN115686784A CN115686784A CN202211291628.2A CN202211291628A CN115686784A CN 115686784 A CN115686784 A CN 115686784A CN 202211291628 A CN202211291628 A CN 202211291628A CN 115686784 A CN115686784 A CN 115686784A
- Authority
- CN
- China
- Prior art keywords
- grid
- tile
- data
- slave
- level
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Transfer Between Computers (AREA)
Abstract
本发明涉及一种基于多机多进程的地理网格金字塔并行构建方法,包括如下步骤:步骤1、主进程将元数据和数据库配置相关信息进行合并之后使用组播的方式将属性信息发送到各个从进程中;步骤2、根据最大和最小层级切分瓦片数据;步骤3、主进程将瓦片元数据信息全量发送到指定的从进程中;步骤4、从进程的任务执行进度采用收集的方式,从进程接收分发的任务;步骤5、各个从进程循环执行数据校验;步骤6、各个从进程执行网格打码;步骤7、各个从进程执行网格数据入库;步骤8、各个从进程汇报任务状态:采用点对点的消息模型,实时向主进程汇报任务的处理状态和进度;步骤9、主进程收集从进程任务执行情况,等待全部进程结束。
Description
技术领域
本发明涉及导航定位领域,尤其是一种基于多机多进程的地理网格金字塔并行构建方法。
背景技术
随着我国自发展北斗系统的广泛应用,北斗数据日益成为重要的数据源输入之一。北斗网格是适用于北斗系统终端输出的一种编码格式,具有我国完全自主知识产权,采用经纬度剖分,具有边界不重叠、网格正交、经纬一致、与传统数据规格兼容性好等特点,且能够进行点面一体化表征的特点。
全球任一空间几何对象都能够被北斗网格集合覆盖,北斗网格在空间无缝无叠、层次递归,与高性能并行计算分而治之的原理高度匹配,具有天然的并行计算优势。网格的空间划分进行空间数据计算任务划分,实现海量空间数据的网格并行化调度和计算。
MPI(Message Passing Interface)是独立于语言的通信协议,MPI是一种进程级的并行方式,它支持分布式存储。MPI是基于消息传递的并行编程,它提供了语义丰富的消息通信机制,包括点对点、组播和多播模式。用户程序利用这些接口进行进程之间的数据移动、聚集、规约和同步,常见的编程模式为单程序多数据模型(Single InstructionMultiple Data,SIMD)和主从模式。
一个进程可以通过指定另一个进程的rank序号以及一个独一无二的消息标签(tag)来发送消息给另一个进程。接受者可以发送一个接收特定标签标记的消息的请求(或者也可以完全不管标签,接收任何消息),然后依次处理接收到的数据。类似这样的涉及一个发送者以及一个接受者的通信被称作点对点(point-to-point)通信。
当然在很多情况下,某个进程可能需要跟所有其他进程通信。比如主进程想发一个广播给所有的从进程。在这种情况下,手动去写一个个进程点对点的信息传递就显得很笨拙。而且事实上这样会导致网络利用率低下。MPI有专门的接口来帮我们处理这类所有进程间的集体性(collective)通信。
在集群系统中,集群的各节点之间可以采用MPI编程模型进行程序设计,每个节点都有自己的内存,可以对本地的指令和数据直接进行访问,各节点之间通过互联网络进行消息传递,这样设计具有很好的可移植性,完备的异步通信功能,较强的可扩展性等优点。
OpenMP是一套支持跨平台共享内存方式的多线程并发的编程API,使用C,C++和Fortran语言,可以在大多数的处理器体系和操作系统中运行。OpenMP是一个跨平台的多线程实现,主线程(顺序的执行指令)生成一系列的子线程,并将任务划分给这些子线程进行执行。这些子线程并行的运行,由运行时环境将线程分配给不同的处理器。
OpenMP是基于共享内存架构的并行计算框架,更适合本地单台计算机的运算,由于使用线程间共享内存的方式协调并行计算,它在多核/多CPU结构上的效率很高、内存开销小、编程语句简洁直观。
MPI+OpenMP分布式混合并行框架能够很好的解决集群和单机上遇到的并行问题,将任务划分成小任务,有MPI负责粗粒度的任务并行,将多个任务在多节点之间进行分发和共享。OpenMP负责细粒度的计算并行,每个进程获取小任务之后,再将任务分发成微任务,启动多个开销更小的子线程去并行处理,最大限度地将任务细分,资源利用最大化。
北斗剖分网格码是以GeoSOT为基础发展的适用于北斗系统终端输出的一种编码格式,与北斗系统的精度相适应,与北斗终端芯片的能力相匹配,作为以北斗系统为核心的PNT(定位、导航、授时)体系的一种基本输出,为地球空间万事万物的离散化位置赋值,其核心是将地球完整剖分成32级、无缝嵌套、最小尺度为1.5cm2的网格群,同时为每个网格赋予一个全球唯一的整型数编码。
GeoSOT网格具有我国完全自主知识产权,采用经纬度剖分,具有边界不重叠、网格正交、经纬一致、与传统数据规格兼容性好等特点,且能够进行点面一体化表征。GeoSOT将地球表面空间进行3次拓展,即将纬度(-90°~90°)和经度(-180°~180°)都拓展为(-256°~256°),将1°拓展为64′,将1′拓展为64″,实现等度、等分、等秒剖分。
在平面网格的基础上,通过高度维扩展,将上至地球外围52万km、下至近地心的地球全域空间剖分成数以兆亿个大到全球网格、小到厘米级网格的32级网格体元,网格形状相似、既无缝隙也不重叠,构成地球全域空间剖分网格基准框架。
北斗剖分网格码表征要素模型,用网格表征点、线、面要素时,要素与网格单元的数量比例不定。如可用一个网格单元表示一个点对象,用网格单元集合表征线、面对象。如图1所示,为北斗网格金字塔模型;
金字塔模型常用于大规模遥感影像可视化应用之上,采用不同分辨率的数据来提高渲染速度,从而在网络环境下实现大规模数据共享、服务和辅助决策支持。网格金字塔借鉴影像金字塔的思想,将全球矢量数据按照不同的层级进行切分成大小相同的瓦片,并将层级、行和列数据保存在数据库中,通过构建多key值索引,能够快速定位选中瓦片的网格信息。
如图2所示,随着层级的增高,瓦片数量变大,计算量也会变大,从而导致传统的串行计算方式远不能满足性能要求,因此,需要发挥多机多CPU的资源优势,将大量的网格瓦片分而治之,分配给不同的CPU核心进行网格计算,从而提升应用的整体性能。
分布式数据库是用计算机网络将物理上分散的多个数据库单元连接起来组成的一个逻辑上统一的数据库。每个被连接起来的数据库单元称为站点或节点。
目前,大数据领域常用的并行框架除了MPI之外,还有擅长离线计算的Hadoop和内存计算框架Spark。Hadoop是离线计算,基于磁盘,每次运算之后的结果需要存储在HDFS里面,下次再次使用时,仍需要从磁盘中读出进行计算,磁盘IO开销比较大;Spark适用于多次迭代的计算模型,诸如各种机器学习算法,由于内存的限制使得Spark处理数据规模远小于Hadoop。
基于并行框架的北斗网格并行计算目前还没有成型的应用,之所以选用MPI作为底层的并行框架,主要是对比了常用的并行框架,MPI更加轻量化,数据存储和数据计算是分开的,能够选用更加符合应用场景的存储组件。同时,使用MPI自由度更高,能够根据不同的应用场景来定制化数据分割算法,最大可能保证任务的负载匀衡。
同时,针对北斗网格构建的方法最常用的方式有两种。其一,将整个区域按照固定层级的进行打码入库,这种方法适合于小范围区域,遇到较大范围区域,不仅计算复杂而且产出的数据量较大,网络传输代价过高,不适合与客户端的数据交互。其二,根据客户端传入的经纬度坐标实时进行打码,再通过网络传输到客户端,该过程需要不断的进行复杂、重复的网格计算,遇到较大范围的区域仍会遇到网络IO的瓶颈问题,无法满足高并发场景的性能需要。
现有方案的缺点:
1、Hadoop基于磁盘,每一次计算需要发生多次磁盘IO,磁盘的读写速度远远低于内存、缓存的读写速度,导致整个计算的性能瓶颈集中在存储,因此不适用于多次迭代计算的场景。
2、Hadoop计算算子单一,只有Map和Reduce两种接口,使用自由度太低,无法满足复杂场景的需求,需要为了适配Hadoop原生算子来修改数据格式或者底层的算法逻辑。
3、Hadoop需要基于HDFS存储,组件过于臃肿,部署应用困难,很难适用于小范围场景。
4、Spark相比于Hadoop更加轻量,但由于是基于内存的计算框架,不适合数据处理规模过大的应用。同时,代码自由度较低,很难保证任务的负载均衡。
5、无论是按照整个区域提前打码入库还是按照客户端请求实时打码计算,均无法兼顾计算性能和网络IO,从而导致整体应用的性能下降,影响与客户端的交互效果。
发明内容
本发明在MPI+OpenMP分布式混合并行计算框架之上,结合分布式存储和分布式数据库,完成北斗网格金字塔的构建工作,充分发挥多机多核心硬件优势,提高北斗网格金字塔构建性能。本发明围绕北斗网格码数据存储和检索方面进行创新和实践,首先,兼容计算和网络IO的北斗网格金字塔模型,将数据分而治之,结合分布式数据存储组件,提高网格打码入库和检索的性能。其次,基于自由度更高,更轻量的MPI+OpenMP分布式混合计算框架,发挥多机多CPU的资源优势,采用主从动态并行模式,自定义数据分片格式和存储方式,将北斗网格数据更加均匀地划分,从而进一步提升大区域、大范围下北斗网格的构建和计算性能。
本发明的技术方案为:一种基于多机多进程的地理网格金字塔并行构建方法,包括如下步骤:
步骤1、主进程将元数据和数据库配置相关信息进行合并之后使用组播的方式将属性信息发送到各个从进程中;
步骤2、根据最大和最小层级切分瓦片数据;
步骤3、主进程将瓦片信息全量发送到指定的从进程中;
步骤4、从进程的任务执行进度采用收集的方式,从进程接收分发的任务;
步骤5、各个从进程循环执行数据校验,根据接收到的level,x,y获取网格瓦片的经纬度坐标,判断是否与待获取区域相交,如果不相交则抛弃该网格瓦片;
步骤6、各个从进程执行网格打码,根据网格瓦片的经纬度坐标创建Polygon格式的geometry对象,调用网格打码函数,完成该网格瓦片的打码操作;
步骤7、各个从进程执行网格数据入库:将打码之后的结果保存到分布式数据库中;
步骤8、各个从进程汇报任务状态:采用点对点的消息模型,实时向主进程汇报任务的处理状态和进度;
步骤9、主进程收集从进程任务执行情况,等待全部进程结束。
进一步的,所述步骤3中,主进程将瓦片信息全量发送到指定的从进程中,是采用MPI非阻塞异步通信的方式,当主进程向第一从进程发送任务详情时,不需要等待第一从进程将数据接收成功就可以直接返回,发送和接收的工作有MPI系统后台执行,继续向第二从进程发送任务,以此类推直至任务全部发送完成。
进一步的,在关系型数据库中定义一个复合类型gridcell,用于表示北斗剖分中的一个2D/3D单元网格,北斗剖分网格分为2D网格和3D网格,其中2D网格由纬度、经度分别进行二进制剖分,然后通过莫顿编码合并成一维二进制编码,网格层级从1-32级,每级用2个二进制位表达,用64位无符号长整型可存储32级二维编码,Code表示经纬度剖分码,Zcode表示高程剖分码,Level表示网格层级,还包括一个dim位用于区分2D或3D数据。
进一步的,在关系型数据库中定义一个复合类型geomgrids,是北斗剖分网格的集合类型,由一个或多个层级相同或不同的单元网格组成,用于表征非点几何要素,实现Geometry对象与GeomGrids对象的一一对应。
进一步的,一个geomgrids中存在不同层级的单元网格,层级最高的网格单元的层级,为geomgrids对象的层级,称为detailLevel,Geomgrids支持2D/3D的网格单元。
进一步的,北斗网格金字塔并行构建的过程具体如下,单进程在创建网格金字塔的过程中,会将固定层级level下的全球数据分成大小相等的多个正方形,在二维坐标下获取正方形的x和y的位置(minX,minY,maxX,maxY),根据level、x和y就可以获取该正方形的经纬度坐标,经过网格生成函数计算出该瓦片的网格集合geomgrids,每个geomgrids集合包含多个gridcell,每个gridcell之间是互不干涉,互相独立的,单进程启动多个子线程,每个子线程是共享该瓦片的网格集合数据,在不影响其他网格单元的基础上,自主完成网格单元的计算任务。
有益效果:
1、针对背景技术提到的缺点1-4,本发明采用MPI+OpenMP分布式混合并行计算框架,MPI+OpenMP是一组C/C++的计算库,本发明相比Hadoop和Spark更加轻量,部署简单,便于上手开发;MPI定义了点对点、组播和多播等数据传输模式,数据的划分和分片需要用户根据具体的业务需要进行划分,自由度更高,更便于定制化负载均衡的业务;同时,由于北斗网格在空间无缝无叠、层次递归,具有天然的并行优势,非常适合MPI的多种数据传输模型。OpenMP更加适合于单机并行计算,能够利用多核多线程的优势,完成更加细粒度的并行任务。
2、针对背景技术部分提到的缺点5,本发明通过北斗网格金字塔来兼顾计算性能和网络IO,从而提升整个服务交互的性能。北斗网格金字塔会提前将大范围区域根据不同的层级进行瓦片切分,再将切分好的数据进行打码入库。从而保证金字塔的高层级->待打码区域大->大网格覆盖->打码数据量小,金字塔的低层级->待打码区域小->小网格覆盖->打码数据量大。依赖分布式数据库,将网格瓦片数据创建GIN索引,提升查询效率。将目前复杂的“先请求、后计算、再服务”的串行、有源服务模式,变为简单的“接收+匹配”的并行、无源服务模式,提升用户体验。
3、传统方案中,空间数据网格化无法兼顾计算和IO的性能,从而导致在与客户端交互的过程中性能不佳。北斗网格金字塔发挥高性能计算的能力,将空间数据按照瓦片划分的方式将打码结果存储到分布式数据库中,不仅提升打码和索引速度,而且保障高并发环境下的稳定运行。
4、MPI+OpenMP相对于Hadoop和Spark并行框架更加轻量,自由度更高,可以根据不同的业务场景来划分数据,均匀分配任务;MPI负责粗粒度的任务并行,OpenMP负责细粒度的计算并行,将大任务更细粒度的划分成微小任务;采用高效的全局通信聚合算法减少通信次数,降低通信开销,有助于加快北斗网格金字塔算法的构建效率。
附图说明
图1:北斗网格金字塔示意图;
图2:分布式数据库;
图3:多机多进程并行执行的过程中,各个进程打码之后的网格会根据设定好的规则有序的插入到对应的数据库节点中;
图4:gridcell数据类型的结构;
图5:Geomgrids存储结构;
图6:Cells内部结构(2D);
图7:Cells内部结构(3D);
图8:MPI非阻塞异步通信的示意图;
图9:北斗网格金字塔并行构建的主要流程;
图10:本发明方法的加速比。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅为本发明的一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域的普通技术人员在不付出创造性劳动的前提下所获得的所有其他实施例,都属于本发明的保护范围。
根据本发明的实施例,提出一种基于多机多进程的地理网格金字塔并行构建方法,包括如下步骤:
步骤1、主进程将元数据和数据库配置相关信息进行合并之后使用组播的方式将属性信息发送到各个从进程中;
步骤2、根据最大和最小层级切分瓦片数据;
步骤3、主进程将瓦片信息全量发送到指定的从进程中;
步骤4、从进程的任务执行进度采用收集的方式,从进程接收分发的任务;
步骤5、各个从进程循环执行数据校验,根据接收到的level,x,y获取网格瓦片的经纬度坐标,判断是否与待获取区域相交,如果不相交则抛弃该网格瓦片;
步骤6、各个从进程执行网格打码,根据网格瓦片的经纬度坐标创建Polygon格式的geometry对象,调用网格打码函数,完成该瓦片的网格化构建;
步骤7、各个从进程执行网格数据入库:将打码之后的结果保存到分布式数据库中;
步骤8、各个从进程汇报任务状态:采用点对点的消息模型,实时向主进程汇报任务的处理状态和进度;
步骤9、主进程收集从进程任务执行情况,等待全部进程结束。
下面进行详细说明。
分布式数据库的基本特点包括:物理分布性、逻辑整体性和站点自治性。物理分布式性:数据库中的数据不是存储在同一场地。更确切地讲,不存储在同一计算机的存储设备上。逻辑整体性:用户可以在任何一个场地执行全局应用,就好像那些数据是存储在同一台计算机上;站点自治性:每个单一的数据库单元能够自主处理本节点上的任意读写和计算请求。
北斗网格金字塔构建结果需要插入到数据库中以供上层服务实时获取,因此,在解决计算性能瓶颈之后,入库性能将是影响整体应用性能的重要因素,所以,采用分布式数据库,各个数据库单元自治,将入库IO压力让多个节点单元进行分担,从而减少IO瓶颈,加速整体计算性能。
如图3所示,多机多进程并行执行的过程中,各个进程打码之后的网格会根据设定好的规则有序的插入到对应的数据库节点中。本发明主要取网格瓦片level,x,y属性值中的x值,将x经过hash运算之后来分配对应的数据库节点,这样可以保证网格瓦片数据在各个数据库节点中分配均匀,同时也保障创建多key值索引之后的检索查询效率,减少多个查询结果的合并和节点之间的网络开销。
首先,本发明中gridcell数据类型定义如下:
在关系型数据库中定义一个复合类型gridcell,用于表示北斗剖分中的一个2D/3D单元网格。
(1)北斗剖分网格分为2D网格和3D网格。其中2D网格由纬度、经度分别进行二进制剖分,然后通过莫顿编码合并成一维二进制编码。网格层级从1-32级,每级用2个二进制位表达,用64位无符号长整型(unsigned Long)可存储32级二维编码;
(2)3D网格在2D网格的基础上,增加了高程剖分编码,高程剖分的范围也是1-32级,用1个二进制位表示一级剖分。用32位无符号整型(unsigned Int)可存储32级高程编码;
(3)层级范围在1-32,可用unsigned char存储层级;
(4)由于gridcell是兼容2D/3D,需要指定一个类型标志dim,区别二三维网格。
综上所述,gridcell数据类型的结构如图4所示。
结构中各个变量如表1:
表1
变量名 | 存储内容 | 类型 | 长度 |
Code | 经纬度剖分码 | Unsigned Long | 8字节 |
Zcode | 高程剖分码 | Unsigned int | 4字节 |
Level | 网格层级 | Unsigned Char | 1字节 |
Dim | 网格维度标识 | Bool | 1字节 |
本发明中geomgrids数据类型定义如下:
在关系型数据库中定义一个复合类型geomgrids,是北斗剖分网格的集合类型,由一个或多个层级相同或不同的单元网格组成。可用于表征非点几何要素,实现Geometry对象与GeomGrids对象的一一对应。
一个geomgrids中可能会存在不同层级的单元网格,层级最高的网格单元的层级,为geomgrids对象的层级,称为detailLevel。
Geomgrids支持2D/3D的网格单元,但不会同时支持2D和3D。要求网格单元要么全是2D、要么全是3D。在Geomgrids中也存在dim成员,存储维度信息。
Geomgrids存储结构如图5所示。结构中各个变量如下表2:
表2
变量名 | 存储内容 | 类型 | 长度 |
Size | Geomgrids对象自身长度 | Unsigned int | 4字节 |
detailLevel | 最大层级 | Unsigned Char | 1字节 |
Dim | 网格维度标识 | Bool | 1字节 |
Cells | 网格单元数组 | Char* | 变长 |
Cells为一个geomgrids对象中存储网格单元的偏移量。Cell的长度取决于网格单元的数量和网格单元的维度类型。2D/3D情况下存储结构有所差异,为了节省存储空间,当geomgrids为2D时,不存储网格单元的zcode值。
Cells内部结构(2D)如图6所示。
Cells内部结构(3D)如图7所示。
本发明中,北斗网格金字塔并行构建的过程具体如下。
北斗网格金字塔在WGS84地理坐标系统和墨卡托(Mercator)投影下,将地球二维化,在高层级我们只需要宏观的信息,使用较大网格(比如百公里网格)构建更为合适,在低层级我们需要更加微观的信息,使用较小网格(比如米级网格)构建能够更加清楚地表示小区域范围的内容。每一层级的网格瓦片向下一层级会分裂成4个大小相等的网格瓦片,以此类推,层级越小,切分的瓦片个数越多,网格表现的数据信息更加精细。
单进程在创建网格金字塔的过程中,会将固定层级level下的全球数据分成大小相等的多个正方形,在二维坐标下获取正方形的x和y的位置(minX,minY,maxX,maxY),根据level、x和y就可以获取该正方形的经纬度坐标,经过网格生成函数计算出该瓦片的网格集合geomgrids。
每个geomgrids集合包含多个gridcell,每个gridcell之间是互不干涉,互相独立的,单进程启动多个子线程(OpenMP计算框架),每个子线程是共享该瓦片的网格集合数据,在不影响其他网格单元的基础上,自主完成网格单元的计算任务。
由于不同层级下,瓦片切分数量不同,在多机多进程的过程中,不能仅根据层级进行分配任务,这样容易导致低层级的进程分配过多的瓦片,增加低层级进程的计算耗时,影响整体的计算效率。
本发明采用主从动态并行方案(MPI计算框架),主进程负责任务的分配、监控和数据整合,从进程负责主要的计算任务。主进程将所有网格瓦片打码计算分解成一系列的计算单元,将一至数个计算单元依次分配给各从进程,然后等待从进程报告计算的完成,当一个从进程完成了所分配的计算后,从剩余的计算单元中分配新的计算任务给它,如果所有计算单元已分配完毕,则通知完成计算的从进程退出。为了有避免在主进程中形成通信、内存容量方面的瓶颈,主进程只发布用于控制计算的少量参数,将数据计算和结果分布存储在各从进程中。
根据瓦片切分规则,主进程负责将数据从高层级到低层级切分的瓦片数据的level,x,y保存到一维数组中,一维数组的格式如下表3所示。其中,n表示网格瓦片数。
表3
level<sub>0</sub> | x<sub>0</sub> | y<sub>0</sub> | level<sub>1</sub> | x<sub>1</sub> | y<sub>1</sub> | ... | level<sub>n</sub> | x<sub>n</sub> | y<sub>n</sub> |
假设进程总数为m,瓦片数为n,则负责计算的从进程数为m-1,进程号为P1到Pm-1,则从进程分配的任务数Pi定义如下:
这种任务分配的方式好处在于,能够最大可能的保证任务的均匀分配,前m-2个进程任务是相等的,m-1进程比前面的进程分配的任务数不会相差m-1个。进程个数相比任务数来说可以忽略不计。
为了加快主进程向从进程任务分配的效率,防止主进程成为算法的性能瓶颈。本发明采用点对点非阻塞式异步通信方式,让通信和计算重叠进行,异步分发各自进程的待处理上下区间,再由独立进程根据区间范围分别计算各自的任务详情。当主进程向从进程1发送任务详情时,不需要等待进程1将数据接收成功就可以直接返回(发送和接收的工作有MPI系统后台执行),继续向进程2发送任务,以此类推直至任务全部发送完成。非阻塞异步的方式能够加快任务的分发速度。图8为MPI非阻塞异步通信的示意图,主进程在任务发送启动之后,就可以继续执行其他的计算任务,无需等待所有从进程将数据接收完毕。
同时,MPI进程之间的通信开销很大程度地限制了并行效率,相比本地机器的CPU寄存器、Cache、内存,MPI远程通信的效率最低,因此为了减少网络通信的开销,本发明将元数据和数据库配置等相关信息进行合并之后使用组播的方式(MPI_Bcast)将属性信息发送到各个从进程中;将瓦片信息采用三个32位无符号整形数据保存,并全量发送到指定的从进程中;从进程的任务执行进度采用收集的方式(MPI_Gather)减少了点对点阻塞通信的次数,减少网络开销,提升算法整体性能。
图9为北斗网格金字塔并行构建的主要流程,其中,主进程负责任务的汇总、分发和状态监控,从进程负责网格打码和入库操作。
从进程接收分发的任务之后,循环执行数据校验、网格打码、网格数据入库和汇报任务状态的操作。
(1)数据校验:根据接收到的level,x,y获取网格瓦片的经纬度坐标,判断是否与待获取区域相交,如果不相交则抛弃该网格瓦片。
(2)网格打码:根据网格瓦片的经纬度坐标创建Polygon格式的geometry对象,调用网格打码函数,完成该网格瓦片的打码操作。
(3)网格数据入库:将打码之后的结果保存到分布式数据库中。
(4)汇报任务状态:采用点对点的消息模型,实时向主进程汇报任务的处理状态和进度。并行算法常从并行加速比和并行算法效率两方面来分析并行计算的能力。
并行加速比公式:SP=TS/TP;其中,TS为串行算法在最优情况下的耗时,TP为并行算法在最坏情况下的耗时。
并行算法效率公式:EP=SP/P;其中,SP加速比,P为进程个数。
本发明针对以上两方面,分别统计串行(单进程)到32个进程的算法并行能力,如下表和下表4所示。
表4
进程数 | 1 | 2 | 4 | 8 | 16 | 32 |
耗时(s) | 1755 | 848 | 442 | 243 | 139 | 77 |
加速比 | 1.00 | 2.07 | 3.97 | 7.22 | 12.63 | 22.79 |
并行效率 | 1 | 1.03 | 0.99 | 0.90 | 0.79 | 0.71 |
由上表4和图10可知,随着进程数的增大,耗时逐渐减少,加速比逐渐升高,并行效率逐渐减少。根据Amdahl定律,对于同样规模的数据量,由于网络、存储等瓶颈,加速比会随着节点核心的增大逐渐趋于平稳,类似抛物线形式。不过,Gustafson定律在Amdahl定律基础上又指出随着数据规模的增大,加速比会随着处理器核心数成比例的线性增长,串行部分不再成为整体算法的瓶颈。因此,多机多进程北斗金字塔构建算法结合分布式存储、分布式说数据库在较大规模的场景中仍能发挥至关重要的作用。
尽管上面对本发明说明性的具体实施方式进行了描述,以便于本技术领域的技术人员理解本发明,且应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
Claims (6)
1.一种基于多机多进程的地理网格金字塔并行构建方法,其特征在于,包括如下步骤:
步骤1、主进程将元数据和数据库配置相关信息进行合并之后使用组播的方式将属性信息发送到各个从进程中;
步骤2、根据最大和最小层级切分瓦片数据;
步骤3、主进程将瓦片信息全量发送到指定的从进程中;
步骤4、从进程的任务执行进度采用收集的方式,从进程接收分发的任务;
步骤5、各个从进程循环执行数据校验,根据接收到的level,x,y获取网格瓦片的经纬度坐标,判断是否与待获取区域相交,如果不相交则抛弃该网格瓦片;
步骤6、各个从进程执行网格打码,根据网格瓦片的经纬度坐标创建Polygon格式的geometry对象,调用网格打码函数,完成该瓦片的网格化构建。
步骤7、各个从进程执行网格数据入库:将打码之后的结果保存到分布式数据库中;
步骤8、各个从进程汇报任务状态:采用点对点的消息模型,实时向主进程汇报任务的处理状态和进度;
步骤9、主进程收集从进程任务执行情况,等待全部进程结束。
2.根据权利要求1所述的一种基于多机多进程的地理网格金字塔并行构建方法,其特征在于:所述步骤3中,主进程将瓦片信息全量发送到指定的从进程中,是采用MPI非阻塞异步通信的方式,当主进程向第一从进程发送任务详情时,不需要等待第一从进程将数据接收成功就可以直接返回,发送和接收的工作有MPI系统后台执行,继续向第二从进程发送任务,以此类推直至任务全部发送完成。
3.根据权利要求1所述的一种基于多机多进程的地理网格金字塔并行构建方法,其特征在于:在关系型数据库中定义一个复合类型gridcell,用于表示北斗剖分中的一个2D/3D单元网格,北斗剖分网格分为2D网格和3D网格,其中2D网格由纬度、经度分别进行二进制剖分,然后通过莫顿编码合并成一维二进制编码,网格层级从1-32级,每级用2个二进制位表达,用64位无符号长整型可存储32级二维编码,Code表示经纬度剖分码,Zcode表示高程剖分码,Level表示网格层级,还包括一个dim位用于区分2D或3D数据。
4.根据权利要求1所述的一种基于多机多进程的地理网格金字塔并行构建方法,其特征在于:在关系型数据库中定义一个复合类型geomgrids,是北斗剖分网格的集合类型,由一个或多个层级相同或不同的单元网格组成,用于表征非点几何要素,实现Geometry对象与GeomGrids对象的一一对应。
5.根据权利要求1所述的一种基于多机多进程的地理网格金字塔并行构建方法,其特征在于:一个geomgrids中存在不同层级的单元网格,层级最高的网格单元的层级,为geomgrids对象的层级,称为detailLevel,Geomgrids支持2D/3D的网格单元。
6.根据权利要求1所述的一种基于多机多进程的地理网格金字塔并行构建方法,其特征在于:北斗网格金字塔并行构建的过程具体如下,单进程在创建网格金字塔的过程中,会将固定层级level下的全球数据分成大小相等的多个正方形,在二维坐标下获取正方形的x和y的位置(minX,minY,maxX,maxY),根据level、x和y就可以获取该正方形的经纬度坐标,经过网格生成函数计算出该瓦片的网格集合geomgrids,每个geomgrids集合包含多个gridcell,每个gridcell之间是互不干涉,互相独立的,单进程启动多个子线程,每个子线程是共享该瓦片的网格集合数据,在不影响其他网格单元的基础上,自主完成网格单元的计算任务。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211291628.2A CN115686784A (zh) | 2022-10-20 | 2022-10-20 | 一种基于多机多进程的地理网格金字塔并行构建方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211291628.2A CN115686784A (zh) | 2022-10-20 | 2022-10-20 | 一种基于多机多进程的地理网格金字塔并行构建方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115686784A true CN115686784A (zh) | 2023-02-03 |
Family
ID=85065772
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211291628.2A Pending CN115686784A (zh) | 2022-10-20 | 2022-10-20 | 一种基于多机多进程的地理网格金字塔并行构建方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115686784A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116302579A (zh) * | 2023-05-25 | 2023-06-23 | 智成时空(西安)创新科技有限公司 | 面向Web端的时空大数据高效加载渲染方法及系统 |
-
2022
- 2022-10-20 CN CN202211291628.2A patent/CN115686784A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116302579A (zh) * | 2023-05-25 | 2023-06-23 | 智成时空(西安)创新科技有限公司 | 面向Web端的时空大数据高效加载渲染方法及系统 |
CN116302579B (zh) * | 2023-05-25 | 2023-08-04 | 智成时空(西安)创新科技有限公司 | 面向Web端的时空大数据高效加载渲染方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Ahrens et al. | Large-scale data visualization using parallel data streaming | |
Peterka et al. | Scalable parallel building blocks for custom data analysis | |
Li et al. | Map-Balance-Reduce: An improved parallel programming model for load balancing of MapReduce | |
CN106598743B (zh) | 一种基于mpi并行求信息系统属性约简的方法 | |
CN107329828A (zh) | 一种面向cpu/gpu异构集群的数据流编程方法和系统 | |
Grinberg et al. | Scalable parallel simulator for vehicular collision detection | |
CN110543663B (zh) | 一种面向粗粒度MPI+OpenMP混合并行的结构网格区域划分方法 | |
WO2018136963A1 (en) | Distributed and parallelized visualization framework | |
CN104794194A (zh) | 一种面向大规模多媒体检索的分布式异构并行计算系统 | |
CN102880510A (zh) | 基于多数据架构中心面向数据密集型应用的并行编程方法 | |
Zhang et al. | CudaGIS: report on the design and realization of a massive data parallel GIS on GPUs | |
Du et al. | Model parallelism optimization for distributed inference via decoupled CNN structure | |
Aji et al. | Haggis: turbocharge a MapReduce based spatial data warehousing system with GPU engine | |
Wu et al. | Using hybrid MPI and OpenMP programming to optimize communications in parallel loop self-scheduling schemes for multicore PC clusters | |
CN115686784A (zh) | 一种基于多机多进程的地理网格金字塔并行构建方法 | |
Jiang et al. | Swiftspatial: Spatial joins on modern hardware | |
Moreland et al. | Visualization for exascale: Portable performance is critical | |
Liu et al. | BSPCloud: A hybrid distributed-memory and shared-memory programming model | |
KR101013784B1 (ko) | Cpu와 gpu를 이용한 하이브리드 병렬 연속 충돌 검출 방법 | |
Gui et al. | High performance spatiotemporal visual analytics technologies and its applications in big socioeconomic data analysis | |
CN110415162B (zh) | 大数据中面向异构融合处理器的自适应图划分方法 | |
Borges et al. | A hybrid mpi+ openmp solution of the distributed cluster-based fish schooling simulator | |
Ajwani et al. | I/O-optimal distribution sweeping on private-cache chip multiprocessors | |
Berthold et al. | PAEAN: Portable and scalable runtime support for parallel Haskell dialects | |
Yin et al. | Heterogeneous Big Data Parallel Computing Optimization Model using MPI/OpenMP Hybrid and Sensor Networks |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |