并行编程模型的研究

  并行编程模型 是并行计算,尤其是并行软件的基础,也是并行硬件系统的导向,在面临多核新挑战的情况下,什么样的并行编程模型在未来能成为主流,还很难说。至少到目前,还处于百家争鸣的时代,很多模型提出,很多在应用,下面我们简单介绍一下当前的并行编程模型现状。

并行编程模型一直是并行计算研究领域中的重点内容,它和并行计算机体系结构紧密相关。共享存储体系结构下的并行编程模型主要是共享变量编程模型,它具有单地址空间、编程容易、可移植性差等特点,其实现有OpenMP和Pthreads等。分布式存储体系结构下的并行编程模型主要有消息传递编程模型和分布式共享编程模型两种:消息
传递编程模型的特点是多地址空间、编程困难、可移植性好,其实现有MPI, PVM等;分布式共享编程模型是指有硬件或软件的支持,在分布式体系结构下实现的具有共享变量编程模型特点的编程模型。后者可以分别按照硬件或软件的实现分为DSM和SVM,其实现有TreadMark和JiaJia等,目前研究热点的分割全局地址空间(PGAS)模型的研究有 UPC等代表,具有很强的发展潜力。

多层次的SMP集群是由共享内存的SMP作为超节点,而超节点间采用消息传递,内存不能直接访问。SMP集群同时具备了共享存储和分布式存储体系结构的特点,因而传统并行体系结构下的编程模型己经不再完全适用于它。根据SMP集群多级并行结构的特点,很自然地考虑到将共享存储编程模型与分布式存储编程模型相结合。目前国内外学术界对于SMP集群体系结构上编程模型的选择仍然存在着分歧,为此已经提出了多种方案,有的侧重性能有的侧重可移植性和易用性,孰优孰劣,尚无定论。但从编程模型的评价标准— 计算性能和易用性综合的角度考虑,Openw 优于Thread,使得MPI+OpenMP的混合编程模型得到了广泛的应用。

混合编程模型提供了节点间和节点内的两级并行机制,它的优势在于结合了进程级的粗粒度并行(例如区域分解)和线程级的细粒度并行(如循环并行)。实践证明,在很多情况下,其执行效率高于纯MPI或OpenMP程序,解决了一些它们无法解决的问题,

主要有:

1、负载平衡问题
在 MPI并行程序中可能出现负载不平衡的问题,使程序的性能受损。而在混合编程模型中,OpenMP能够很好地解决该问题,弥补了MPI的不足,从而提高并行程序的性能。

2、 MPI进程数目受限的问题
一些应用问题存在所需进程数目与处理机数目不匹配的问题。若前者太小,则不能充分发挥机器的效率:太大,又无法执行。使用混合编程模型,首先执行MPI分解策略,启动理想数目的进程,再用OpenMP进一步分解子任务,则可以使所有处理机得到高效利用。

3、通信带宽和延迟问题
MPI并行程序进程间的通信带宽和延迟问题可能会严重影响程序的执行性能。混合模型的程序将减少通信的次数,并且OpenMP的线程级并行具有较小的延迟,可缓解纯MPI程序的问题。

4、细粒度并行问题
在用 OpenMP来编写并行程序时,虽然粒度太小也会增加系统的开销,但相对而言远没有MPI那样严重。当应用问题的并行粒度比较小时,混合编程模型对于SMP集群这样的机器来说是个很好的选择。

在并行编程模型的多级并行,混合编程方面国际国内都做了一些有益的探索,主要有加州伯克利分校,伊利诺伊大学,美国航天局,美国能源部的几个国家实验室,英国爱丁堡大学,德国亚琛大学以及SGI,Sun,Intel,IBM等大公司;国内则主要是中科院计算所,国防科大,北京大学,国家气象中心等单位。

你可能感兴趣的:(并行编程模型的研究)