2.3 并行计算在水资源管理领域的应用
并行计算是指利用技术手段将计算任务分成多个独立的相同子任务,并分配到多个独立的计算资源中同时进行计算,是缩短计算耗时、提高求解效率的有效手段,对大规模复杂任务计算有非常重要的现实意义。早在20世纪80年代,并行计算就已成为计算机科学领域的研究热点,但是,受到计算机软硬件配置的影响,早期的并行计算为多处理器并行,实现这一技术手段需要的硬件措施是具有多处理器配置的并行计算机平台或者集群多台计算机构成网络,软件措施则可选用的并行程序较多,常见的为并行虚拟机(Parallel Virtual Machine,简称PVM)和消息传递接口(Message Passing Interface,简称MPI)两种并行汇编标准。在水资源管理领域,解建仓等[220]采用PVM框架在计算机集群网络中实现了粗粒度并行神经网络方法求解水电系统负荷分配问题,但是并未对算法的计算效率进行对比分析,仅从理论上说明并行计算效率优于串行计算。Cheng等[221]利用PVM实现了遗传算法在新安江模型参数率定中的应用,并与串行方法的计算时间作比较,计算耗时大幅度缩短。李铁键等[222]考虑到数字流域模型具有分水岭单元划分和河网编码的可并行性特点,构建了基于MPI框架的并行计算模型,提高了计算效率。
随着计算机硬件技术的快速发展,IBM、SUN、AMD等电脑硬件生产商在21世纪初相继发布基于多核芯片的CPU处理器,标志着计算机硬件发展方向进入多核时代,多核并行也成为并行计算新的发展方向和研究热点,并在很多研究领域广泛应用[223-227]。目前,多核电脑已经非常普遍,为多核并行的普及提供了有利的硬件支持,而且,涌现出很多高效的多核并行框架实现并行计算,常见的多核并行框架主要包括以下3种。
MPI是一种消息传递编程模型,是基于进程之间通信的并行计算模式,即并行执行的各个进程作为互不相关的多个程序独立执行,进程之间的信息交互完全通过调用通信函数来完成[228]。MPI不仅适用于在多进程中执行程序,而且可以多线程并行运算,因此,MPI可应用于集群并行和多核并行,并行规模上具有很强的伸缩性。此外,MPI支持Fortran、C、C++等语言,且兼容大多数类Windows和Unix操作系统,显示了较好的实用性和可移植性。但是,MPI需要对数据进行划分,独特的进程通信模式也易导致并行效率低、内存开销大、编程难度大等缺点,因此,利用通用成熟的MPI软件包(如MPICH、LAMMPI等)可以更加高效地实现MPI并行。Li等[229]考虑到DP方法的可并行性,剖析了DP方法在MPI中的并行实现原理,并应用于350核配置的高性能计算机中求解5库水电站群最优调度策略,计算时间缩减了265h。李想等[230]采用MPI设计了GA算法种群划分的粗粒度并行模式,并在24核机器配置中对1~8进程测试了算法的并行性能,结果表明,并行遗传算法的计算效率明显优于串行计算。
Open Multi-Processing(简称Open MP)是一套支持跨平台共享内存的多线程并发的应用程序编程接口(Application Program Interface,简称API),具有很强的可移植性和可扩展性[231]。与MPI类似,Open MP支持Fortran、C、C++等语言,可以在大多数的处理器体系和操作系统中运行,并且抽象化了高层并行机制。程序员只需关心如何实现算法并行的应用接口,无需进行复杂的线程创建、同步异步以及销毁等操作,便于程序员对算法进行调试,简化了编程难度。另外,Open MP的共享存储模式不需要对数据进行划分,可面向循环级的并行开发。Zhang等[232]采用Open MP实现了DP方法在水库调度期内所有递推求解组合的并行化计算,并应用于三峡工程求解以旬为计算步长的长期最优调度策略,算法获得了较好的加速比。张忠波等[233]采用Open MP编程模式实现动态规划的并行计算,大幅提高了计算效率。由于Open MP的共享内存机制,使得它无法在计算机集群等非共享内存系统中使用,因此,Open MP常常结合MPI构建混合并行编程模型在集群系统中实现算法并行计算[234,235]。
Fork/Join(FJ)并行框架最早由学者Lea[236]在2000年提出,是“分治策略”的并行版本,即将一个一定规模的任务分解为多个规模更小的相同的独立子任务,每个任务分别执行,最后合并每个任务的结果。FJ是一种Java编码的并行框架,具有标准化的程序接口,编程人员无需考虑并行过程中非常复杂的同步、通信、死锁等问题,只需考虑如何划分子任务以及合并结果集[237-239]。目前,FJ已集成到Java Version 7中的并发库中,便于程序员的调用和扩展,也可兼容大多数应用平台和操作系统。但是,由于Java语言并发机制的独特性,FJ难以实现其他编程语言编写的优化算法。廖胜利等[240]利用FJ框架实现了PSO多种群并行计算,并应用于乌江梯级水电站群求解最优调度策略,提高了优化解的质量和计算效率。王森等[241,242]根据SDP单个时段内所有递推求解组合计算的并行性特点,采用FJ实现了并行计算,并应用于澜沧江下游梯级水电站群调度规则制定。邹强等[243]提出了一种并行混合差分进化算法,在提高算法搜索能力的同时,显著提高了计算效率,实现了水库群优化调度问题的高效求解。
除了上述在水资源系统中应用较多的并行框架之外,还有Map Reduce、TCP/IP等也是多核并行的可供选择的并行工具。但是,选择合适的并行框架需要考虑并行任务的应用性、编程语言的支持类型以及平台兼容性等因素,而且,编程人员对不同编程语言的熟悉程度也对并行框架的选择有重要的影响。