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

文档序号:10552342阅读:403来源:国知局
对气象数据处理模块进行负载均衡的优化方法
【专利摘要】本发明公开了一种对气象数据处理模块进行负载均衡的优化方法主要对METGRID模块中的子函数search_extrap进行优化,以通过保存各个顶点的广度优先搜索的遍历记录来减少子函数search_extrap在广度优先搜索中迭代的次数,该优化方法包括以下步骤:创建一个子程序search_match_mask,用以遍历所有的顶点和保存遍历记录,该子程序主要实现search_extrap第一个for循环的功能;再对子函数search_extrap的代码进行相应修改。本发明有益效果:解决了METGRID负载不均衡的问题,提高了METGRID模块的计算速度,进而极大提升了IAP AGCM4.0与WRF耦合计算的效率。
【专利说明】
对气象数据处理模块进行负载均衡的优化方法
技术领域
[0001] 本发明涉及数据处理大规模气候数据处理,特别涉及一种对气象数据处理模块进 行负载均衡的优化方法。
【背景技术】
[0002] 地球系统模式ESM是一个耦合的气候模式,能用来模拟地球在不同时期的气候状 态,许多国家都开发了自己的地球系统模式。最著名的地球系统模式是通用地球系统模式 CESM,主要由美国国家大气研究中心研发。中国科学院地球系统模式CAS-ESM由中国科学院 大气物理研究所(IAP)研发而成。在CAS-ESM系统中,大气模式是IAP开发的大气环流模式 IAP AGCM4.0,海洋模式是IAP开发的海洋模式LIC0M2.0版本,陆面模式是北京师范大学开 发的CoLM模式,陆冰模式是GLC模式,海冰模式是CICE4,大气化学模式是IAP开发的GEATM模 式。
[0003] 大气环流模式常用于模拟粗分辨率的全球气候,而区域气候模式用于模拟高分辨 率区域的气候和地表特征。为了更好地模拟气候,许多研究使用全球模式降尺度来驱动区 域模式。CAS-ESM实现了IAP AGCM4.0与WRF的在线耦合。通过耦合器CPL7,IAP AGCM4.0的输 出用于驱动WRF,即IAP AGCM4.0在线地为WRF提供初始条件和侧边界条件。
[0004] 在WRF中,METGRID(meteorological grid)模块主要功能是把大量中间格式的气 象数据水平插值到计算网格中。METGRID支持的插值方法有:average_4pt、averagej6pt、 wt_average_4pt、wt_average_16pt、nearest_neighbor、four_pt、sixteen_pt、search_ extrap和average_gce 11,其中search_extrap是广度优先搜索插值。广度优先搜索插值方 法具体的操作是:首先将源数据序列看作一个二维网格图,不管每个源数据点是否有效,都 用一个顶点来表示;然后,从顶点(A /)(该顶点缺失或被屏蔽)最邻近的一个顶点开始广 度优先搜索,直到找到表示有效源数据点的一个顶点(不被屏蔽或不缺失)才停止;最后将 该值赋给顶点(A 4。这种广度优先搜索插值方法也可以被认为是寻找"最有效的近邻"。
[0005] 使用64个CPU核心运行CAS-ESM系统对美国南部大平原2000年3月份气旋形成过 程进行初步模拟,模拟的时间段为2000年3月1日00时(世界标准时间UTC)至2000年3月6日 00时,WRF模式端处理器划分形式是8 X 8。如图1所示,模拟过程中发现,整个CAS-ESM系统计 算时间主要花费在WRF运算上。而在WRF模式中,METGRID和REAL模块的计算时间之和占 WRF 整个运行时间的80%以上。通过分析各进程执行METGRID所花费的时间,我们发现各进程 METGRID的计算时间存在严重的负载不均衡。从0号进程到7号进程,METGRID的计算时间逐 次递减。但是,从24号进程到31号进程,METGRID的计算时间先递减、后递增。虽然对于各个 进程来说,METGRID的计算时间无统一规律,但是METGRID计算时间的不均衡确实存在。
[0006] 因为METGRID的计算时间占 WRF整体计算时间的比重较大,所以解决METGRID的负 载不均衡问题对于提高WRF端的计算效率至关重要。通过进一步测试,发现子函数 SearCh_ extrap造成了METGRID模块的负载不均衡。为了解决METGRID负载不均衡问题,只要解决 search_extrap负载不均衡问题即可。
[0007] 因此,为了解决METGRID负载不均衡的问题,本发明提出了一种对气象数据处理模 ±夬1^161?10进行负载均衡的优化方法。

【发明内容】

[0008] 本发明的目的是提供一种对气象数据处理模块进行负载均衡的优化方法,以解决 search_extrap的负载不均衡问题,进而也解决了METGRID模块的负载不均衡问题。
[0009] 本发明提出一种对气象数据处理模块进行负载均衡的优化方法,主要对METGRID 模块中的子函数search_extrap进行优化,通过保存各个顶点的广度优先搜索的遍历记录 来减少子函数search_extrap在广度优先搜索中迭代的次数。
[0010]进一步的,本发明所述的对气象数据处理模块进行负载均衡的优化方法包括以下 步骤:仓ll建一个子程序search_match_mask,用以遍历所有的顶点和保存遍历记录,该子程 序主要实现search_extrap第一个for循环的功能;以及对子函数search_extrap的代码进 行相应的修改。
[0011 ]函数search_extrap的主要功能是寻找一个非有效源数据点的最有效近邻,然后 把该最有效近邻的值插值给该数据点。在第一次调用函数search_extrap之前,各个进程可 以通过执行第一个for循环遍历所有的顶点,找到每个顶点对应的最有效近邻,然后保存该 遍历记录。这样,每当调用search_extrap时,就可以直接从遍历记录中读取对应的记录,而 不用再执行第一个for循环。在保持程序正确和模拟结果准确的前提下,通过保存各个顶点 的广度优先搜索的遍历记录来减少子函数search_extrap在广度优先搜索中迭代的次数。 通过这样的方式,可以有效地减少第一个for循环的内部迭代次数(或查找次数)。
[0012]本发明的有益效果为:根据此方法对METGRID模块进行优化后,METGRID模块负载 不均衡问题得到一定程度上的解决;当使用64 CPU核心计算时,优化后的METGRID和REAL模 块的计算速度比优化前大约快7.2倍,优化后的CAS-ESM总体计算速度提升217.53%。当用不 同CPU核心数进行试验时,具有类似的加速效果;说明该方法不但能解决METGRID负载不 均衡的问题,而且能大大提升METGRID模块的计算性能。
【附图说明】
[0013]图1为各进程执行子程序METGRID所花费的计算时间统计情况; 图2为各进程执行子程序METGRID和函数search_extrap所花费的计算时间比较情况; 图3为各进程的searchjxtrap内部循环的迭代次数统计情况,其中循环迭代总次数表 示第一个和第二个for循环内部迭代总次数之和; 图4-1和图4-2为优化前后3月5日00时的累计降雨量(mm)模拟情况; 图5为各进程METGRID优化前后的计算时间比较情况。
【具体实施方式】
[0014]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员所获得的所有其它实施例,都属于本发明保护的 范围。
[0015] 本发明为了解决METGRID负载不均衡问题,对METGRID计算模块进行进一步测试, 并统计了各个进程METGRID模块中子函数search_extrap的计算时间。如图2可知两点,一是 各个进程执行searchjxtrap所花费的时间是不一样的,也存在严重的负载不均衡;二是各 进程search_extrap计算时间的变化趋势与METGRID-致,并且其计算时间与METGRID几乎 相当。因此,子函数search_extrap造成了METGRID模块的负载不均衡问题。为了解决 METGRID负载不均衡的问题,只要解决search_extrap的负载不均衡即可。
[0016] 函数search_extrap的主要功能是寻找一个非有效源数据点的最有效近邻,然后 把该最有效近邻的值插值给该数据点。search_extrap的伪代码如表1所示。 表1为函数search_extrap的伪代码

[0017] 从表1可知,函数search_extrap包括两个for循环。在search_extrap中,第一个和 第二个for循环内部迭代总次数以及这两个循环内部迭代总次数之和如图3所示。在图3中, 从〇号进程到63号进程,search_extrap两个for循环内部迭代总次数的变化趋势与图1 METGRID计算时间一致,所以造成METGRID负载不均衡的根本原因是search_extrap这两个 for循环内部迭代的总次数不一致。另外,第二个for循环内部迭代的总次数相对比较少,而 第一个for循环内部迭代的总次数几乎等于这两个for循环内部迭代总次数之和。因此,函 数search_extrap第一个for循环最终导致了各进程METGRID负载不均衡。为了解决METGRID 负载不均衡的问题,最好的方法是降低函数search_extrap第一个for循环的内部迭代总次 数。
[0018] 通过分析函数search_extrap的代码可知,各个进程的参数ar_raj<三维数组)是不 同的,但是参数《asA_arra_K二维数组)相同。通过测试发现,当可选参数《asA_arra7和 存在时,表1 中的判断条件(if (/saslaiTajdjV /= ?as々ra_/))对search_extrap 第一个for循环的内部迭代次数有重大的影响。每当调用函数search_extrap时就执行第一 个for循环代码一次,而第一个for循环代码被执行一次可能需要多次内部迭代,这样是没 必要的。因此,在第一次调用函数search_extrap之前,各个进程可以通过执行第一个f or循 环遍历所有的顶点,找到每个顶点对应的最有效近邻,然后保存该遍历记录。这样,每当调 用search_extrap时,就可以直接从遍历记录中读取对应的记录,而不用再执行第一个for 循环。通过这样的方式,可以有效地减少第一个for循环的内部迭代次数(或查找次数)。某 种程度上,METGRID负载不均衡的问题也能得到解决。
[0019] 为此,首先需要创建一个子程序search_match_mask用以遍历所有的顶点和保存 遍历记录。这个子程序主要目的是实现search_extrap第一个for循环的功能,后续再对函 数search_extrap的代码进行相应的修改。
[0020] 尽管各进程参数相同,但参数同因为/的值是0或1, 所以进行遍历需要分舰或1两种情况。并且,在查找每个顶点最有效近邻时,不但要 存储每个顶点对应的最有效近邻的坐标信息,还要存储遍历过程中用到的队列W见表1)。 因为在函数search_extrap第二个for循环中还需用到g。
[0021]本发明实施例所述的一种对气象数据处理模块METGRID进行负载均衡的优化方 法,包括以下步骤: match_mask_queueO 細tch_mask_queuel 細tch+mask+found+validO^Wmatch+mask- 其中,用来存储时每个顶点对应的最有效近 邻的坐标;用来存储i ra 2= 1时每个顶点对应的最有效近邻的坐标; 在搜索顶点最有效近邻时,細^用来存储細iraX)时的队列<7;同理, 时每个顶点是否找到最有效的近邻;細心用来存储 时每个顶点是否找到最有效的近邻。
[0022] 2)子程序search_match_mask的详细算法实现如表2所示,在每个进程调用函数 search_extrap之前,需要先调用子程序search_match_mask把遍历记录赋值给二维数组 match_mask_arrayO Miatch_mask_arrayO Miatch_mask_queueO Miatch_mask_queuel ?> match-mask-found-validff^Wmatch-mask-found-validl〇 [0023] 表2为子程序search_match_mask的伪代码

3)对函数search_extrap进行相应的修改,修改后的函数search_extrap如表3所示,主 要是对search_extrap第一个for循环代码部分进行了修改,第二个for循环代码基本保持 不变。
[0024] 表3为优化后search_extrap的伪代码
为了验证METGRID优化后代码的正确性,对优化前后的模拟结果进行比较。这里,取3月 5日00时的强降雨情况进行比较。优化前的强降雨情况如图4-1所示,优化后的则如图4-2所 示。通过比较我们发现,图4-1和图4-2完全一样,证明了 METGRID优化后的代码的正确性。同 时,我们逐一比较了优化前后模式的输出数据,结果完全相同。
[0025]使用64个CPU核心对这5天的气旋形成事件进行模拟,优化前后各进程METGRID的 计算时间如图5所示。从中可以看出,优化后不但在一定程度上解决了METGRID负载不均衡 的问题,而且大量减少了METGRID的计算时间。同时,0号进程优化后METGRID的计算速度比 优化前大约快11倍。如果对CAS-ESM进行为期更长时间的模拟,优化后的METGRID更能体现 它的价值。
[0026] 因为在WRF积分之前加了MPI同步操作,所以每个进程METGRID和REAL计算时间的 总和是一样的。同样以上述为期5天的模拟为例,当对CAS-ESM系统使用不同CPU核心时,优 化前后CAS-ESM、METGRID和REAL模块计算总时间的情况如表4所示。
[0027] 表4为优化前后METGRID和REAL模块、CAS-ESM系统运行时间的比较情况
从表4可以得出: 1)优化前(Before optimizing)METGRID和REAL模块计算时间占 CAS-ESM系统总计算时 间的70%以上,比重较大。从侧面反映了对METGRID负载均衡优化的重要性。
[0028] 2)同样是用64个CPU核心,优化后(After optimizing) METGRID和REAL模块的计 算速度比优化前大约快7.2倍,优化后CAS-ESM总体计算速度提升217.53%。从而,进一步验 证了我们提出的优化算法的高效性。
[0029] 3)当用不同处理器个数重新运行CAS-ESM时,METGRID和REAL模块计算速度有类似 的加速效果。
[0030] 按照以上介绍,本发明完成了一种对气象数据处理模块METGRID进行负载均衡的 方法。在METGRID模块中创建子程序search_match_mask用以遍历所有的顶点和保存遍历记 录,每当调用search_extrap时,就可以直接从遍历记录中读取对应的记录,而不用再执行 search_extrap的第一个f or循环。通过这样的方式,可以有效地减少第一个f or循环内部迭 代的总次数。该方法解决了METGRID模块负载不均衡的问题,并且提升了该模块和整个地 球系统模式CAS-ESM的计算性能。
[0031] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精 神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【主权项】
1. 一种对气象数据处理模块进行负载均衡的优化方法其特征在于:主要对METGRID模 块中的子函数search_extrap进行优化,以通过保存各个顶点的广度优先搜索的遍历记录 来减少子函数search_extrap在广度优先搜索中迭代的次数。2. 根据权利要求1所述的对气象数据处理模块进行负载均衡的优化方法其特征在于, 该优化方法包括以下步骤: 创建一个子程序search_match_mask,用以遍历所有的顶点和保存遍历记录,该子程序 主要实现search_extrap第一个for循环的功能;以及对子函数search_extrap的代码进行 相应修改。3. 根据权利要求2所述的对气象数据处理模块进行负载均衡的优化方法其特征在于: 在第一次调用函数search_extrap之前,各个进程可以通过执行第一个for循环遍历所有的 顶点,找到每个顶点对应的最有效近邻,然后保存遍历记录。4. 根据权利要求3所述的对气象数据处理模块进行负载均衡的优化方法其特征在于: 每当调用search_extrap时,就直接从所述遍历记录中读取对应的记录,不用再执行所述第 一个for循环。5. 根据权利要求4所述的对气象数据处理模块进行负载均衡的优化方法其特征在于, 创建6个二维数组形式的公共变量:《a Λ/a 郝 queue0^mtch_imsk_queuel^mtch_imsk_found_valid(M\\imtch_imsk_found_validl,^ 中,《a 两来存储ZffasAraJ=O时每个顶点对应的最有效近邻的坐标;《a ?as々_ar_raj^用来存储《aslrahl时每个顶点对应的最有效近邻的坐标;在搜索顶点最有效 近邻时,《a 用来存储/SasAraJ=O时的队列<7;同理,?a <7如如2用来 存储时的队列<7; ?a 用来存储时每个顶点是否 找到最有效的近邻;icA_?asl/ou/3c/_ 用来存储《asArahl时每个顶点是否找到最 有效的近邻。6. 根据权利要求5所述的对气象数据处理模块进行负载均衡的优化方法其特征在于, 在每个进程调用函数search_extrap之前,需要先调用子程序search_match_mask把遍历记 录藏值给二觀WiMi脆tch_mask_arrayO 咖tch_mask_arrayO 咖tch_mask_queLieO 咖tch_ mas k_queue 1 獅 t ch_mas k_found_va I i d(M\\ 脆 t ch_mas k_found_va I i d 1。7. 根据权利要求6所述的对气象数据处理模块进行负载均衡的优化方法其特征在于: 主要是对search_extrap第一个for循环代码部分进行了修改,第二个for循环代码基本保 持不变。
【文档编号】H04L29/08GK105911962SQ201610065226
【公开日】2016年8月31日
【申请日】2016年1月29日
【发明人】王力哲, 王玉柱, 姜金荣, 赵晓溪, 叶煌, 何卷雄
【申请人】中国科学院遥感与数字地球研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1