Openmp和MPI并行程序设计的区别

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

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

要理解OpenMP和MPI,首先要有一些操作系统知识和系统编程基础——OpenMP对应的实际上是单进程多线程的并发编程模型,可以将一个单线程的程序按for循环拆分成多线程——相当于pthread_create。

对于同一个进程的多个线程来说,由于它们只是独占自己的栈内存,堆内存是共享的,因此数据交换十分地容易,直接通过共享变量就可以进行交换,编程模型非常简单易用,并且对于操作系统来说,线程的上下文切换成本也比进程低很多。

而MPI则是多进程的并发编程模型,相当于你自己调用fork——每一个进程的内存地址空间都是独立的,它们彼此之间几乎什么都不共享,只能通过进程间通信(IPC)来交换彼此的数据,因此编程难度明显要大很多。

MPI有一个非常显著的优点,那就是对于一个分布式系统来说,进程是可以在分布式系统的每一台电脑之间转移的,因此对于拥有多台电脑的分布式系统来说,其并发性要明显好于OpenMP。

点击下方链接进入先进计算基础训练营

先进计算基础训练营测评名单收集http://hbcjintern.mikecrm.com/2lu8xm8猿代码科技,现向国家大力输送先进计算行业的人才,助力国家智能科技产业的升级发展。如您是一本以上学历,并且是计算机相关专业,请点击下方链接,或者扫描下方二维码,申请就业资格,我们会协调先进计算工程师与您面试。

猿代码-先进计算猿代码(北京)科技有限公司是一家IT类科技公司,致力于软件开发、系统集成及高素质IT开发人才的训练与培养。icon-default.png?t=M85Bhttp://www.ydma.com/ydm_mobile.html

你可能感兴趣的:(先进计算,高性能计算,microsoft,java,开发语言)