https://github.com/HPSCIL/mcRPL
联系:
关庆锋教授 guanqf@cug.edu.cn
彭宣童同学 994684265@qq.com
引言
随着大数据时代的到来,地理空间数据的处理和分析往往面临数据密集和计算密集的挑战。极大的数据量与的极高的计算复杂度使得部分地理空间计算算法的可扩展性低、可应用性低。地理空间领域中广泛使用的栅格数据(如遥感影像、街景图像、土地覆盖与土地利用数据、数字高程模型等)大都是由规则排列的网格组成,每个网格的处理与分析具有一定的独立性,因此栅格计算算法可并行性往往较高。使用并行计算工具解决栅格计算的性能瓶颈是一种可行的解决方案。然而,并行编程并不是一项容易的任务。开发并行栅格计算应用的复杂度依然很高,已经成为了并行计算在地理空间研究与应用中被广泛采用的主要障碍之一。
为了解决并行计算开发难的问题,许多栅格并行计算的可编程框架被开发出来,通过隐藏并行计算细节和提供简单易用的开发接口,以降低栅格并行计算程序的开发复杂度。典型的栅格并行计算框架包括:pRPL (https://github.com/HPSCIL/pRPL; Guan & Clarke, 2010; Guan et al., 2014)、PaRGO (Qin et al., 2014)、以及PCML (Shook et al., 2015)。这些开发框架,要么是适用于多核CPU或者CPU集群构架,要么是适用于单GPU构架。随着并行计算技术的发展,CPU/GPU异构集群构架获得了越来越多的关注。CPU/GPU异构集群构架结合了多个CPU和GPU,其计算性能相较于CPU集群构架要强大得多。然而,在CPU/GPU异构集群下的实现并行算法的复杂程度,远高于CPU集群构架下或者单个GPU环境下的并行编程。目前,还缺乏一个适用于CPU/GPU异构集群构架下的栅格并行计算框架。
所以,本研究总结栅格计算的数据流程,结合栅格计算的特性,通过封装MPI和CUDA两种并行编程库,设计并实现了一个多进程与多线程结合的栅格并行计算框架 – mcRPL (mpi+cuda Raster Processing Library)。用户在不需要深入了解并行计算实现细节的情况下也能通过简单的接口调用实现CPU/GPU异构集群架构下的栅格并行计算程序的开发。
最后本研究基于mcRPL实现了CPU/GPU异构集群架构下的并行地理元胞自动机模型mcLogisticCA,和并行遥感影像时空融合算法mcSTARFM。实验结果显示,相比基于单个CPU的串行程序,mcLogisticCA使用6个GPU取得了63倍的加速比,mcSTARFM使用6个GPU取得了264倍的加速比。
mcRPL计算框架
mcRPL的并行计算框架,结合了多进程计算模型和多线程计算模型。在计算节点层面,每个逻辑节点包含一个CPU和一个GPU,每个逻辑节点由一个MPI进程控制。mcRPL利用MPI调度进程(节点)间的任务分解、数据分发、任务调度和数据交互。在GPU计算层面,mcRPL利用CUDA控制GPU多线程进行计算。
图1 CPU/GPU异构集群下的栅格并行计算流程
CPU/GPU异构集群架构下的栅格并行计算相对于串行计算来说包含许多并行细节,这些并行细节大致可以分为GPU分配、通信、任务分解与映射、GPU多线程计算、输入/输出这几个部分。本研究将这几个重要的部分统一实现,将整个并行计算过程也通过结构化的框架进行了实现。不同的栅格计算在整个计算框架中只有GPU端的计算函数是不一样的,使用者只需要完成GPU的函数计算部分,将计算部分通过函数传入mcRPL中,使用GPU进行计算,就能像实现串行算法一样实现CPU/GPU异构集群下的并行算法,大幅度降低并行编程的复杂度。
本研究针对MPI以及CUDA的特点,采用了一些策略优化了并行计算细节,例如自适应分配合理GPU、非阻塞通信优化通信过程、合理的数据划分以及任务分配方法、根据CUDA占用率分析器设置合理的线程数量等,使得mcRPL能充分发挥GPU效率的同时保证框架的易用性。
mcRPL特点
mcRPL是采用C++实现的,能在普通的PC机(配有支持CUDA的GPU)上运行,但是在CPU/GPU异构集群架构的环境下才能发挥出较高性能。mcRPL是免费、开源、无限制、运行快速、操作方便的计算框架,是服务于栅格并行计算的中间件。该软件具有以下重要特点:
(1)支持多种型号的CUDA-enabled GPU,并自适应优化;
(2)支持多种栅格数据格式(请参阅http://gdal.org/formats_list.html);
(3)支持本地(local)、邻域(focal)、区域(zonal)和全域(global)的栅格计算类型;
(4)支持任意自定义邻域,满足不同邻域栅格计算的需求;
(4)自适应CPU/GPU集群环境,为进程分配适当的GPU;
(5)采用自适应循环任务分配,以实现更好的负载平衡;
(6)支持Windows和Linux/Unix操作系统。
效率分析与讨论
本研究基于mcRPL实现了mcLogisticCA和mcSTARFM两种栅格计算算法的并行化。实验对比了相应串行算法的效率,同时对比了基于单GPU实现的cuSTARFM算法的效率。实验结果表明,并行实现的不同的算法都取得了显著的加速效果。
对于同等计算量,LogisticCA串行计算用时11021秒,mcLogisticCA使用单CPU/GPU计算花费977秒,加速比为11.3倍。随着CPU/GPU节点数量的增加,计算所需时间也就越来越少,加速比也越来越高。使用6个CPU/GPU节点同时计算时,并行模型只需176秒就完成了相同的模拟,实现了62倍的加速。加速比与节点数量呈现线性正相关,表现出了良好的可扩展性。mcLogisticCA在一定程度上受到了CUDA编程模型的限制,导致使用GPU进行加速的效率并不是特别高,但是仍然取得了不错的加速效果。
而mcSTARFM不受CUDA编程模型的限制,能更大程度地发挥出mcRPL的效率。串行版本的STARFM耗时1006秒时,mcSTARFM使用单CPU/GPU节点计算花费17.3s,加速比到达了58.2倍。而且随着节点数量的增加,计算所需时间越来越少,加速比接近线性的增加。使用6个CPU/GPU节点时,加速比更是到达了264倍。这说明了框架可扩展性强的同时,也说明了基于mcRPL设计相关算法时,如果不存在CUDA编程模型的限制,具有不错的效率。
图2 mcLogisticCA计算时间
图3 mcSTARFM计算时间
图4 mcLogisticCA加速比
图5 mcSTARFM加速比
结论
本研究针对栅格并行计算算法开发困难且不存在CPU/GPU异构集群下的栅格并行计算框架的问题,在CPU/GPU异构集群架构下实现了一个支持多CPU/GPU节点的并行栅格计算框架mcRPL。该框架支持不同种类的栅格计算算法,并且能自适应GPU集群环境,表现出了良好的通用性。同时本研究优化了相关并行计算细节,使得mcRPL具有良好的性能和可扩展性。
欢迎关注中国地质大学(武汉)
高性能空间计算智能实验室
(HPSCIL@CUG)