杜 巍,牛 沛,黄伟建
(河北工程大学 信息与电气工程学院,河北 邯郸056038)
目前的水质预报系统多来自于海洋研究模型。由于这些模式大部分是串行代码编写,在业务化应用过程中,计算效率较低,具有一定的局限性。尤其是短期预报系统,力争在短的时间内完成运算任务是其基本需求。本文以胶州湾水质预报系统为例,将MPI并行技术应用于水质模型,并且分别采用组通信模式和非阻塞通信模式,将水质模块的问题分解为多个子任务,并在基于MPI消息传递模式的集群系统中进行运算。
在挖掘和整理历史观测数据的基础上,利用现有的浮标,海洋站资料,对胶州湾及邻近海域进行春季或夏季稳定天气条件下多参数的走航与连续观测。具体的系统模型所划分的模块如图1所示。
图1 水质预报模型
由图1可知,区域大气模式是整个系统的启动模块,其分别为流域面源模式提供降水等,为黄海大区水动力模式和胶州湾小区水动力模式提高动量和热量强迫,为水质模型提供海表光强;而流域面源模式是研究胶州湾流域对海湾的营养物质输送通量等,他具体的作用是为胶州湾水动力模型提供河流淡水输入量,为水质模型提供陆源营养物质的通量;黄海大区水动力模式是为胶州湾小区水动力模式提供一个开边界,胶州湾小区水动力模式为水质模型提供了海流和扩散系数等。经过各个模块的耦合,最终监测的数据经过水质模块的计算,并在水质模块部分输出。
水质模型的网格设置与水动力模型小区一致。模型包括氮、磷、硅、溶解氧、COD、浮游植物、浮游动物、水体碎屑等变量,考虑迳流、流域面源输入、大气沉降、沉积物-水界面物质通量、与外海物质交换等外部过程,以及浮游植物光合作用、呼吸代谢、浮游动物摄食等内部过程。具体直观的水质模式概念图如图2所示。
图2 水质模式概念
由图2可以看到,水质预报可以通过一级,二级,三级,四级物质变化过程分别对氮、磷、硅、溶解氧、COD、浮游植物、浮游动物、水体碎屑等等各个物质进行监测衡量。
1.2.1 MPI简介
MPI全称消息传递接口是 Message-Passing Interface的缩写。它由全球的政府,科研以及工业部门联合建立的一种标准,提供了一个可移植、高效、灵活的消息传递接口库。它是目前为止最为通用的一种并行编程方式,同时也是分布式并行系统中的一个主要编程环境。各大计算机厂商和科研部门定义了MPI标准中的一组函数接口,用于进程间的消息传递。另外,除各个厂商提供的系统外,一些有能力的高校、科研部门也正在开发一些免费的通用的MPI系统。
头文件、相应的运行调试环境和一组库,构成一个完整的MPI系统。其中MPI并行程序通过调用其自身库中的函数完成消息的传递,并在编译时与MPI库相连接。而一个MPI并行程序的启动、退出、调试和跟踪等方面的支持则由其系统提供的运行环境所负责。MPI程序的框架结构图如图3所示。
图3 MPI程序的框架结构
图3中的第一部分是MPI函数库的头文件形式,Fortran语言中应用mpif.h;第二部分定义整个程序中所用到的与MPI相关的变量;第三部分是有关MPI程序的初始化,使用的函数是MPI_INTT (IERR);第四部分是程序体的计算与通信,其中进行通信的函数由MPI消息传递接口提供;第五部分问MPI程序的结束,使用的函数是MPI_FINALIZE (IERR)。
MPI既有一致性好、功能强大、效率高等多项优点,而且在对于处理海洋环境模型的应用更为普遍。文中是以MPICH2为测试环境,运行于Linux服务器版操作系统的集群上,编译环境为Intel Fortran 90编译器。
1.2.2 组通信的基本思想及其特征
组通信调用的通信域即限定了该组通信是由哪些进程参加以及该组通信的上下文,而该通信域是可以和点对点通信共用的,MPI可以保证由这两者调用产生的消息不会发生相混淆。组通信实现的功能一般有3个即:通信,同步和计算。
其中,通信的主要功能是完成组内数据的传输;同步功能则完成的是在组内特定地点使所有进程保持一致;计算功能相对比较复杂,主要是对一些特定的数据进行处理。
1.2.3 非阻塞通信的基本思想及其特征
由于通信需要的时间较长,在阻塞通信还没有完成时,处理机就只有等待,这样就造成了处理机计算资源的浪费。而非阻塞通信可以使计算和通信重叠,通信操作不必执行完就可以返回,而此时处理机可以同时进行有关计算的操作,从而提高整个程序的执行效率。
对于非阻塞通信,通信调用的返回并不意味着整个通信过程的完成,因此,还需要引入新的方法或语句用来检查该消息是否已成功接收或发送。
1.3.1 组通信在水质预报模块的实现
胶州湾水质预报系统中的水质部分的计算占整体系统部分的一半左右,所以,对这部分程序进行并行的过程中,并行效率是有限的。
胶州湾水质预报系统中采用的是C网格的形式,在三维坐标 (i,j,k)下,分别对水质中的氮,磷,浮游动物,浮游植物,硝酸盐,亚硝酸盐,铵盐,磷酸盐,硅酸盐,碎屑,化学需氧量进行物质的监测。在对水质中物质的扩散分为水平扩散和垂向两种,其中,垂向扩散的值的计算不需要数据的传递,但是,水平扩散方向的计算需要相邻网格点的计算结果,所以就涉及到MPI消息传递函数。
本系统组通信的设计思想是把网格点进行划分,即总网格数位i*j*k个,在对任务区域进行划分的时候有多种方法,可以3个方向i,j,k同时划分,也可以部分进行划分,由于本系统采用的是Fortran语言,其数据的存储遵循列优先存储的,所以,对j方向上进行划分时在对各个进程进行数据传递时的传递量相对要少一些,这样有利用减少消息传递时间。假设有p个CPU,则将网格区域划分为p块,前p-1个CPU执行j/p个行整数网格点,第p个CPU执行j-·(p-1)个网格点,由于进程在计算临界点的值时需要相邻的进程的数据值,因此,每个进程的网格点数将多划分2*i*j个,若将其划分写成代码的形式,如下:
其中,jbegin_col和jend_col代表每个进程中j方向的起始值和结束值,myid表示进程号,size表示整个系统中的进程总数。jm指j的总网格数。
划分完需要计算的网格区域后,就是对水质中各个物质计算的水平扩散所需的数值进行传递,在此,由于每个进程之间所要传递的数据有氮,磷,浮游动物,浮游植物,硝酸盐,亚硝酸盐,铵盐,磷酸盐,硅酸盐,碎屑,化学需氧量,所以,每个量都在一个数组中,在此首先需要数据的打包,把每个进程中需要传递的数据打包在一个缓冲区中,然后再通过组通信函数进行传播即可。打包函数如下所示:
其中,INBUF指准备打在包中的输入缓冲区,INCOUNT指输入元素的个数,DATATYPE指数据类型,OUTBUF指打包缓冲区,OUTSIZE指用字节数定义的打包缓冲区的大小,POSITION指打包缓冲区的当前位置,COMM指打包消息的通信子。把所有的数据打包完成后,就需要数据的传递,在此应用到组通信函数中的广播函数,即如下所示:
其中,BUFFER指缓冲区的首地址,COUNT指缓冲区中元素的个数,DATATYPE指缓冲区的数据类型,ROOT指以它为源进行广播的进程编号,COMM指通信子。通过这个函数,就把每个进程中需要其他进程的数据通过消息传递得到。最后,还需要对数据进行进一步的处理,就是拆包,拆包函数如下所示:
MPI_UNPACK (INBUF,INSIZE,POSITION,OUTBUF,OUTCOUNT,DATATYPE,COMM,IERROR)
其中,INBUF指拆包缓冲区,INSIZE指用字节数定义的拆包缓冲区的大小,POSITION指打包缓冲区的当前位置,OUTBUF指输出数据缓冲区,OUTCOUNT指输出数据缓冲区元素的个数,DATATYPE指数据类型,COMM指通信子。
通过以上方法,即可实现水质预报系统的组通信数据传递的实现。
1.3.2 非阻塞通信在水质预报模块的实现
组通信在水质预报模块中的实现,虽然在通信上比点到点的通信尽量缩短了通信时间,但是没有达到通信时间与计算时间的同步,而非阻塞通信可以实现以上目的,使得系统在运行的过程当中效率更高。由于水质模块代码部分运行时间占整个编程模块的一半左右,所以,可以通过非阻塞通信的方式把需要传递的数据在水动力计算的时候进行传递,这样,就可以使得通信基本不占用运行时间。非阻塞的函数传递采用的函数如下所示:
MPI_ISEND(BUF,COUNT,DATATYPE,DEST,TAG,COMM,REQUEST,IERROR)
MPI _IRECV (BUF, COUNT, DATATYPE,SOURCE,TAG,COMM,REQUEST,IERROR)
以上分别表示非阻塞数据的发送和接收,其中,BUF指所要发送或接收消息数据的首地址,COUNT指发送或接收消息数组元素的个数,DATATYPE指发送或接收消息的数据类型,DEST指发送消息的进程标号,SOURCE指接收消息的进程编号,TAG指消息标签,COMM指通信子,REQUEST指请求句柄以备将来查询。MPI_ISEND和MPI_IRECV不需要等待发送或接收消息完成就可执行其余的任务,看发送或接收过程是否结束,通过以下函数即可:
其中COUNT指请求句柄的个数,ARRAY_OF_REQUESTS指请求句柄数组,INDEX指已经完成通信操作的句柄指标,STATUS指消息的状态。
通过以上函数,将消息传递的任务放在水动力模块进行,这样,使得在计算水动力的同时,又对水质部分需要消息传递的函数进行通信,达到了通信与计算的同步。
将系统进行并行进行运行,如图4所示分别为组通信,非阻塞通信,串行运算结果在某一时刻的溶解氧的值的变化。结果显示,无论是组通信还是非阻塞通信,都与串行运算结果一致。因此,说明无论是组通信还是非阻塞通信对于水质预报系统的并行都是可行的。
图4 溶解氧的某时刻输出值
首先,对比此系统的串行程序在集群系统上面的运行速度,改进后的组通信传递的并行程序在集群系统上面的运行速度,改进后的非阻塞传递的并行程序在集群系统上面的运行速度,绘制出如5图所示。
图5 运行时间
图5表示预报系统预报多少天以后的实验数值所需要花费的时间。其中,串行程序在集群上是以1CPU的形式提交任务的,组通信的并行程序和非阻塞的并行程序都是2CPU并行的,即把计算任务划分为两部分。从图中可以看到,并行的计算时间远远小于串行程序计算的时间,并且随着预报时间的增长持更明显的趋势。由于通讯时间和计算时间不能够保持同步。所以,通过以上实验数据可知,组通信的运行时间比非阻塞通信稍微长了一些。因此,在此水质预报系统中,非阻塞通信的并行效果要稍好一些,但此结论仅仅只针对目前这种对系统的一部分代码进行并行的情况之下。
其次,对非阻塞通信下的划分区域数不同对程序进行性能测试,为了更能说明并行划分对系统的运算的影响,此时,只测试系统在水质部分的运行时间,所绘制结果见表1。
表1中的性能测试结果表明,当进程数目不超过8个,非阻塞的并行效率基本在80%以上,当进程数不断的增加,虽然并行程序仍然保持加速,但不再保持现行加速比,这与测试问题的规模有关,导致这种现象的最大因素就在于划分块数的增加导致的消息传递所需要传递的数据量数也随之增加,如果测试的数据计算量相当大的话,并行效率还是会增加的。所以,在对程序进行并行的过程中要进行大量数据的测试后,才能得到程序运行并行化的相对效率比较高的方法。
表1 性能测试结果
本研究取得预想的结果,效率达到了显著提高。通过组通信与非阻塞通信在系统中的应用的比较发现,非阻塞通信的消息传递方式对胶州湾水质预报系统的部分模块的并行有很大的效果。所以,任何系统的高效率化都需要与实际相结合,采取最适合的方法进行。本研究的局限性是没有考虑到I/O的问题,如果考虑到I/O的问题,则运算效率将会有更可观的提高,下一步研究将会考虑更加深入的把并行技术应用到胶州湾水质预报模式当中。
:
[1]CHEN Dazhi,ZHAO Rongcai,YAO Yuan,et al.Messagepassing code generation algorithm in the MPI automatic parallelizing compilation system [J].Computer Science,2012,39(6):301-304 (in Chinese). [陈达智,赵荣彩,姚远,等.MPI自动并行化编译系统中消息传递代码生成算法 [J].计算机科学,2012,39 (6):301-304.]
[2]LIU Z,WEI H,BAI J,et al.Nutrients seasonal variation and budget in Jiaozhou bay,China:A 3-dimensional physicalbiologicalcoupled model study [J].Water,Air and Soil Pollution:Focus,2007,7 (6):607-623.
[3]George L Mellor.Users guide for a three-dimensional,primitive equation,numerical ocean model,program in atmospheric and oceanic sciences [J].Princeton,NJ:Princeton University,2008,5:44-071.
[4]WANG Min,WANG Ming,YANG Ming.Parallel computing research of Xiaolangdi reservoir three-dimensional mathematical model[J].Yellow River,2012 (5):25-27 (in Chinese).[王敏,王明,杨明.小浪底水库三维数学模型并行计算研究[J].人民黄河,2012 (5):25-27.]
[5]http://www.aos.princeton.edu/WWWPUBLIC/htdocs.pom/.
[6]ZUO Yiming,CUI Guangbai.Parallel computation for 2Dflow model[J].Advances in Water Sciences,2008,19 (6):846-850(in Chinese).[左一鸣,崔广柏.二维水动力模型的并行计算研究 [J].水科学进展,2008,19 (6):846-850.]
[7]YI Junhan.Parallel programming model based on multicore processor[J].Computer Engineering,2009,35 (8):62-64.
[8]XIONG Yuqing.The point-to-point communication obstruction of local clogging point-to-point communication simulation [J].Microelectronics and Computer,2009 (10):144-146. (in Chinese).[熊玉庆.非阻塞点到点通信对局部阻塞点到点通信的模拟 [J].微电子与计算机,2009 (10):144-146.]
[9]WANG Lei,TIAN Fuqiang,HU Heping.Physically based hydro logical model using finite volumemethodsbased on a triangulated irregular network [J].Advances in Water Sciences,2011,21 (6):734-741 (in Chinese). [王蕾,田富强,胡和平.基于不规则三角形网格和有限体积法的物理性流域水文模型 [J].江苏:水科学进展,2010,21 (6):734-741.]
[10]Daz Mart n J C,Rico Gallego J A.An MPI-1com-pliant.thread-based implementation [C]//Berlin,Heidelberg:Proceedings of the EuroPVM/MPI,2009:327-328.