并行程序设计模型

来源:互联网 发布:机械联结烙印矩阵多贵 编辑:程序博客网 时间:2024/06/16 13:15

并行程序设计模型

并行程序设计模型(Parallel Program Model)是一种程序抽象的集合,是建立在硬件和内存体系结构层次之上的概念[26]。比较常用的模型有:数据并行模型、消息传递模型和共享存储模型。

数据并行模型

数据并行(Data-Parallel)模型主要任务是局部计算和数据选路操作,通常应用于细粒度问题的求解[27]。该模型在SIMD计算机与SPMD计算机上均可以实现,这取决于粒度的大小。

数据并行具有以下特点:

1)单线程:从程序员角度看,这类程序具有单一控制线,即只有一个进程在执行;

2)并行操作于聚合数据结构上:一个单步语句,可以同时作用在不同数组元素的多个操作上;

3)松散同步:在每条语句之后,都有一个隐含的同步;

4)全局命名空间:数据并行程序中所有变量都存储于单一地址空间内,因而只要满足变量的作用域规则,任何语句可以访问任何变量;

5)隐式相互作用:由于每条语句之后隐式同步的存在,所以数据并行程序中不需要显示同步语句,通信也可以隐式完成;

6)隐式数据分配:数据可以自动分配,而不需要程序员干预。

消息传递模型

消息传递(Message Passing)模型中,不同处理器节点上的进程需要通过网络发送消息来实现通信。这里的消息包括数据、指令以及信号等。相比于数据并行模型,消息传递模型更加灵活,不仅可以在共享存储式多处理机上运行,也可以在分布存储式多处理机上运行[28],而且更加适合与开发粒度比较大的并行程序。

消息传递模型有以下特点:

1)多进程:在消息传递模型中,程序包含多个进程,而且各进程拥有独立的控制线,可以执行不同的程序代码,可以实现控制并行以及数据并行;

2)异步并行性:在此模型中,各进程异步执行,因此需要用户显示同步各个进程;

3)分开的地址空间:各个进程存于不同的地址空间内,每个进程的变量对于其他进程是不可访问的;

4)显示相互作用:各进程只能在其所拥有的数据上进行计算,通信、同步等相互作用问题需要程序员显示解决;

5)显示分配:数据和负载需要程序员显示分配给各个进程。

目前,消息传递模型已经成为MPPCOW的主要编程方式,标准库PMVMPI的使用也增强了这种模型的可移植性。其中,MPIMessage Passing Interface)于19945月由美国国家实验室和几所大学共同开发成功,它实际上是一种消息传递函数库的标准,由于在开发过程中吸取了许多其它消息传递系统的优点,MPI目前已经成为最主流的并行编程环境之一。MPI具有以下优点:易用性和可移植性;异步通信功能完备;定义精确且详细。

在基于MPI的编程模型中,各进程通过调用库函数发送、接收消息,共同组成计算过程。通常,在程序初始化时就会生成一组固定的进程,一般一个处理器生成一个进程,这些进程所运行的程序可以相同也可以不同,在进程间的通信也可以是点对点通信或者是群组通信。MPI编程实际上就是计算与通信交织的过程。

共享存储模型

在共享存储模型中,各进程可以通过访问公共存储器中的共享变量而实现通信。和数据并行相比,相同点在于拥有全局命名空间;和消息传递模型相比,相同点在于多线程和异步。这种编程模式具有可编程性强和系统可用性高的优点,因而在科学和工程计算中被广泛应用。

OpenMP标准是共享存储体系结构上的一种编程模型,具有简单、移植性好以及可扩展等优点,目前已经成为共享存储系统编程的工业标准。OpenMP本质上来说,是对基本语言的扩展,其规范中定义了制导指令、运行库和环境变量,从而能够保证程序的可移植性,并且根据标准将程序并行化。其中,制导指令对程序语言进行了扩展,从而可以支持并行区域、工作共享以及同步构造,实现数据共享和私有化。而运行库和环境变量则支持用户对程序执行环境的调整。目前,已经有很多软件和硬件厂商支持OpenMP,可以应用于UNIXWindows NT等多种平台,CC++Fortran等语言也都指定了相应的实现规范。

0 0
原创粉丝点击