并行编程模型
目前最重要的并行编程模型是数据并行和消息传递,数据并行编程模型的编程级别比较高,编程相对简单,但它仅适用于数据并行问题;消息传递编程模型的编程级别相对较低,但消息传递编程模型可以有更广泛的应用范围。

数据并行编程模型
数据并行即将相同的操作同时作用于不同的数据,数据并行编程模型提供给编程者一个全局的地址空间,一般这种形式的语言本身就提供并行执行的语义,因此对于编程者来说,只需要简单地指明执行什么样的并行操作和并行操作的对象,就实现了数据并行的编程
比如对于数组运算,使得数组B和C的对应元素相加后送给A,则通过语句
A=B+C(或其它的表达方式)
就能够实现上述功能,使并行机对B、C的对应元素并行相加,并将结果并行赋给A。因此数据并行的表达是相对简单和简洁的,它不需要编程者关心并行机是如何对该操作进行并行执行的。
消息传递并行编程模型
消息传递即各个并行执行的部分之间通过传递消息来交换信息、协调步伐、控制执行。消息传递一般是面向分布式内存的,但是它也可适用于共享内存的并行机。
消息传递为编程者提供了更灵活的控制手段和表达并行的方法,一些用数据并行方法很难表达的并行算法,都可以用消息传递模型来实现,灵活性和控制手段的多样化,是消息传递并行程序能提供高的执行效率的重要原因。
消息传递模型一方面为编程者提供了灵活性,另一方面,它也将各个并行执行部分之间复杂的信息交换和协调、控制的任务交给了编程者,这在一定程度上增加了编程者的负担,这也是消息传递编程模型编程级别低的主要原因。虽然如此,消息传递的基本通信模式是简单和清楚的,学习和掌握这些部分并不困难,因此目前大量的并行程序设计仍然是消息传递并行编程模式。

消息传递与数据并行的对比

数据并行与消息传递并行编程模型的对比
数据并行与消息传递并行编程模型

对比内容
数据并行
消息传递
编程级别
适用的并行机类型
SIMD/SPMD
SIMD/MIMD/SPMD/MPMD
执行效率
依赖于编译器
地址空间
单一
多个
存储类型
共享内存
分布式或共享内存
通信的实现
编译器负责
程序员负责
问题类
数据并行类问题
数据并行、任务并行
目前状况
缺乏高效的编译器支持
使用广泛



讲解:
不同的并行编程模型也就是不同的通过并行程序解决问题的模式,数据并行的主要特征是以数据为中心,通过对数据的划分和并行处理来解决问题,消息传递当然也可以实现上述功能,但是消息传递在问题的表述上更具体,更低级,可以解决的问题相对于数据并行模型来说也更广泛。在一定程度上,可以把数据并行看作是消息传递的特殊形式。