MPI和OpenMP有什么区别?

时间:2015-09-08 17:42:46

标签: mpi openmp difference

我想知道(简言之)OpenMP和MPI之间的主要区别。

2 个答案:

答案 0 :(得分:53)

OpenMP 是一种在共享内存设备上进行编程的方法。这意味着并行性发生在每个并行线程都可以访问所有数据的位置。

您可以将其视为:通过在不同线程之间拆分循环,在执行特定for循环期间可能会发生并行性。

MPI 是一种在分布式内存设备上编程的方法。这意味着并行性发生在每个并行进程在其自己的内存空间中工作而与其他进程隔离的情况。

您可以将其视为:您编写的每一段代码都由每个进程独立执行。并行性的发生是因为您完全根据其进程ID告诉每个进程他们应该处理的全局问题的哪个部分。

当然,编写OpenMP和MPI程序的方式也非常不同。

答案 1 :(得分:14)

MPI 代表消息传递接口。它是一组关于消息传递的API声明(例如发送,接收,广播等),以及应该从实现中预期的行为。

“消息传递”的想法相当抽象。它可能意味着在分布在网络主机上的本地进程或进程之间传递消息等。现代实现非常难以通用并抽象出多个底层机制(共享内存访问,网络IO等)。

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

应用程序可以同时使用MPI和OpenMP并不罕见。