一种用于地球系统模式的并行耦合方法

文档序号:6369774阅读:302来源:国知局
专利名称:一种用于地球系统模式的并行耦合方法
技术领域
本发明属于地球系统模式的耦合技术领域,特别涉及一种用于地球系统模式的并行耦合技术方案。
背景技术
地球系统模式是全球变化研究中一个不可或缺的用于模拟整个地球系统的动力、物理、化学和生物过程变化的科研工具,该工具用编程实现。耦合器作为一个专用的高性能技术平台,将模拟地球各圈层(地球系统中某个子系统)的分量模式连接起来,是构成完整的地球系统模式的核心组件。耦合器具有两个主要功能并行通信,由于能量守恒,分量模式在公共交界面上会进行大量的数据交换;并行插值,由于不同分量模式基于的网格不同,并行通信得到的数据需要进行转换,即通过插值计算将远程数据拟合到本地分量模式所基 于的网格上。随着地球科学的发展,更多分支领域的分量模式将接入到地球系统模式中,如大气化学分量模式、动态植被分量模式等;未来各种分量模式的分辨率将大大提升,如下一代大气分量模式的水平分辨率将达0. I度,包括日本的丽音(ICAM)以及欧洲的哈德莱(HadAM);将来不同分量模式之间的耦合频率也会越来越高;新型的分量模式需要进行三维耦合,如海浪分量模式、气溶胶分量模式等。根据地球系统模式的发展趋势,耦合器未来所要承载通信和插值任务将会变得异常艰巨。目前,地球系统模式发展主要依托美国NCAR的耦合器CPL系列以及法国CERFACS的耦合器OASIS系列。假设分量模式A和分量模式B进行耦合,分量模式A基于网格A,通过三个进程P1、P2、P3运行,分量模式B基于网格B,通过2个进程P4、P5运行,并行插值在分量模式B处进行(将网格A上的耦合物理量数据插值到网格B上,此时,网格A为源网格,网格B为目标网格)。在地球系统模式的运行过程中,已有的两个分量模式A和分量模式B并行耦合方法分为耦合初始阶段、耦合运行阶段及耦合结束阶段,分别具体说明如下I.耦合初始阶段分量模式A和B通过调用耦合器提供的初始化接口函数,对耦合器相关功能模块进行初始化,如图I所示,耦合器的初始阶段至少包含以下7个步骤。步骤1-1 :从namelist文件中读取namelist信息,包含了稱合相关的运行参数及数据文件等,这部分信息由用户给定;步骤1-2 :根据通信配置中的通信信息初始化MPI通信域,包括地球系统模式的全局通信域和分量模式A和B的局部通信域,通信配置信息由用户给定;步骤1-3 :根据剖分配置中的并行剖分配置信息初始化静态剖分,并行通信需要分量模式A和分量模式B基于相同网格上进行,因此,分量模式B除了基于网格B的并行剖分外还需要增加一个基于网格A的并行剖分用于和分量模式A进行并行通信;如图2(a)所示,分量模式A基于网格A,其中进程P1、P2、P3各负责3个网格单元,该并行剖分由分量模式自身提供,通过调用耦合器提供的初始化接口函数进行参数导入,分量模式B基于网格B的并行剖分采用同样方式进行初始化;如图2(a)所示,分量模式B基于网格A,进程P4负责4个网格单元,进程P5负责5个网格单元,该并行剖分由用户在剖分配置中给定剖分方式,在剖分初始化过程中调用相应的剖分算法生成得到,该步骤中的并行剖分为静态剖分;步骤1-4 :根据网格配置中的网格配置信息初始化网格,网格信息可来自分量模式,通过调用耦合器提供的初始化接口函数进行参数导入,也可通过网格配置中的网格数据文件以及步骤1-3中生成的 静态剖分得到基于剖分的网格信息,即保留进程所负责网格单元信息(对于分量模式而言,用网格覆盖整个地球表面,然后根据进程数进行分块,每一块代表地球一个子区域,包含一定数量的网格单元,每个进程负责一个子区域上的科学计算);步骤1-5 :分量模式B的进程将基于网格B的静态剖分作为目标网格单元集合,搜索插值配置中包含的插值系数文件,获取对应的插值权重系数,构成插值权重矩阵;接着,根据插值权重矩阵得到插值计算所需的网格A的网格单元集合;然后,根据基于网格A的静态剖分,求出不在该进程上的网格单元集合作为子区域信息;最后建立两个并行路由,一个用于发送其它进程所需的子区域上的数据,一个用于接收本进程所需的子区域上的数据,具体操作为分量模式B的进程间两两握手,交换基于网格A的并行剖分以及子区域信息,获得完整的基于网格A的并行剖分以及子区域信息后,各进程将自身负责的子区域信息与完整的基于网格A的并行剖分进行求交,确定子区域上的网格单元是由哪个进程负责的,建立起用于接收数据的通信映射关系,每个进程将自身的并行剖分与完整的子区域信息进行求交,确定该进程所负责的网格单元是哪个进程所需的子区域信息,建立起用于发送数据的通信映射关系;步骤1-6 :首先根据耦合物理量基本信息初始化耦合物理量命名空间,然后根据步骤1-3中生成的静态剖分初始化数据缓冲区(根据静态剖分的网格单元数来申请相应大小的内存空间用于管理耦合物理量数据);步骤1-7 :分量模式A和分量模式B根据并行路由配置中的路由配置信息和步骤1-3中生成的静态剖分来初始化并行路由,建立两个分量模式的进程间的通信映射关系,具体操作为首先,分量模式A的进程与分量模式B的进程两两握手,交换基于网格A的并行剖分,每个进程将自身基于网格A的并行剖分与通过交换得到的对方完整的并行剖分进行求交,确定进程所负责网格单元在对方分量模式的哪个进程上,建立起通信映射关系;如图
2(b)所示,分量模式B进程P4负责的网格单元在分量模式A上分别由进程Pl和P2负责,则P4分别建立与进程Pl和P2的通信映射关系。其中,步骤1-4初始化网格、步骤1-6初始化数据缓冲区以及步骤1-7初始化并行路由依赖于步骤1-3初始化静态剖分得到的并行剖分,且彼此间没有相互依赖关系,可互换次序;步骤1-5初始化插值算法需要步骤1-3得到的并行剖分及步骤1-4得到的网格,因此需要在两者之后执行该步骤。2.耦合运行阶段在地球系统模式运行过程中,分量模式通过调用耦合器提供的运行接口函数来进行耦合。通常情况下,该接口函数分为两个,一个是用于发送耦合物理量数据,一个用于接收耦合物理量数据;目前,用于地球系统模式的并行通信及并行插值已经发展相当成熟了,完整的运行流程如图3所示。
其中,并行通信采用的是点对点的MPI通信方式,其运行流程如图2 (C)所示,分量模式A的进程P2根据初耦合初始阶段建立的并行路由将耦合物理量数据Fieldl、Field2、Field3从P2的数据缓冲区取出并打包,发送给分量模式B的进程P4和P5 ;接收操作为其逆过程,分量模式A的进程P2分别接收分量模式B的进程P4和P5发送的数据包,然后根据并行路由进行解包,将耦合物理量数据复制到P2的数据缓冲区对应的位置上。完成并行通信后,分量模式B的进程执行并行插值,其运行流程见图3,可分为2个步骤步骤2-1 :收集数据(收集并行插值所需的源网格单元上的耦合物理量数据):根据耦合初始阶段步骤1-5中建立起来的两个并行路由,分量模式B的每个进程将基于网格A上的耦合物理量数据从数据缓冲区中取出并打包发送给分量模式B的其它进程,同时接收并保存其它进程发送来的数据包,这些数据包包含了每个进程自身所需的子区域上的耦合物理量数据; 步骤2-2 :执行插值计算(主要操作为执行稀疏矩阵乘)计算一个目标网格单元,分量模式B的每个进程根据目标网格单元索引号(网格B)遍历插值权重矩阵,得到一组权重系数及对应的源网格单元索引号(网格A),然后根据该组索引号获取数据缓冲区中对应的源网格单元上耦合物理量数据,将每个耦合物理量数据分别乘以对应的插值权重系数,并将结果加在一起得到一个目标网格单元上的插值计算结果。3.耦合结束阶段在地球系统模式结束运行前,各分量模式通过调用耦合器提供的结束接口函数去释放耦合相关的内存空间,结束MPI通信等收尾工作。然而,从系统层面进行整体考虑的话,目前用于地球系统模式的耦合器将并行通信和并行插值定义为独立的功能模块,而由于并行剖分使得一部分用于计算目标网格单元所需的源网格单元保存在了其它进程上,需要进行MPI通信来收集这部分源网格单元上的耦合物理量数据。随着未来地球系统模式的规模不断扩大,耦合器所承担的任务越来越重,这样的通信操作会降低耦合性能。

发明内容
本发明的目的是为克服已有技术的不足之处,提出了一种用于地球系统模式的并行耦合方法,该方法基于子区域映射,将耦合器的并行通信与并行插值进行联合考虑,用于消除耦合器并行插值过程中的通信操作,从而减少整个系统的通信次数。该方法应用于耦合器中,旨在提升地球系统模式的耦合性能。本发明提出的一种用于地球系统模式的并行耦合方法,其特征在于,该方法分为三个阶段基于子区域映射关系的耦合初始阶段,基于子区域映射的耦合运行;以及耦合结束阶段;I)设分量模式A和分量模式B进行I禹合,分量模式A基于网格A,分量模式B基于网格B ;耦合物理量数据从分量模式A流向分量模式B,分量模式A发送耦合物理量数据,分量模式B接收耦合物理量数据,然后分量模式B执行并行插值计算,将网格A上的耦合物理量数据插值到网格B上,网格A为源网格,网格B为目标网格;基于子区域映射关系的耦合初始阶段,具体包括以下步骤
步骤1-1 :从namelist文件中读取namelist信息,包含了稱合相关的运行参数及数据文件信息,这部分信息由用户给定;步骤1-2 :根据通信配置中的通信信息初始化MPI通信域,包括地球系统模式的全局通信域和分量模式A和B的局部通信域,通信配置信息由用户给定;步骤1-3 :初始化静态剖分根据剖分配置中的并行剖分配置信息初始化静态剖分,其中分量模式A基于网格A和分量模式B基于网格B的并行剖分由分量模式自身提供,通过调用耦合器提供的初始化接口函数进行参数导入,分量模式B基于网格A的并行剖分由用户在剖分配置中给定剖分方式,在剖分初始化过程中调用相应的剖分算法生成,该步骤中的并行剖分为静态剖分;步骤1-4 :初始化剖分前网格分量模式的进程从网格配置中包含的网格数据文件中读取完整的网格信息,该网格信息为剖分前网格; 步骤1-5 :初始化插值算法分量模式B的进程将基于网格B的静态剖分作为目标网格单元集合搜索插值配置中包含的插值系数文件,获取对应的插值权重系数,构成插值权重矩阵;步骤1-6 :生成动态剖分分量模式B的进程将基于网格B的静态剖分作为目标网格单元集合搜索相应的插值权重矩阵,得到网格A的网格单元集合,然后根据基于网格A的静态剖分,求出不在该进程上的网格单元集合作为子区域信息,将子区域信息和基于网格A的静态剖分保存在一起,建立新的并行剖分,该并行剖分为动态剖分,采用该操作流程生成的动态剖分记为同一种剖分类型;步骤1-7 :将动态剖分和静态剖分进行合并,统一为并行剖分首先建立一个并行剖分链表,然后在并行剖分对象中搜索相同网格名的静态剖分和动态剖分,再在结果中搜索相同剖分类型的动态剖分对象,最终的搜索结果存在三种情况情况一,如果仅包含一个静态剖分,则将其加入到并行剖分链表中;情况二,如果包含一个静态剖分和一个动态剖分,则将动态剖分加入到并行剖分链表中;情况三,如果包含一个静态剖分和两个以上的动态剖分,则首先合并动态剖分的子区域信息,将合并后的子区域信息与静态剖分保存在一起,建立新的并行剖分,将其加入到并行剖分链表中,最后释放所有未加入到并行剖分链表中的动态剖分和静态剖分的内存空间;步骤1-8 :分量模式A和分量模式B根据并行路由配置和合并后的并行剖分初始化并行路由,在并行路由配置中描述了分量模式A和分量模式B需要建立进程间的通信映射关系,根据不同类型的并行剖分建立相应的并行路由,具体操作为首先,分量模式A的进程与分量模式B的进程两两握手,交换基于网格A的并行剖分,每个进程将自身基于网格A的并行剖分与通过交换得到的对方完整的并行剖分进行求交,确定进程所负责网格单元在对方分量模式的哪个进程上,建立起通信映射关系;步骤1-9 :初始化剖分后网格根据合并后的并行剖分的网格单元索引号从剖分前网格中获取并行剖分所包含的网格单元信息,申请内存空间保存这部分网格单元信息,建立剖分后网格,最后释放保存剖分前网格的内存空间;步骤1-10 :初始化数据缓冲区根据耦合物理量基本信息初始化耦合物理量命名空间,根据合并后的并行剖分的网格单元数来申请相应大小的内存空间用于管理耦合物理量数据的数据缓冲区;
基于子区域映射的耦合运行阶段,具体包括以下步骤步骤2-1 :首先,两个分量模式执行并行通信,分量模式A的进程根据并行路由将耦合物理量数据从数据缓冲区中取出并打包,发送给分量模式B,分量模式B的进程接收分量模式A发送的数据包;步骤2-2 :然后分量模式B的进程根据并行路由进行解包,将数据复制到数据缓冲区的对应位置上; 步骤2-3 :完成并行通信后,分量模式B的进程直接进行插值计算,不再执行MPI通信来收集数据;耦合结束阶段,分量模式通过调用耦合器提供的结束接口函数去释放耦合相关的内存空间,结束MPI通信等收尾工作。2)设分量模式A和分量模式B进行稱合,分量模式A基于网格A,分量模式B基于网格B ;耦合物理量数据从分量模式B流向分量模式A,分量模式B执行并行插值计算,将网格B上的耦合物理量数据插值到网格A上,网格B为源网格,网格A为目标网格,然后分量模式B发送耦合物理量数据,分量模式A接收耦合物理量数据。基于子区域映射关系的耦合初始阶段,具体包括以下步骤步骤1-1 :从namelist文件中读取namelist信息,包含了稱合相关的运行参数及数据文件信息,这部分信息由用户给定;步骤1-2 :根据通信配置中的通信信息初始化MPI通信域,包括地球系统模式的全局通信域和分量模式A和B的局部通信域,通信配置信息由用户给定;步骤1-3 :初始化静态剖分根据剖分配置中的并行剖分配置信息初始化静态剖分,其中分量模式A基于网格A和分量模式B基于网格B的并行剖分由分量模式自身提供,通过调用耦合器提供的初始化接口函数进行参数导入,分量模式B基于网格A的并行剖分由用户在剖分配置中给定剖分方式,在剖分初始化过程中调用相应的剖分算法生成,该步骤中的并行剖分为静态剖分;步骤1-4 :初始化剖分前网格分量模式的进程从网格配置中包含的网格数据文件中读取完整的网格信息,该网格信息为剖分前网格;步骤1-5 :初始化插值算法分量模式B的进程将基于网格B的静态剖分作为源网格单元集合搜索插值配置中包含的插值系数文件,获取对应的插值权重系数,构成插值权重矩阵;步骤1-6 :生成动态剖分分量模式B的进程将基于网格B的静态剖分作为源网格单元集合搜索相应的插值权重矩阵,得到网格A的网格单元集合,然后根据基于网格A的静态剖分,求出不在该进程上的网格单元集合作为子区域信息,将子区域信息和基于网格A的静态剖分保存在一起,建立新的并行剖分,该并行剖分为动态剖分,采用该操作流程生成的动态剖分记为同一种剖分类型;步骤1-7 :将动态剖分和静态剖分进行合并,统一为并行剖分首先建立一个并行剖分链表,然后在并行剖分对象中搜索相同网格名的静态剖分和动态剖分,再在结果中搜索相同剖分类型的动态剖分对象,最终的搜索结果存在三种情况情况一,如果仅包含一个静态剖分,则将其加入到并行剖分链表中;情况二,如果包含一个静态剖分和一个动态剖分,则将动态剖分加入到并行剖分链表中;情况三,如果包含一个静态剖分和两个以上的动态剖分,则首先合并动态剖分的子区域信息,将合并后的子区域信息与静态剖分保存在一起,建立新的并行剖分,将其加入到并行剖分链表中,最后释放所有未加入到并行剖分链表中的动态剖分和静态剖分的内存空间;步骤1-8 :分量模式A和分量模式B根据并行路由配置和合并后的并行剖分初始化并行路由,在并行路由配置中描述了分量模式A和分量模式B需要建立进程间的通信映射关系,根据不同类型的并行剖分建立相应的并行路由,具体操作为首先,分量模式A的进程与分量模式B的进程两两握手,交换基于网格A的并行剖分,每个进程将自身基于网格A的并行剖分与通过交换得到的对方完整的并行剖分进行求交,确定进程所负责网格单元在对方分量模式的哪个进程上,建立起通信映射关系;步骤1-9 :初始化剖分后网格根据合并后的并行剖分的网格单元索引号从剖分前网格中获取并行剖分所包含的网格单元信息,申请内存空间保存这部分网格单元信息,建立剖分后网格,最后释放保存剖分前网格的内存空间;步骤1-10 :初始化数据缓冲区根据耦合物理量基本信息初始化耦合物理量命名空间,根据合并后的并行剖分的网格单元数来申请相应大小的内存空间用于管理耦合物理量数据的数据缓冲区;基于子区域映射的耦合运行阶段,具体包括以下步骤步骤2-1 :首先,分量模式B的进程直接进行并行插值计算,不再执行MPI通信来收集数据,将插值计算结果存放到数据缓冲区中。由于没有执行通信,部分源网格单元上的耦合物理量数据在其它进程上进行了计算,所以这里插值计算所得为不完全结果;步骤2-2 :两个分量模式执行并行通信,分量模式B的进程根据并行路由将耦合物理量数据从数据缓冲区中取出并打包,发送给分量模式A,分量模式A的进程接收分量模式B发送的数据包;步骤2-3 :分量模式A的进程根据并行路由进行解包,由于插值计算所得为部分计算结果,需要将分量模式B的不同进程发送来的相同网格单元上的耦合物理量数据进行合并,分量模式A的进程首先将保存这部分耦合物理量数据的数据缓冲区置0,然后根据并行路由将耦合物理量数据加到数据缓冲区对应的位置上;耦合结束阶段,分量模式通过调用耦合器提供的结束接口函数去释放耦合相关的内存空间,结束MPI通信等收尾工作。本发明的特点及有益效果由于并行剖分,使得耦合器进行并行插值计算过程中需要进行通信来收集计算所需的源网格单元上的耦合物理量数据,对于启动了成百上千个进程的分量模式而言,通信的开销是很可观的,会导致性能下降。而本发明提供了一种用于地球系统模式的并行耦合方法,该方法基于子区域映射,将耦合器的并行通信与并行插值进行联合考虑,通过合并通信的方式,消除并行插值过程中的通信操作,从而减少分量模式在耦合过程中的通信次数。该方法应用于耦合器中,旨在提升地球系统模式的耦合性能。


图I为已有的并行耦合方法在耦合初始化阶段的运行流程框图;
图2为已有的并行耦合方法的并行剖分、并行路由以及并行通信的实施例示意图3为已有的并行耦合方法的并行通信及并行插值的运行流程框图;图4为基于子区域映射的并行耦合方法在耦合初始阶段的运行流程;图5为基于子区域映射的并行耦合方法的并行剖分数据结构设计,左图为数据结构及相应描述,右图为网格单元在内 存中的存放方式;图6为基于子区域映射的并行耦合方法的并行通信及并行插值的运行流程。
具体实施例方式本发明提出了一种用于地球系统模式的并行耦合方法,下面结合附图并通过实施例来阐述本发明的具体实施方式
。该方法分为三个阶段1.基于子区域映射关系的耦合初始阶段,该阶段通过对已有的耦合初始阶段运行流程进行改动,生成基于插值算法的动态剖分和并行路由,用于并行通信和并行插值;2.基于子区域映射的耦合运行阶段,该阶段通过对已有的耦合运行阶段并行通信和并行插值的运行流程进行相应改动来实现;3.耦合结束阶段,该阶段采用已有方法。根据实际情况,分量模式之间的耦合包括以下两个应用例应用例I :设分量模式A和分量模式B进行耦合,分量模式A基于网格A,分量模式B基于网格B ;耦合物理量数据从分量模式A流向分量模式B,分量模式A发送耦合物理量数据,分量模式B接收耦合物理量数据,然后分量模式B执行并行插值计算,将网格A上的耦合物理量数据插值到网格B上,网格A为源网格,网格B为目标网格;应用例2 :设分量模式A和分量模式B进行耦合,分量模式A基于网格A,分量模式B基于网格B ;耦合物理量数据从分量模式B流向分量模式A,分量模式B执行并行插值计算,将网格B上的耦合物理量数据插值到网格A上,网格B为源网格,网格A为目标网格,然后分量模式B发送耦合物理量数据,分量模式A接收耦合物理量数据。本发明的并行耦合方法适用于上述两种应用例,其具体实现如下I.基于子区域映射关系的耦合初始阶段在已有的耦合初始阶段中加入子区域映射关系的建立,生成基于插值算法的动态剖分和并行路由,用于并行通信和并行插值;如图4所示,基于子区域映射的耦合初始阶段的运行流程,具体包括以下10个步骤步骤1-1 :从namelist文件中读取namelist信息,包含了稱合相关的运行参数及数据文件信息,这部分信息由用户给定;步骤1-2 :根据通信配置中的通信信息初始化MPI通信域,包括地球系统模式的全局通信域和分量模式A和B的局部通信域,通信配置信息由用户给定;步骤1-3 :初始化静态剖分根据剖分配置中的并行剖分配置信息初始化静态剖分,其中分量模式A基于网格A和分量模式B基于网格B的并行剖分由分量模式自身提供,通过调用耦合器提供的初始化接口函数进行参数导入,分量模式B基于网格A的并行剖分由用户在剖分配置中给定剖分方式,在剖分初始化过程中调用相应的剖分算法生成,该步骤中的并行剖分为静态剖分;步骤1-4 :初始化剖分前网格分量模式的进程从网格配置中包含的网格数据文件中读取完整的网格信息,该网格信息为剖分前网格;
步骤1-5 :初始化插值算法对于应用例1,分量模式B的进程将基于网格B的静态剖分作为目标网格单元集合搜索插值配置中包含的插值系数文件,获取对应的插值权重系数,构成插值权重矩阵;对于应用例2,分量模式B的进程将基于网格B的静态剖分作为源网格单元集合搜索插值配置中包含的插值系数文件,获取对应的插值权重系数,构成插值权重矩阵;步骤1-6 :生成动态剖分对于应用例1,分量模式B的进程将基于网格B的静态剖分作为目标网格单元集合搜索相应的插值权重矩阵,得到网格A的网格单元集合;对于应用例2,分量模式B的进程将基于网格B的静态剖分作为源网格单元集合搜索相应的插值权重矩阵,得到网格A的网格单元集合;然后,分量模式B的进程根据基于网格A的静态剖分和搜索得到的网格A的网格单元集合,求出不在该进程上的网格单元集合作为子区域信息,将子区域信息和基于网格A的静态剖分保存在一起,建立新的并行剖分,该并行剖分为动态剖分(根据不同应用例搜索网格A的网格单元集合的方式是不同的,建立的动态剖分也不同,用剖分类型decomp_type区分,数据结构见图5 ;步骤1-7 :将动态剖分和静态剖分进行合并,统一为并行剖分,并行剖分的数据结 构见图5,具体流程为首先建立一个并行剖分链表,然后在并行剖分对象中搜索相同网格名(grid_name)的静态剖分和动态剖分,再在结果中搜索相同剖分类型(decomp_type)的动态剖分对象,最终的搜索结果存在三种情况情况一,如果仅包含一个静态剖分,则将其加入到并行剖分链表中;情况二,如果包含一个静态剖分和一个动态剖分,则将动态剖分加入到并行剖分链表中;情况三,如果包含一个静态剖分和两个以上的动态剖分,则首先合并动态剖分的子区域信息,将合并后的子区域信息与静态剖分保存在一起,建立新的并行剖分,将其加入到并行剖分链表中,最后释放所有未加入到并行剖分链表中的动态剖分和静态剖分的内存空间(加入到并行剖分链表中的是之后要使用的,没有加入的,可能是合并生成了新的并行剖分,这个新的并行剖分已经加入到链表中了,原来的剖分没用了,如情况三,或者是存在包含关系的,比如一个动态剖分和对应的静态剖分,因为动态剖分包含了静态剖分的信息,所以动态剖分加入到链表中,静态剖分的信息变成多余的了,如情况二);步骤1-8 :分量模式A和分量模式B根据并行路由配置和合并后的并行剖分初始化并行路由,在并行路由配置中描述了分量模式A和分量模式B需要建立进程间的通信映射关系,根据不同剖分类型(decompjype)的并行剖分建立相应的并行路由,具体操作为首先,分量模式A的进程与分量模式B的进程两两握手,交换基于网格A的并行剖分,每个进程将自身基于网格A的并行剖分与通过交换得到的对方完整的并行剖分进行求交,确定进程所负责网格单元在对方分量模式的哪个进程上,建立起通信映射关系;步骤1-9 :初始化剖分后网格根据合并后的并行剖分的网格单元索引号从剖分前网格中获取并行剖分所包含的网格单元信息,申请内存空间保存这部分网格单元信息,建立剖分后网格,最后释放保存剖分前网格的内存空间;步骤1-10 :初始化数据缓冲区根据耦合物理量基本信息初始化耦合物理量命名空间,根据合并后的并行剖分的网格单元数来申请相应大小的内存空间用于管理耦合物理量数据的数据缓冲区。2.基于子区域映射的耦合运行阶段通过对已有的耦合运行阶段的并行通信和并行插值进行改动,消除并行插值过程中的MPI通信,该实现所需的基于插值算法的动态剖分和并行路由已经在耦合初始阶段建立完成。图6描述了基于子区域映射的并行通信和并行插值的运行流程。下面根据两个应用例分别进行说明。针对应用例I的并行通信和并行插值的运行流程如图6 (a)所示,具体包括以下步骤步骤2-1 :首先,两个分量模式执行并行通信,分量模式A的进程根据并行路由将耦合物理量数据从数据缓冲区中取出并打包,发送给分量模式B,分量模式B的进程接收分量模式A发送的数据包;步骤2-2 :然后分量模式B的进程根据并行路由进行解包,将数据复制到数据缓冲区的对应位置上;步骤2-3 :完成并行通信后,分量模式B的进程直接进行插值计算,不再执行MPI 通信来收集数据(因为分量模式A的进程将子区域部分所包含的网格单元上的耦合物理量数据一并打包发送给了分量模式B的进程);针对应用例2的并行通信和并行插值的运行流程如图6 (b)所示,具体包括以下步骤步骤2-1 :首先,分量模式B的进程直接进行并行插值计算,不再执行MPI通信来收集数据,将插值计算结果存放到数据缓冲区中。由于没有执行通信,部分源网格单元上的耦合物理量数据在其它进程上进行了计算,所以这里插值计算所得为不完全结果;步骤2-2 :两个分量模式执行并行通信,分量模式B的进程根据并行路由将耦合物理量数据从数据缓冲区中取出并打包,发送给分量模式A,分量模式A的进程接收分量模式B发送的数据包;步骤2-3 :分量模式A的进程根据并行路由进行解包,由于插值计算所得为部分计算结果,需要将分量模式B的不同进程发送来的相同网格单元上的耦合物理量数据进行合并,分量模式A的进程首先将保存这部分耦合物理量数据的数据缓冲区置0,然后根据并行路由将耦合物理量数据加到数据缓冲区对应的位置上。3.耦合结束阶段分量模式通过调用耦合器提供的结束接口函数去释放耦合相关的内存空间,结束MPI通信等收尾工作。本发明采用基于子区域映射的并行耦合方法的区别技术特征是首先,修改了已有的并行通信和并行插值,去除了并行插值计算过程中的采用MPI通信来收集源网格单元数据的步骤。其次,对于应用例1,采用特定的并行路由(即根据不同的插值算法生成动态剖分,然后根据动态剖分生成对应的并行路由)进行并行通信,不需要进行额外的改动,对于应用例2,除了采用特定的并行路由通信外,还在并行通信的接收函数中加入插值计算结果的合并操作用于替换原始的将耦合物理量数据复制到数据缓冲区中的操作。本发明给出的一个针对地球系统模式的高效并行耦合技术方案,该方法基于子区域映射技术,将耦合器的并行通信和并行插值两个功能进行联合考虑,用于消除并行插值过程中的通信操作,从而减少整个系统的通信次数,提升了耦合性能。任何熟悉该技术的人在本发明所揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护之内。
权利要求
1.一种用于地球系统模式的并行耦合方法,其特征在于,该方法分为三个阶段基于子区域映射关系的耦合初始阶段,基于子区域映射的耦合运行阶段;以及耦合结束阶段; I)设分量模式A和分量模式B进行耦合,分量模式A基于网格A,分量模式B基于网格B ;耦合物理量数据从分量模式A流向分量模式B,分量模式A发送耦合物理量数据,分量模式B接收耦合物理量数据,然后分量模式B执行并行插值计算,将网格A上的耦合物理量数据插值到网格B上,网格A为源网格,网格B为目标网格; 基于子区域映射关系的耦合初始阶段,具体包括以下步骤 步骤1-1 :从namelist文件中读取namelist信息,包含了稱合相关的运行参数及数据文件信息,这部分信息由用户给定; 步骤1-2 :根据通信配置中的通信信息初始化MPI通信域,包括地球系统模式的全局通信域和分量模式A和B的局部通信域,通信配置信息由用户给定; 步骤1-3 :初始化静态剖分根据剖分配置中的并行剖分配置信息初始化静态剖分,其中分量模式A基于网格A和分量模式B基于网格B的并行剖分由分量模式自身提供,通过调用耦合器提供的初始化接口函数进行参数导入,分量模式B基于网格A的并行剖分由用户在剖分配置中给定剖分方式,在剖分初始化过程中调用相应的剖分算法生成,该步骤中的并行剖分为静态剖分; 步骤1-4 :初始化剖分前网格分量模式的进程从网格配置中包含的网格数据文件中读取完整的网格信息,该网格信息为剖分前网格; 步骤1-5 :初始化插值算法分量模式B的进程将基于网格B的静态剖分作为目标网格单元集合搜索插值配置中包含的插值系数文件,获取对应的插值权重系数,构成插值权重矩阵; 步骤1-6 :生成动态剖分分量模式B的进程将基于网格B的静态剖分作为目标网格单元集合搜索相应的插值权重矩阵,得到网格A的网格单元集合,然后根据基于网格A的静态剖分,求出不在该进程上的网格单元集合作为子区域信息,将子区域信息和基于网格A的静态剖分保存在一起,建立新的并行剖分,该并行剖分为动态剖分,采用该操作流程生成的动态剖分记为同一种剖分类型; 步骤1-7 :将动态剖分和静态剖分进行合并,统一为并行剖分首先建立一个并行剖分链表,然后在并行剖分对象中搜索相同网格名的静态剖分和动态剖分,再在结果中搜索相同剖分类型的动态剖分对象,最终的搜索结果存在三种情况情况一,如果仅包含一个静态剖分,则将其加入到并行剖分链表中;情况二,如果包含一个静态剖分和一个动态剖分,则将动态剖分加入到并行剖分链表中;情况三,如果包含一个静态剖分和两个以上的动态剖分,则首先合并动态剖分的子区域信息,将合并后的子区域信息与静态剖分保存在一起,建立新的并行剖分,将其加入到并行剖分链表中,最后释放所有未加入到并行剖分链表中的动态首1J分和静态首1J分的内存空间; 步骤1-8 :分量模式A和分量模式B根据并行路由配置和合并后的并行剖分初始化并行路由,在并行路由配置中描述了分量模式A和分量模式B需要建立进程间的通信映射关系,根据不同类型的并行剖分建立相应的并行路由,具体操作为首先,分量模式A的进程与分量模式B的进程两两握手,交换基于网格A的并行剖分,每个进程将自身基于网格A的并行剖分与通过交换得到的对方完整的并行剖分进行求交,确定进程所负责网格单元在对方分量模式的哪个进程上,建立起通信映射关系; 步骤1-9 :初始化剖分后网格根据合并后的并行剖分的网格单元索引号从剖分前网格中获取并行剖分所包含的网格单元信息,申请内存空间保存这部分网格单元信息,建立剖分后网格,最后释放保存剖分前网格的内存空间; 步骤1-10 :初始化数据缓冲区根据耦合物理量基本信息初始化耦合物理量命名空间,根据合并后的并行剖分的网格单元数来申请相应大小的内存空间用于管理耦合物理量数据的数据缓冲区; 基于子区域映射的耦合运行阶段,具体包括以下步骤 步骤2-1 :首先,两个分量模式执行并行通信,分量模式A的进程根据并行路由将耦合物理量数据从数据缓冲区中取出并打包,发送给分量模式B,分量模式B的进程接收分量模式A发送的数据包; 步骤2-2 :然后分量模式B的进程根据并行路由进行解包,将数据复制到数据缓冲区的对应位置上; 步骤2-3 :完成并行通信后,分量模式B的进程直接进行插值计算,不再执行MPI通信来收集数据; 耦合结束阶段,分量模式通过调用耦合器提供的结束接口函数去释放耦合相关的内存空间,结束MPI通信等收尾工作; 2)设分量模式A和分量模式B进行耦合,分量模式A基于网格A,分量模式B基于网格B ;耦合物理量数据从分量模式B流向分量模式A,分量模式B执行并行插值计算,将网格B上的耦合物理量数据插值到网格A上,网格B为源网格,网格A为目标网格,然后分量模式B发送耦合物理量数据,分量模式A接收耦合物理量数据。
基于子区域映射关系的耦合初始阶段,具体包括以下步骤 步骤1-1 :从namelist文件中读取namelist信息,包含了稱合相关的运行参数及数据文件信息,这部分信息由用户给定; 步骤1-2 :根据通信配置中的通信信息初始化MPI通信域,包括地球系统模式的全局通信域和分量模式A和B的局部通信域,通信配置信息由用户给定; 步骤1-3 :初始化静态剖分根据剖分配置中的并行剖分配置信息初始化静态剖分,其中分量模式A基于网格A和分量模式B基于网格B的并行剖分由分量模式自身提供,通过调用耦合器提供的初始化接口函数进行参数导入,分量模式B基于网格A的并行剖分由用户在剖分配置中给定剖分方式,在剖分初始化过程中调用相应的剖分算法生成,该步骤中的并行剖分为静态剖分; 步骤1-4 :初始化剖分前网格分量模式的进程从网格配置中包含的网格数据文件中读取完整的网格信息,该网格信息为剖分前网格; 步骤1-5 :初始化插值算法分量模式B的进程将基于网格B的静态剖分作为源网格单元集合搜索插值配置中包含的插值系数文件,获取对应的插值权重系数,构成插值权重矩阵; 步骤1-6 :生成动态剖分分量模式B的进程将基于网格B的静态剖分作为源网格单元集合搜索相应的插值权重矩阵,得到网格A的网格单元集合,然后根据基于网格A的静态剖分,求出不在该进程上的网格单元集合作为子区域信息,将子区域信息和基于网格A的静态剖分保存在一起,建立新的并行剖分,该并行剖分为动态剖分,采用该操作流程生成的动态剖分记为同一种剖分类型; 步骤1-7 :将动态剖分和静态剖分进行合并,统一为并行剖分首先建立一个并行剖分链表,然后在并行剖分对象中搜索相同网格名的静态剖分和动态剖分,再在结果中搜索相同剖分类型的动态剖分对象,最终的搜索结果存在三种情况情况一,如果仅包含一个静态剖分,则将其加入到并行剖分链表中;情况二,如果包含一个静态剖分和一个动态剖分,则将动态剖分加入到并行剖分链表中;情况三,如果包含一个静态剖分和两个以上的动态剖分,则首先合并动态剖分的子区域信息,将合并后的子区域信息与静态剖分保存在一起,建立新的并行剖分,将其加入到并行剖分链表中,最后释放所有未加入到并行剖分链表中的动态首1J分和静态首1J分的内存空间; 步骤1-8 :分量模式A和分量模式B根据并行路由配置和合并后的并行剖分初始化并行路由,在并行路由配置中描述了分量模式A和分量模式B需要建立进程间的通信映射关系,根据不同类型的并行剖分建立相应的并行路由,具体操作为首先,分量模式A的进程与分量模式B的进程两两握手,交换基于网格A的并行剖分,每个进程将自身基于网格A的并行剖分与通过交换得到的对方完整的并行剖分进行求交,确定进程所负责网格单元在对方分量模式的哪个进程上,建立起通信映射关系; 步骤1-9 :初始化剖分后网格根据合并后的并行剖分的网格单元索引号从剖分前网格中获取并行剖分所包含的网格单元信息,申请内存空间保存这部分网格单元信息,建立剖分后网格,最后释放保存剖分前网格的内存空间; 步骤1-10 :初始化数据缓冲区根据耦合物理量基本信息初始化耦合物理量命名空间,根据合并后的并行剖分的网格单元数来申请相应大小的内存空间用于管理耦合物理量数据的数据缓冲区; 基于子区域映射的耦合运行阶段,具体包括以下步骤 步骤2-1 :首先,分量模式B的进程直接进行并行插值计算,不再执行MPI通信来收集数据,将插值计算结果存放到数据缓冲区中。由于没有执行通信,部分源网格单元上的耦合物理量数据在其它进程上进行了计算,所以这里插值计算所得为不完全结果; 步骤2-2 :两个分量模式执行并行通信,分量模式B的进程根据并行路由将耦合物理量数据从数据缓冲区中取出并打包,发送给分量模式A,分量模式A的进程接收分量模式B发送的数据包; 步骤2-3 :分量模式A的进程根据并行路由进行解包,由于插值计算所得为部分计算结果,需要将分量模式B的不同进程发送来的相同网格单元上的耦合物理量数据进行合并,分量模式A的进程首先将保存这部分耦合物理量数据的数据缓冲区置0,然后根据并行路由将耦合物理量数据加到数据缓冲区对应的位置上; 耦合结束阶段,分量模式通过调用耦合器提供的结束接口函数去释放耦合相关的内存空间,结束MPI通信等收尾工作。
全文摘要
本发明涉及一种用于地球系统模式的并行耦合方法,属于地球系统模式的耦合技术领域。该方法分为三个阶段1.基于子区域映射关系的耦合初始阶段,该阶段通过对已有的耦合初始阶段运行流程进行改动,生成基于插值算法的动态剖分和并行路由,用于并行通信和并行插值;2.基于子区域映射的耦合运行阶段,该阶段通过对已有的耦合运行阶段并行通信和并行插值的运行流程进行相应改动来实现;3.耦合结束阶段,该阶段采用已有方法。本发明方法基于子区域映射,将耦合器的并行通信与并行插值进行联合考虑,用于消除耦合器并行插值过程中的通信操作,从而减少整个系统的通信次数。该方法应用于耦合器中,旨在提升地球系统模式的耦合性能。
文档编号G06F9/54GK102707932SQ20121015294
公开日2012年10月3日 申请日期2012年5月16日 优先权日2012年5月16日
发明者何健, 季颖生, 杨广文 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1