首页> 中国专利> 对气象数据处理模块进行负载均衡的优化方法

对气象数据处理模块进行负载均衡的优化方法

摘要

本发明公开了一种对气象数据处理模块进行负载均衡的优化方法主要对METGRID模块中的子函数search_extrap进行优化,以通过保存各个顶点的广度优先搜索的遍历记录来减少子函数search_extrap在广度优先搜索中迭代的次数,该优化方法包括以下步骤:创建一个子程序search_match_mask,用以遍历所有的顶点和保存遍历记录,该子程序主要实现search_extrap第一个for循环的功能;再对子函数search_extrap的代码进行相应修改。本发明有益效果:解决了METGRID负载不均衡的问题,提高了METGRID模块的计算速度,进而极大提升了IAP AGCM4.0与WRF耦合计算的效率。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-03-15

    授权

    授权

  • 2017-01-25

    实质审查的生效 IPC(主分类):G05B19/414 申请日:20160129

    实质审查的生效

  • 2016-08-31

    公开

    公开

说明书

技术领域

本发明涉及数据处理大规模气候数据处理,特别涉及一种对气象数据处理模块进行负载均衡的优化方法。

背景技术

地球系统模式ESM是一个耦合的气候模式,能用来模拟地球在不同时期的气候状态,许多国家都开发了自己的地球系统模式。最著名的地球系统模式是通用地球系统模式CESM,主要由美国国家大气研究中心研发。中国科学院地球系统模式CAS-ESM由中国科学院大气物理研究所(IAP)研发而成。在CAS-ESM系统中,大气模式是IAP开发的大气环流模式IAP AGCM4.0,海洋模式是IAP开发的海洋模式LICOM2.0版本,陆面模式是北京师范大学开发的CoLM模式,陆冰模式是GLC模式,海冰模式是CICE4,大气化学模式是IAP开发的GEATM模式。

大气环流模式常用于模拟粗分辨率的全球气候,而区域气候模式用于模拟高分辨率区域的气候和地表特征。为了更好地模拟气候,许多研究使用全球模式降尺度来驱动区域模式。CAS-ESM实现了IAP AGCM4.0与WRF的在线耦合。通过耦合器CPL7,IAP AGCM4.0的输出用于驱动WRF,即IAP AGCM4.0在线地为WRF提供初始条件和侧边界条件。

在WRF中,METGRID(meteorological grid)模块主要功能是把大量中间格式的气象数据水平插值到计算网格中。METGRID支持的插值方法有:average_4pt、average_16pt、wt_average_4pt、wt_average_16pt、nearest_neighbor、four_pt、sixteen_pt、search_extrap和average_gcell,其中search_extrap是广度优先搜索插值。广度优先搜索插值方法具体的操作是:首先将源数据序列看作一个二维网格图,不管每个源数据点是否有效,都用一个顶点来表示;然后,从顶点(x,>)(该顶点缺失或被屏蔽)最邻近的一个顶点开始广度优先搜索,直到找到表示有效源数据点的一个顶点(不被屏蔽或不缺失)才停止;最后将该值赋给顶点(x,>)。这种广度优先搜索插值方法也可以被认为是寻找“最有效的近邻”。

使用64 个CPU核心运行CAS-ESM系统对美国南部大平原2000年3月份气旋形成过程进行初步模拟,模拟的时间段为2000年3月1日00时(世界标准时间UTC)至2000年3月6日00时,WRF模式端处理器划分形式是8×8。如图1所示,模拟过程中发现,整个CAS-ESM系统计算时间主要花费在WRF运算上。而在WRF模式中,METGRID和REAL模块的计算时间之和占WRF整个运行时间的80%以上。通过分析各进程执行METGRID所花费的时间,我们发现各进程METGRID的计算时间存在严重的负载不均衡。从0号进程到7号进程,METGRID的计算时间逐次递减。但是,从24号进程到31号进程,METGRID的计算时间先递减、后递增。虽然对于各个进程来说,METGRID的计算时间无统一规律,但是METGRID计算时间的不均衡确实存在。

因为METGRID的计算时间占WRF整体计算时间的比重较大,所以解决METGRID的负载不均衡问题对于提高WRF端的计算效率至关重要。通过进一步测试,发现子函数search_extrap造成了METGRID模块的负载不均衡。为了解决METGRID负载不均衡问题,只要解决search_extrap负载不均衡问题即可。

因此,为了解决METGRID负载不均衡的问题,本发明提出了一种对气象数据处理模块METGRID进行负载均衡的优化方法。

发明内容

本发明的目的是提供一种对气象数据处理模块进行负载均衡的优化方法,以解决search_extrap的负载不均衡问题,进而也解决了METGRID模块的负载不均衡问题。

本发明提出一种对气象数据处理模块进行负载均衡的优化方法,主要对METGRID模块中的子函数search_extrap进行优化,通过保存各个顶点的广度优先搜索的遍历记录来减少子函数search_extrap在广度优先搜索中迭代的次数。

进一步的,本发明所述的对气象数据处理模块进行负载均衡的优化方法包括以下步骤:创建一个子程序search_match_mask,用以遍历所有的顶点和保存遍历记录,该子程序主要实现search_extrap第一个for循环的功能;以及对子函数search_extrap的代码进行相应的修改。

函数search_extrap的主要功能是寻找一个非有效源数据点的最有效近邻,然后把该最有效近邻的值插值给该数据点。在第一次调用函数search_extrap之前,各个进程可以通过执行第一个for循环遍历所有的顶点,找到每个顶点对应的最有效近邻,然后保存该遍历记录。这样,每当调用search_extrap时,就可以直接从遍历记录中读取对应的记录,而不用再执行第一个for循环。在保持程序正确和模拟结果准确的前提下,通过保存各个顶点的广度优先搜索的遍历记录来减少子函数search_extrap在广度优先搜索中迭代的次数。通过这样的方式,可以有效地减少第一个for循环的内部迭代次数(或查找次数)。

本发明的有益效果为:根据此方法对METGRID模块进行优化后,METGRID模块负载不均衡问题得到一定程度上的解决;当使用64 CPU核心计算时,优化后的METGRID和REAL模块的计算速度比优化前大约快7.2倍,优化后的CAS-ESM总体计算速度提升217.53%。当用不同CPU 核心数进行试验时,具有类似的加速效果;说明该方法不但能解决METGRID 负载不均衡的问题,而且能大大提升METGRID模块的计算性能。

附图说明

图1为各进程执行子程序METGRID所花费的计算时间统计情况;

图2为各进程执行子程序METGRID和函数search_extrap所花费的计算时间比较情况;

图3为各进程的search_extrap内部循环的迭代次数统计情况,其中循环迭代总次数表示第一个和第二个for循环内部迭代总次数之和;

图4-1和图4-2为优化前后3月5日00时的累计降雨量(mm)模拟情况;

图5为各进程METGRID优化前后的计算时间比较情况。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其它实施例,都属于本发明保护的范围。

本发明为了解决METGRID负载不均衡问题,对METGRID计算模块进行进一步测试,并统计了各个进程METGRID模块中子函数search_extrap的计算时间。如图2可知两点,一是各个进程执行search_extrap所花费的时间是不一样的,也存在严重的负载不均衡;二是各进程search_extrap计算时间的变化趋势与METGRID一致,并且其计算时间与METGRID几乎相当。因此,子函数search_extrap造成了METGRID模块的负载不均衡问题。为了解决METGRID负载不均衡的问题,只要解决search_extrap的负载不均衡即可。

函数search_extrap的主要功能是寻找一个非有效源数据点的最有效近邻,然后把该最有效近邻的值插值给该数据点。search_extrap的伪代码如表1所示。

表1为函数search_extrap的伪代码

从表1可知,函数search_extrap包括两个for循环。在search_extrap中,第一个和第二个for循环内部迭代总次数以及这两个循环内部迭代总次数之和如图3所示。在图3中,从0号进程到63号进程,search_extrap两个for循环内部迭代总次数的变化趋势与图1 METGRID计算时间一致,所以造成METGRID负载不均衡的根本原因是search_extrap这两个for循环内部迭代的总次数不一致。另外,第二个for循环内部迭代的总次数相对比较少,而第一个for循环内部迭代的总次数几乎等于这两个for循环内部迭代总次数之和。因此,函数search_extrap第一个for循环最终导致了各进程METGRID负载不均衡。为了解决METGRID负载不均衡的问题,最好的方法是降低函数search_extrap第一个for循环的内部迭代总次数。

通过分析函数search_extrap的代码可知,各个进程的参数array(三维数组)是不同的,但是参数mask_array(二维数组)相同。通过测试发现,当可选参数mask_arraymaskval存在时,表1中的判断条件(if>mask_array(i,j) /= maskval))对search_extrap第一个for循环的内部迭代次数有重大的影响。每当调用函数search_extrap时就执行第一个for循环代码一次,而第一个for循环代码被执行一次可能需要多次内部迭代,这样是没必要的。因此,在第一次调用函数search_extrap之前,各个进程可以通过执行第一个for循环遍历所有的顶点,找到每个顶点对应的最有效近邻,然后保存该遍历记录。这样,每当调用search_extrap时,就可以直接从遍历记录中读取对应的记录,而不用再执行第一个for循环。通过这样的方式,可以有效地减少第一个for循环的内部迭代次数(或查找次数)。某种程度上,METGRID负载不均衡的问题也能得到解决。

为此,首先需要创建一个子程序search_match_mask用以遍历所有的顶点和保存遍历记录。这个子程序主要目的是实现search_extrap第一个for循环的功能,后续再对函数search_extrap的代码进行相应的修改。

尽管各进程参数mask_array相同,但参数maskval不同。因为maskval的值是0或1,所以进行遍历需要分maskval=0或1两种情况。并且,在查找每个顶点最有效近邻时,不但要存储每个顶点对应的最有效近邻的坐标信息,还要存储遍历过程中用到的队列q(见表1)。因为在函数search_extrap第二个for循环中还需用到q

本发明实施例所述的一种对气象数据处理模块METGRID进行负载均衡的优化方法,包括以下步骤:

1)创建6个二维数组形式的公共变量:match_mask_array0、match_mask_array0、match_mask_queue0、match_mask_queue1、match_mask_found_valid0match_mask_found_valid1,其中,match_mask_array0用来存储maskval=0时每个顶点对应的最有效近邻的坐标;match_mask_array1用来存储maskval=1时每个顶点对应的最有效近邻的坐标;在搜索顶点最有效近邻时,match_mask_queue0用来存储maskval=0时的队列q;同理,match_mask_queue1用来存储maskval=1时的队列qmatch_mask_found_valid0用来存储maskval=0时每个顶点是否找到最有效的近邻;match_mask_found_valid1用来存储maskval=1时每个顶点是否找到最有效的近邻。

2)子程序search_match_mask的详细算法实现如表2所示,在每个进程调用函数search_extrap之前,需要先调用子程序search_match_mask把遍历记录赋值给二维数组match_mask_array0、match_mask_array0、match_mask_queue0、match_mask_queue1、match_mask_found_valid0match_mask_found_valid1

表2为子程序search_match_mask的伪代码

3)对函数search_extrap进行相应的修改,修改后的函数search_extrap如表3所示,主要是对search_extrap第一个for循环代码部分进行了修改,第二个for循环代码基本保持不变。

表3为优化后search_extrap的伪代码

为了验证METGRID优化后代码的正确性,对优化前后的模拟结果进行比较。这里,取3月5日00时的强降雨情况进行比较。优化前的强降雨情况如图4-1所示,优化后的则如图4-2所示。通过比较我们发现,图4-1和图4-2完全一样,证明了METGRID优化后的代码的正确性。同时,我们逐一比较了优化前后模式的输出数据,结果完全相同。

使用64个CPU核心对这5天的气旋形成事件进行模拟,优化前后各进程METGRID的计算时间如图5所示。从中可以看出,优化后不但在一定程度上解决了METGRID负载不均衡的问题,而且大量减少了METGRID的计算时间。同时,0号进程优化后METGRID的计算速度比优化前大约快11倍。如果对CAS-ESM进行为期更长时间的模拟,优化后的METGRID更能体现它的价值。

因为在WRF积分之前加了MPI同步操作,所以每个进程METGRID和REAL计算时间的总和是一样的。同样以上述为期5天的模拟为例,当对CAS-ESM系统使用不同CPU核心时,优化前后CAS-ESM、METGRID和REAL模块计算总时间的情况如表4所示。

表4为优化前后METGRID和REAL模块、CAS-ESM系统运行时间的比较情况

从表4可以得出:

1)优化前(Before optimizing)METGRID和REAL模块计算时间占CAS-ESM系统总计算时间的70%以上,比重较大。从侧面反映了对METGRID负载均衡优化的重要性。

2)同样是用64个CPU核心,优化后(After optimizing) METGRID和REAL模块的计算速度比优化前大约快7.2倍,优化后CAS-ESM总体计算速度提升217.53%。从而,进一步验证了我们提出的优化算法的高效性。

3)当用不同处理器个数重新运行CAS-ESM时,METGRID和REAL模块计算速度有类似的加速效果。

按照以上介绍,本发明完成了一种对气象数据处理模块METGRID进行负载均衡的方法。在METGRID模块中创建子程序search_match_mask用以遍历所有的顶点和保存遍历记录,每当调用search_extrap时,就可以直接从遍历记录中读取对应的记录,而不用再执行search_extrap的第一个for循环。通过这样的方式,可以有效地减少第一个for循环内部迭代的总次数。该方法解决了METGRID 模块负载不均衡的问题,并且提升了该模块和整个地球系统模式CAS-ESM的计算性能。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号