加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

知乎上的讨论-关于OpenMP与MPI的区别

(2015-06-26 17:44:21)
标签:

hpc

并行计算

openmp

mpi

分类: 课程知识扩展
http://www.zhihu.com/question/20188244

问题:从并行计算的角度,MPI 与 OpenMP 的对比?修改

就是想更好的对比两者之间的不同,当然入门一点最好。我要帮导师做这样的服务器,正在入手过程中。


回答:

5 个回答

.zm-item-answer"}" data-init="{"params": {"url_token": 20188244, "pagesize": 50, "offset": 0}, "nodename": "QuestionAnswerListV2"}" data-fixed-summary="1" style="border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; line-height: 22px;">
OpenMP和MPI是并行编程的两个手段,对比如下:
  • OpenMP:线程级(并行粒度);共享存储;隐式(数据分配方式);可扩展性差;
  • MPI:进程级;分布式存储;显式;可扩展性好。
OpenMP采用共享存储,意味着它只适应于SMP,DSM机器,不适合于集群。MPI虽适合于各种机器,但它的编程模型复杂:
  • 需要分析及划分应用程序问题,并将问题映射到分布式进程集合;
  • 需要解决通信延迟大和负载不平衡两个主要问题;
  • 调试MPI程序麻烦;
  • MPI程序可靠性差,一个进程出问题,整个程序将错误;
一看日期,这个问题比较早了,可能现在回答有点迟,我就从实际情况来回答吧.

首先,应用并行计算的目的,主要针对计算密集型任务,利用并行计算,减少计算时间.那么,采用哪种合适的并行运算库,就应该取决于目标任务的所需要的计算量,毕竟,并行化后的计算时间,可以简单地看做是成比例缩小的.比如串行任务需要360小时,那么,4核并行化后大约90小时,36核可能大约就10小时了.

然后,再观察OpenMP和MPI的两种并行运算库的特性, @李超铮已经总结的很好了.那么,若是简单地需要缩小到个位数以内的时间,那么,OpenMP可能是更好的选择,学习成本低,硬件投入也简单,买个好一点的工作站,相对于常用的笔记本,就可以很明显的缩短计算时间.但若是想要几十倍,甚至成百倍的提高计算能力,OpenMP这种需要所有CPU共享相同内存的模型,就不适用了,这时,MPI这种分布式计算模型就更为适用,特别是利用超级计算机集群进行计算时.

最后,其实这类计算密集型任务,可能利用OpenCL可能更为合适,虽然有一定的学习成本,但模型比MPI简单,扩展性比OpenMP更好,更关键的,是目前各个并行计算厂商都在支持的实际标准(de facto standard),适用于CPU和GPU平台,虽然转移平台仍需要人工去做一定修改,但OpenMP和MPI只支持CPU平台.特别的,如今一块顶级GPU的浮点数计算能力已经达到了我所在学校2004年建设的半个超级计算机集群的运算能力(50台).

http://pic4.zhimg.com/ce71e2dd7_s.jpglee philip神经网络/自然语言处理

李星hjyssg舒航 赞同
Openmp
简单。不用大改源程序,直接加#pragma就行了。
只适用于共享式内存。比如一台电脑,4核cpu共享16G内存,可以用Openmp启动4核同时计算。

MPI
稍复杂。需要重新设计程序,学习成本稍高。
扩展性好,适用于共享式或者分布式内存(楼上所说有误)。比如二台电脑,各有4核cpu和16G内存,可以用MPI同时在二台电脑上计算,并且每台电脑都同时使用各自的4核,和16G内存(相当于8核同时计算)。因此你在一台电脑上写出的程序,也可以方便的使用在计算机集群中。
你问的不是非常清楚,建服务器和这两个编程模型哪个好,不是一个问题。

多台机器,每台都是多核,那自然就是 OpenMP + MPI。如果你们打算买编译器,那么运行时库都会在里面。如果用开源编译器,比如 gcc,你需要自己编译安装开源的 runtime library ,比如 OpenMPI.

至于把普通单线程程序 port 成这两个模型,那就是另一番学习的过程了。
openmp适合对原有的串行代码进行并行化改造,新项目还是用mpi好一些,一个是适应的硬件条件广泛,速度也比较快,openmp当线程数超过一定数量,比同样进程数的mpi慢。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有