OpenMPI、MapReduce简单比较
2013-08-16 15:38
232 查看
目前最重要的两种并行编程模型是数据并行和消息传递。数据并行编程模型的编程级别比较高 编程相对简单 但它仅适用于数据并行问题 消息传递编程模型的编程级别相对较低 但消息传递编程模型可以有更广泛的应用范围。
数据并行即将相同的操作同时作用于不同的数据,使用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的操作即可,系统承担了容错、负载均衡,但使用不灵活,只适合固定模式的计算。
数据并行即将相同的操作同时作用于不同的数据,使用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的操作即可,系统承担了容错、负载均衡,但使用不灵活,只适合固定模式的计算。
相关文章推荐
- OpenMPI、MapReduce简单比较
- C的一些简单习题(5)--两个字符串比较
- Go1.7做一了一个简单的远程目录比较工具
- POJ ACM 1120(比较简单)
- 宏和函数的简单比较
- 比之前那个版本更简单的C语言实现的比较大小
- 如何使用Python为Hadoop编写一个简单的MapReduce程序
- 如何使用Python为Hadoop编写一个简单的MapReduce程序(这个人T字还有好几篇精华的可以看)
- chown与chmod的简单比较
- with(), within() 和 transform()的简单比较
- 几种开源工作流引擎的简单比较
- 开发板2440nor flash与nand flash启动的简单比较
- Hadoop1.x 的MapReduce 简单例子WordCount
- 几种开源工作流引擎的简单比较(转)
- mongoDB使用mapreduce实现简单的统计功能
- Python3 入门教程 简单但比较不错
- java线程当中 sleep() join() yield()方法的简单比较以及如何保护共享数据介绍
- bitbucket和github的简单比较
- 05-if和switch的简单比较
- R语言︱文本挖掘——jiabaR包与分词向量化的simhash算法(与word2vec简单比较)