2012-05-26 65 views
2

据我所知,并行处理消息传递接口和多线程有两种方式。没有消息传递接口的多线程不能用于分布式内存系统;但消息传递接口可用于系统“共享内存”和“分布式内存”。我的问题是关于与MPI并行并在共享内存系统上运行的代码的性能。该代码的性能与多线程并行处理的代码的相同范围内?共享内存系统上的消息传递接口性能

更新:

我的工作是在该流程需要与对方反复沟通和通信数组可以是200 * 200矩阵

+0

你知道OpenMP吗?还有很多其他的并行化方案。 – betabandido

+0

是的,我知道;但是所有方法的基础都分为双向多线程和消息传递。 – peaceman

回答

2

假设我们只考虑MPI和OpenMP ,因为它们是你提到的两个并行编程系列的两个主要代表。对于分布式系统,MPI是不同节点之间唯一的选择。然而,在单个节点中,正如你所说,你仍然可以使用MPI并使用OpenMP。哪一个性能更好取决于你正在运行的应用程序,特别是计算/通信比率。 Here您可以看到多核处理器MPI和OpenMP的比较,他们确认了相同的观察结果。

您可以更进一步并采用混合方法。在节点之间使用MPI,然后在节点内使用OpenMP。这就是所谓的混合MPI + OpenMP并行编程。您也可以在包含混合CMP + SMT处理器的节点中应用此功能。

您可以查看一些信息herehere。此外this paper比较了MPI方法与混合MPI + OpenMP方法。

2

答案是:它取决于。 MPI进程主要是独立的OS进程,当通信进程运行在同一个共享内存节点上时,它们之间的通信通过某种共享内存IPC技术发生。作为独立的OS进程,MPI进程通常不会共享数据,有时必须在每个进程中复制数据,导致内存使用量不足。另一方面,线程可以共享大量数据,并且可以受益于缓存重用,特别是在具有大型共享最后一级缓存(例如当前一代x86 CPU上的L3缓存)的多核CPU上。与线程之间数据交换的更轻量级方法(通常只是同步,因为工作数据已经共享)相结合时,缓存重用可以导致比独立进程获得更好的性能。

但再一次 - 这取决于。

0

在我看来,他们只是在不同的工作更好。 Actor模型非常擅长在不同时间执行许多不同的任务,而OpenMP/TBB/PPL模型非常适合以非常简单和可靠的方式并行执行一项任务。