OpenMPI、MapReduce简单比较

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

数据并行即将相同的操作同时作用于不同的数据,使用GPU进行编程的OpenGL、CUDA一般属于这一类。因此适合在SIMD及SPMD并行计算机上运行,例如在向量机上通过数据并行求解问题。

消息传递即各个并行执行的部分之间通过传递消息来交换信息、协调步伐控制执行消息传递一般是面向分布式内存的但是它也可适用于共享内存的并行机 消息传递为编程者提供了更灵活的控制手段和表达并行的方法一些用数据并行方法很难表达的并行算法可以用消息传递模型来实现灵活性和控制手段的多样化 是消息传递并行程序能提供的执行效率的重要原因 

消息传递模型一方面为编程者提供了灵活性另一方面 它也将各个并行执行部分之间,复杂的信息交换和协调 控制的任务交给了编程者在一定程度上增加了编程者的负担。这也是消息传递编程模型编程级别低的主要原因 。MPI属于这一类的模型,这样的计算方式,适合并行计算粒度大,大规模可扩展性并行算法。(要求用户能够很好地分解问题,组织不同进程间的数据交换)

MPI提供的功能:具体地说 包括以下几个方面

  • l 提供应用程序编程接口
  • l 提高通信效率 措施包括避免存储器到存储器的多次重复拷贝 允许计算和通信的重叠等
  • l 可在异构环境下提供实现
  • l 提供的接口可以方便 C 语言和 Fortran 77的调用
  • l 提供可靠的通信接口 即用户不必处理通信失败
  • l 定义的接口和现在已有接口 如PVM NX Express p4等 差别不能太大 但是允许扩展以提供更大的灵活性
  • l 定义的接口能在基本的通信和系统软件无重大改变时 在许多并行计算机生产商的平台上实现 接口的语义是独立于语言的

从上面看,一般MPI是不提供负载均衡和容错机制,用户需要承担的工作量很大。


从上图中可以看到,程序体计算与通信是多个进程同时执行的。所以MPI计算的时候需要知道当前进程号,任务由多少个进程并行计算。

MPI的两种最基本的并行程序设计模式 即对等模式和主从模式。可以说绝大部分MPI的程序都是这两种模式之一或二者的组合。MPI程序一般是SPMD程序 当然也可以用MPI来编写MPMD程序 但是 所有的MPMD程序 都可以用SPMD程序来表达 二者的表达能力是相同的。

在对等模式中每一个进程都要向相邻的进程发送数据 ,同时从相邻的进程接收数据。MPI提供了捆绑发送和接收操作,可以在一条MPI语句中同时实现向其它
进程的数据发送和从其它进程接收数据操作

在主从模式中,主进程将任务、数据分给所有的从进程, 然后从进程计算得出结果后,将结果传递到主进程处进行合并。这一种模式是不是很熟悉呢~mapreduce就是用的这一种模式。

由上面的介绍可以看出,MPI是属于一种简单的消息传递编程模型,较为低级,没有承担集群容错、负载均衡等功能。但他的设计更为灵活,可以使用不同的模式进行计算。

对于hadoop的MapRedue,是属于一种较为高级的计算模型,用户只需要关注map、reduce的操作即可,系统承担了容错、负载均衡,但使用不灵活,只适合固定模式的计算

你可能感兴趣的:(mapreduce,负载均衡,分布式,并行计算,并行编程)