基于二次任务划分策略的缓冲分析并行调度方法及装置与流程

文档序号:19786915发布日期:2020-01-24 13:42阅读:177来源:国知局
基于二次任务划分策略的缓冲分析并行调度方法及装置与流程

本发明涉及地理信息科学领域,特别是一种基于二次任务划分策略的缓冲分析并行调度方法及装置。



背景技术:

随着前所未有的地理大数据的增长,这些串行的生成缓冲区的方法已经满足不了地理大数据的需求。而且计算机硬件的提升,可以利用的处理核心的数量日益增加,使得地理大数据空间分析的并行计算也成为了一种可能。所以在地理大数据的空间分析的算法的研究上,大部分学者都将他们的努力转向了并行算法。并行的空间分析算法根据采取的并行策略大致可以分为算法并行和数据并行。基于算法并行的并行策略,其大多都对算法进行改进来适合相应的并行框架或者为了某种特定的需求(可视化、在线快速显示等需求)。虽然都达到了非常好的效果,但是对于算法的改进是一项比较复杂的工作,而且在所有应用领域并不一定会有较好的扩展性和稳定性。而且由于对基础算法进行了改进,所以那些一般的gis平台(qgis、arcgis、mapgis等)无法使用这些算法对地理大数据进行快速的处理。基于数据的并行策略大多都是在hadoop、spark并行框架或者是基于这些框架的扩展上执行,由于在这些框架上进行执行的,所以对于地理大数据的空间分析的加速非常有效。但是由于在在这些框架上执行,需要对数据进行转换,所以会出现数据偏移,当数据量愈大时,这种由于数据转换而引起的数据偏移的影响就越大,而且还会严重影响运行的速度。所以那些一般的gis平台(qgis、arcgis、mapgis等)使用这些算法来对地理大数据进行处理,也达不到一个较好的效果。通过我们的方法,便可以不改变这些一般的gis平台(qgis、arcgis、mapgis等)的算法和数据格式,并且具有非常好的适用性、有效性、稳定性和扩展性。在这些平台的数据格式和算法的基础上,基于计算强度格网的方法,首先进行第一次的任务区域划分来达到区域上的负载均衡,然后第二次划分对区域间相交的要素进行分配达到任务间实际的计算量的负载均衡,从而展示了一种可以在所有平台上有效执行的并行调度方法。



技术实现要素:

本发明主要是在不改变这些一般的gis平台(qgis、arcgis、mapgis等)的算法和数据格式的基础上,基于计算强度格网的方法,首先进行第一次的任务区域划分来达到区域上的负载均衡,然后第二次划分对区域间相交的要素进行分配达到任务间实际的计算量的负载均衡,从而展示了一种可以在所有平台上有效执行的并行调度方法。

本发明解决其技术问题,所采用的基于二次任务划分策略的缓冲分析并行调度方法,包括以下步骤:

步骤(1)、通过分析线及面要素生成缓冲区的主要的三个内在步骤:获取要素的几何信息、生成缓冲区和写入缓冲区结果,从而确定影响生成缓冲区的主要因子为要素的折点数;分别用折点数逐渐变化的线及面要素的数据集来测试线、面要素完成所述三个内在步骤的计算强度,用计算时间作为计算强度的指标,然后对所述三个内在步骤的折点数和计算时间的关系做回归分析,根据最优的拟合度来选择每个步骤的模型,得到这三个内在步骤的折点数和计算时间的关系的模型;分别把所述三个内在步骤的模型进行相加,得到表述一个要素缓冲区分析所花费的总时间与要素折点数的关系的总模型;

步骤(2)、根据步骤(1)所建立总模型建立计算强度格网,具体包含如下子步骤:

(21)首先在使用相应的gis平台的sdk查询到待要生成缓冲区的数据集的外包矩形(xmin、ymin、xmax、ymax),然后将外包矩形扩展为正方形;xmin、ymin、xmax、ymax分别表示外包矩形的四个顶点的最小横坐标、最小纵坐标、最大横坐标、最大纵坐标;

(22)然后对这个正方形的范围进行四叉树分级网格化,即第i级内容格网数为2i*2i,则第i级格网的边长为di=edge/2i,格网的存储是按照级别-行号-列号命名规则作为key值,将key值存入redis数据库中的;edge表示正方形的边长;

(23)接着步骤(1)所建立的总模型分别计算每个网格的计算强度,全部在格子内的要素就将对应的强度给这个网格,部分在格子的要素就按要素在格子内的折点数与该要素的总折点数的比例乘以对应要素的计算强度赋给这个网格;对于任一个网格:把这个网格所有包含或相交的要素进行计算强度的计算,然后累加起来便是这个网格的计算强度value,将value存入redis数据库中的;

步骤(3)、根据步骤(2)所建立的计算强度格网,开始进行第一次的划分,具体方法如下:

第一次的划分是对形成格网的区域进行划分,划分后的每个区域计算强度是相等的:首先对redis数据库中的key值进行遍历,据此使用redisclient.get<string>(key)方法找到相应的value值,对网格每行的计算强度进行累加,得到每行的计算强度的汇总wi,然后将wi进行汇总得到总的计算强度wtotal,将wtotal除以需要划分的并行任务的个数得到每个并行任务所需计算强度wtask;对格子的首行开始,按行往上遍历,如果当前行的计算强度大于wtask,那么就按wtask在当前行的计算强度的比例从当前行的底部来取得相应的范围,当前行余下的计算强度和范围作为下一个初始值进行下一行的遍历;如果当前行的计算强度小于wtask,那么就遍历下一行将下一行的计算强度进行累加再进行判断,直到这个值大于wtask,然后将多出wtask的计算强度在遍历到的当前行的计算强度的比例从当前行的底部来取得相应的范围,然后将这个累加过程中所包含的完整行的范围与这个范围合并作为这个任务的计算范围,余下的计算强度和范围作为下一个初始值进行下一行的遍历,按这种规则,遍历到最后一行,生成所有并行任务的计算范围;

步骤(4)、将步骤(3)所建立的并行任务的计算范围传递给各个并行的计算节点,完全包含在计算范围内的要素则通过从空间数据中查询到相应数据进行缓冲区分析,部分在计算范围内的要素则通过以下规则进行划分然后做缓冲区分析:在步骤(3)所建立的并行任务的计算范围的基础上进行第二次划分,通过分解与这些计算范围的边界相交的要素来实现并行任务之间的负载均衡,首先用相邻计算范围的直线做一个相交查询来得到同时都在这两个计算范围的要素feature1、feature2、feature3,...,featurek,k表示同时在这两个计算范围的要素的个数,然后按照步骤(1)所建立的总模型,分别计算出feature1、feature2、feature3,...,featurek的计算强度w1、w2、w3、...、wk,然后用feature1、feature2、feature3,...,featurek在子域n内的折点数与其总折点数的比例来计算其在子域n内的部分计算强度w12、w22、w32、wk2,将进行汇总得到在子域n内的总部分计算强度wsn;接着对w1、w2、w3、...、wk进行遍历,从第一个开始与wsn进行比较,如果小于wsn,则累加下一个,直到累加值大于等于wsn为止,将这个累加的所有要素分派给这个范围,剩下的要素分派给另一个范围;如果大于等于wsn,将这个要素分派给这个范围,剩下的要素分派给另一个范围;

步骤(5)、根据步骤(4)得到的所有并行缓冲区结果,将余下的缓冲区分析结果写入进第一个完成的缓冲区分析的结果中,至此所述缓冲分析并行调度方法结束。

进一步地,在本发明的基于二次任务划分策略的缓冲分析并行调度方法中,步骤(1)中,所述对所述三个内在步骤的折点数和计算时间的关系做回归分析具体为:用统计分析软件spss对所述三个内在步骤的折点数和计算时间的关系做回归分析。

进一步地,在本发明的基于二次任务划分策略的缓冲分析并行调度方法中,步骤(1)中,所述这三个内在步骤的折点数和计算时间的关系的模型,模型具体如下:

cfl(x)=a1x+b1x2+c1x3+d1(1)

ctl(x)=a3x+b3x2+c3x3+d3(3)

cfp(x)=a4x+b4x2+c4x3+d4(4)

ctp(x)=a6x+b6x2+c6x3+d6(6)

cfl,csl,ctl分别是线要素生成缓冲区的第一步、第二步和第三步的计算强度,cfp,csp,ctp分别是面要素生成缓冲区的第一步、第二步和第三步的计算强度,x是线或者面要素的折点数,a1,b1,c1,d1是获取线要素的几何信息这一步的三次方函数模型的系数,a2,b2是线要素生成缓冲区这一步的幂函数模型的系数,a3,b3,c3,d3是线要素缓冲区写入结果这一步的三次方函数模型的系数,a4,b4,c4,d4是获取面要素的几何信息这一步的三次方函数模型的系数,a5,b5是面要素生成缓冲区这一步的幂函数模型的系数,a6,b6,c6,d6是面要素缓冲区写入结果这一步的三次方函数模型的系数;

所述分别把所述三个内在步骤的模型进行相加,得到表述一个要素缓冲区分析所花费的总时间与要素折点数的关系的总模型,总模型具体如下:

式中,cl(x)表示折点数为x的线要素的缓冲区分析的总时间,cp(x)表示折点数为x的面要素的缓冲区分析的总时间。

进一步地,在本发明的基于二次任务划分策略的缓冲分析并行调度方法中,步骤(21)中,然后将外包矩形扩展为正方形扩展的方法为:以(xmin、ymin)为原点,以((xmax-xmin)、(ymax-ymin))中的最大值为正方形的边长edge。

进一步地,在本发明的基于二次任务划分策略的缓冲分析并行调度方法中,步骤(22)中,所述将key值存入redis数据库中具体是指:使用redisclient.set<string>(key,value)方法将key值存入redis数据库中。

进一步地,在本发明的基于二次任务划分策略的缓冲分析并行调度方法中,步骤(23)中,所述将value存入redis数据库中的具体是指:使用redisclient.set<string>(key,value)方法将value存入redis数据库中。

本发明为解决其技术问题,还提供了一种基于二次任务划分策略的缓冲分析并行调度装置,具备计算机存储介质,所述计算机存储介质存储有计算机可执行指令,用于实现上述任一项所述的基于二次任务划分策略的缓冲分析并行调度方法。

实施本发明的基于二次任务划分策略的缓冲分析并行调度方法及装置,具有以下有益效果:本发明已经过严格的测试和验证,通过本方法进行的缓冲区分析并行调度,可以不改变这些一般的gis平台(qgis、arcgis、mapgis等)的算法和数据格式,并且具有非常好的适用性、有效性、稳定性和扩展性,所述功能都全部实现,具有适用性、有效性、稳定性和扩展性的特点。

附图说明

下面将结合附图及实施例对本发明作进一步说明,附图中:

图1是本发明的基于二次任务划分策略的缓冲分析并行调度方法一实施例的流程图;

图2是一个网格的计算强度计算示意图;

图3是第一次划分的原理图;

图4是第二次划分的原理图。

具体实施方式

为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图详细说明本发明的具体实施方式。

为了更清晰的说明本发明的思想,下面以使用mapgis10.3的sdk对面要素生成缓冲区结果的二次任务划分策略的并行调度方法为实施例进行进一步的说明,具体可参考图1。

步骤(1)、通过分析面要素生成缓冲区的主要的三个内在步骤:获取要素的几何信息(即前述所说的第一步)、生成缓冲区(即前述所说的第二步)和写入缓冲区结果(即前述所说的第三步),确定出影响生成缓冲区的主要因子为要素的折点数。分别用折点数逐渐变化的线及面要素的数据集,使用的mapgis10.3平台的sdk来测试面要素完成这三个步骤的计算强度,这里用计算时间作为计算强度的指标。前述第一步至第三步在本实施例中分别为:第一步是测试获取recordset.geometry属性的时间与折点数的关系,第二步是测试geopolygon或者geopolygons的buffer方法完成的时间与折点数的关系,第三步是测试简单要素类sfeaturecls的append方法添加geopolygon或者geopolygons完成的时间与折点数的关系。然后用统计分析软件spss对这个关系做回归分析,根据最优的拟合度来选择每个步骤的模型,得到这三个步骤的折点数和计算时间的关系的模型。分别把这三个步骤的模型进行相加,得到表述一个面要素缓冲区分析所花费的总时间与该要素折点数的关系的总模型。

cp(x)=0.05962x-6.096×10-9x2+8.3458×10-14x3+e0.006x1.045+1.209(1)

步骤(2)、根据步骤(1)所建立的计算强度与要素折点数的模型(式1),来建立计算强度格网。首先使用sfeaturecls的range属性得到待生成缓冲区的简单要素的外包矩形(xmin、ymin、xmax、ymax)到待要生成缓冲区的数据集的外包矩形(xmin、ymin、xmax、ymax),然后将外包矩形扩展为正方形,以(xmin、ymin)为原点,以((xmax-xmin)、(ymax-ymin))中的最大值为正方形的边长edge(外包矩形与正方形的一个边重复)。对这个正方形范围采用四叉树分级网格化的方法,即第i级内容格网数为2i*2i,则第i级格网的边长为dt=edge/2i。这个网格的存储是按照级别-行号-列号命名规则作为key值,使用redisclient.set<string>(key,value)方法将key值存入redis数据库中的。接着根据建立的计算强度与要素折点数的总模型分别计算每个网格子的计算强度,全部在网格内的要素就将这个要素强度给这个格网,部分在格子的要素就按要素在格子内的折点数与该要素的总折点数的比例乘以对应要素的计算强度赋给这个网格。得到全部在网格的要素和部分在格子的要素在mapgis10.3平台的sdk的实现如下所述:使用querydef类的.setrect方法设定要查询的矩形范围和查询方式,查询方式分别设置为spaquerymode.contain和spaquerymode.intersect,然后分别使用sfeaturecls.select(querydef)方法的到两个recordset要素集。设置为spaquerymode.contain得到recordset要素集中的要素是格子中包含的要素设置为spaquerymode.intersect得到recordset要素集中的要素是格子中内相交和包含的数据集。所以要得到仅相交的数据集,使用recordset的subset方法在格子中内相交和包含的数据集减去在格子内包含的数据集即可。如图2所示,在第0行第0列的这个格子中有四个要素,完全在格子内的featurec的折点数为4,部分在格子内的featurea、featureb和featured的在格子内的折点数与该要素的折点数的比例分别为1/2,1/4和1/2。则这个格子的计算强度w00为

按这种规则把这个网格所有包含或相交的要素进行计算强度的计算,然后累加起来便是这个网格的计算强度value,使用redisclient.set<string>(key,value)方法存入redis数据库中的。

步骤(3)、根据步骤(2)所建立的计算强度格网,我们便开始进行第一次的划分。第一次的划分是对形成格网的区域进行划分,划分后的每个区域计算强度是相等的。首先我们对redis数据库中的key值进行遍历,据此使用redisclient.get<string>(key)方法找到相应的value值,对格网每行的计算强度进行累加,得到每行的计算强度的汇总wi。然后将wi进行汇总得到总的计算强度wtotal,将wtotal除以我们需要划分的并行任务的个数得到每个并行任务所需计算强度wtask。对网格的首行开始,按行往上遍历,如果当前行的计算强度大于wtask,那么就按wtask在当前行的计算强度的比例从当前行的底部来取得相应的范围,当前行余下的计算强度和范围作为下一个初始值进行下一行的遍历;如果当前行的计算强度小于wtask,那么就遍历下一行将下一行的计算强度进行累加再进行判断,直到这个值大于wtask,然后将多出wtask的计算强度在遍历到的当前行的计算强度的比例从当前行的底部来取得相应的范围,然后将这个累加和中所包含的完整行的范围与这个范围合并作为这个任务的计算范围,余下的计算强度和范围作为下一个初始值进行下一行的遍历。按这种规则,遍历到最后一行,生成所有并行任务需要计算的范围。如图3,以任务数为4进行了详细说明,其中wij表示第i行第j列的格子的任务强度。

步骤(4)、将步骤(3)所建立的并行任务的计算范围传递给各个并行的计算节点,完全包含在范围内的要素则通过从空间数据中查询到相应数据进行缓冲区分析,部分在该范围内的要素则通过以下规则进行划分然后做缓冲区分析。完全包含查询和部分包含查询可以用步骤(3)中的方法查询即可,只用将querydef类的.setrect方法设定要查询的矩形范围改为当前的计算范围。如图4所示,在步骤(3)所建立的并行任务的计算范围的基础上进行第二次划分,通过分解在与这些计算范围的边界相交的要素来实现并行任务之间的负载均衡,以同时都在这两个范围的要素为4个为例,具体方法如下。

首先用相邻计算范围的直线做一个相交查询来得到同时都在这两个范围的要素(featurea、featureb、featurec和featured),这个直线的相交查询也可以用用步骤(3)中的矩形查询实现,将这个直线扩展为类似为线的矩形,将querydef类的.setrect方法设定要查询的矩形范围改为该矩形进行查询。然后按照步骤(1)所建立的计算强度与要素折点数的模型,分别计算出featurea、featureb、featurec和featured的计算强度wa、wb、wc、wd。

然后用featurea、featureb、featurec和featured在子域2内的折点数与其总折点数的比例来计算其在子域2内的部分计算强度wa2、wb2、wc2、wd2,将进行汇总得到在子域2内的总部分计算强度ws2。

接着对wa、wb、wc、wd进行遍历,从第一个开始与ws2进行比较,如果小于ws2,则累加下一个,直到累加值大于等于ws2为止,将这个累加的所有要素分派给这个范围,剩下的要素分派给另一个范围;如果大于等于ws2,将这个要素分派给这个范围,剩下的要素分派给另一个范围。

步骤(5)、根据步骤(4)得到的所有并行缓冲区结果,用sfeaturecls的append方法将余下的缓冲结果写入进第一个完成的缓冲区结果中,至此并行调度方法结束。

上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1