MPI和OpenMP之间有哪些区别?

72

我想知道OpenMP和MPI之间的主要区别(简单介绍几句)。

2个回答

128
OpenMP 是一种用于共享内存设备编程的方式。这意味着并行性发生在每个并行线程都可以访问所有数据的地方。
你可以将其视为:通过将循环在不同线程之间分割,可以在执行特定的 for 循环时发生并行性。 MPI 是一种用于分布式内存设备编程的方式。这意味着并行性发生在每个并行进程单独在自己的内存空间中与其他进程隔离工作的位置。
你可以将其视为:你编写的每个代码段都在每个进程中独立执行。并行性是因为您告诉每个进程根据其进程 ID 完全基于哪个全局问题部分应该进行工作。
当然,编写 OpenMP 和 MPI 程序的方式也非常不同。

但是现在MPI也针对共享内存设备。 - Dulmina
@NoseKnowsAll,当代码的一部分需要从“早期”的代码中更新变量值时,时间是什么? - mLstudent33
OpenMP 实现并行还是并发? - SatKetchum
1
@SatKetchum,并发也不是。它们是完全成熟的并行性。 - NoseKnowsAll

33

MPI代表消息传递接口。它是一组关于消息传递(例如发送、接收、广播等)及其实现应该具有的行为的API声明。

“消息传递”的概念相当抽象。它可能是在本地进程之间传递消息,也可能是在分布在网络主机上的进程之间传递消息等。现代实现尝试非常努力地成为通用的并且抽象化多种底层机制(共享内存访问、网络IO等)。

OpenMP是一个API,它专注于使编写共享内存多处理程序更容易(可能)。没有传递消息的概念。相反,使用一组标准函数和编译器指令,您编写可并行执行本地线程的程序,并控制这些线程的行为(它们应该访问哪些资源、如何进行同步等)。 OpenMP需要编译器的支持,因此您还可以将其视为受支持语言的扩展。

一个应用程序同时使用MPI和OpenMP也很常见。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接