1.OpenMP

OpenMP是一种用于共享内存并行系统的多线程程序设计的库(Compiler Directive),特别适合于多核CPU上的并行程序开发设计。它支持的语言包括:C语言、C++、Fortran;不过,用以上这些语言进行程序开发时,并非需要特别关注的地方,因为现如今的大多数编译器已经支持了OpenMP,例如:Sun Compiler,GNU Compiler、Intel Compiler、Visual Studio等等。程序员在编程时,只需要在特定的源代码片段的前面加入OpenMP专用的#pargma omp预编译指令,就可以“通知”编译器将该段程序自动进行并行化处理,并且在必要的时候加入线程同步及通信机制。当编译器选择忽略#pargma omp预处理指令时,或者编译器不支持OpenMP时,程序又退化为一般的通用串行程序,此时,代码依然可以正常运作,只是不能利用多线程和多核CPU来加速程序的执行而已。

OpenMP使得程序员可以把更多的精力投入到并行算法本身,而非其具体实现细节。对基于数据分集的多线程程序设计,它是一个很好的选择。同时,使用OpenMP也提供了更强的灵活性,可以较容易的适应不同的并行系统配置。线程粒度和负载平衡等是传统多线程程序设计中的难题,然而,在OpenMP中,OpenMP库从程序员手中接管了部分这两方面的工作,从而使得程序员可以更加专注于具体的算法本身,而非如何编程使得代码在CPU负载平衡和线程粒度方面做出平衡。但是,作为高层抽象,OpenMP并不适合需要复杂的线程间同步和互斥的场合。OpenMP的另一个缺点是不能在非共享内存系统(如计算机集群)上使用。在这样的系统上,MPI使用较多。

标准并行模式执行代码的基本思想是,程序开始时只有一个主线程,程序中的串行部分都由主线程执行,并行的部分是通过派生其他线程来执行,但是如果并行部分没有结束时是不会执行串行部分的。这就是标准的并行模式fork/join式并行模式,共享存储式并行程序就是使用fork/join式并行的,OpenMP亦是如此。

2.MPI

MPI(MPI是一个标准,有不同的具体实现,比如MPICH等)是多主机联网协作进行并行计算的工具,当然也可以用于单主机上多核/多CPU的并行计算,不过效率低。它能协调多台主机间的并行计算,因此并行规模上的可伸缩性很强,能在从个人电脑到世界TOP10的超级计算机上使用。缺点是使用进程间通信的方式协调并行计算,这导致并行效率较低、内存开销大、不直观、编程麻烦。

OpenMP是针对单主机上多核/多CPU并行计算而设计的工具,换句话说,OpenMP更适合单台计算机共享内存结构上的并行计算。由于使用线程间共享内存的方式协调并行计算,它在多核/多CPU结构上的效率很高、内存开销小、编程语句简洁直观,因此编程容易、编译器实现也容易(现在最新版的C、C++、Fortran编译器基本上都内置OpenMP支持)。不过OpenMP最大的缺点是只能在单台主机上工作,不能用于多台主机间的并行计算!部分转载自:http://blog.csdn.net/carson2005/article/details/7604061

OpenMP和MPI并行模式的区别?相关推荐

  1. OpenMP和MPI的区别

    1.OpenMP OpenMP是一种用于共享内存并行系统的多线程程序设计的库(Compiler Directive),特别适合于多核CPU上的并行程序开发设计.它支持的语言包括:C语言.C++.For ...

  2. 【MPI学习3】MPI并行程序设计模式:不同通信模式MPI并行程序的设计

    学习了MPI四种通信模式 及其函数用法: (1)标准通信模式:MPI_SEND (2)缓存通信模式:MPI_BSEND (3)同步通信模式:MPI_SSEND (4)就绪通信模式:MPI_RSEND ...

  3. OpenMP与MPI

    文章目录 一.OpenMP和MPI的对比 1.1 线程与进程 1.2 openMP和MPI的区别 二.openMP的简单使用 2.1 openMP的原理 2.1.1 基于线程的并行 2.1.2 明确的 ...

  4. OpenMP共享内存并行编程详解

    1. 介绍 并行计算机可以简单分为共享内存和分布式内存,共享内存就是多个核心共享一个内存,目前的PC就是这类(不管是只有一个多核CPU还是可以插多个CPU,它们都有多个核心和一个内存),一般的大型计算 ...

  5. java内存泄漏跟栈溢出,8.《深入理解Java虚拟机》内存溢出和内存泄露、并行和并发、Minor GC和Full GC、Client模式和Server模式的区别...

    内存溢出和内存泄露的区别 内存溢出:指的是程序在申请内存的时候,没有足够大的空间可以分配了. 内存泄露:指的是程序在申请内存之后,没有办法释放掉已经申请到内存,它始终占用着内存,即被分配的对象可达但无 ...

  6. MPI并行程序开发设计----------------------------------并行编程模型和算法等介绍

    ---------------------------------------------------------------------------------------------------- ...

  7. 谈 三层结构与MVC模式的区别

    谈 三层结构与MVC模式的区别 在CSDN和园子里有朋友谈到三层与MVC的区别,以前也有人抛出这个问题,本人对来公司面试的朋友也偶乐会提这方面的问题.     那么我也来讲讲我对这两者的理解吧.    ...

  8. rethat安装MySQL多例_Spring框架-Bean作用域中单例模式和多例模式的区别

    Spring框架-Bean作用域中单例模式和多例模式的区别 一.单例模式的特点(当没有指定是单例模式还是多例模式的时候,默认是单例模式): 1.Spring容器创建的时候,对应的类的实例化对象一起被创 ...

  9. js组合模式和寄生组合模式的区别研究

    最近在阅读<js权威指南>的继承这一章,对于组合模式和寄生组合模式的区别有点混淆,在多次重读以及尝试之后,得到一些心得. 组合模式继承 结合了构造函数继承时可以为每个属性重新初始化,构造一 ...

最新文章

  1. InitializeComponent System.StackOverflowException
  2. Spring scope解惑
  3. Python多线程技术增加网站帖子的查看量
  4. 微信小程序 - 更改radio和checkbox选中样式
  5. 运维工程师必会的linux命令下载,运维工程师必会的109个Linux命令.pdf
  6. js实现sleep休眠
  7. div固定在浏览器顶部_关于浏览器的兼容问题
  8. 手机端html5 面试,今日头条 张祖俭 - H5动画在移动平台上的性能优化实践
  9. iOS 逆向 - 收藏集 - 掘金
  10. MyBatis学习笔记(一) 概述
  11. Luogu4366[CodePlus#4] 最短路
  12. latex:表格排版示例
  13. 线性代数学习之特征值与特征向量
  14. 笔记本双网卡带宽叠加上网
  15. Rod-cutting(动态规划)
  16. pm961 mysql_搭建Memcache服务详解
  17. 100个小学生猜字谜大全及答案
  18. JS一元运算符(前++,后++)详解
  19. 《转》收集最完整的arcgis拓扑处理
  20. hgame week1 2021 pwn

热门文章

  1. React-native学习-8-长列表FlatList和SectionList分组列表
  2. html摩天轮效果,用js和纯css分别实现摩天轮效果动画
  3. 错误:Implicit super constructor Father() is undefined. Must explicitly invoke another constructor
  4. QChart绘图时出现警告:axisX has been explicitly marked deprecated here
  5. 解决MAC电脑下魅族手机adb无法连接问题
  6. 如何使用graphpad做柱形图_用Graphpad Prism轻松搞定不同类型的柱形图
  7. Actual Multiple Monitors v8.14.6.1 多显示器设置管理工具
  8. C# 正则替换 Regex.Replace
  9. 深入理解sun.misc.Unsafe原理
  10. 深入理解SerDes之一