线程与共享内存和MPI之间的主要区别?

尽管我一直在玩pthread,OpenMP,intel TBB和线程,但我仍然不明白像OpenMP这样的消息传递接口实现和经典线程库之间的主要区别是什么,但它仍然不清楚。

假设为线程池编写所有样板代码,这对我来说不是问题,我正在使用C ++,这两种技术之间的区别归结为...?

我也对网络上的线程进行操作感兴趣,同时将任务分配给所有连接的机器。

目前我也没有考虑OpenMP / OpenMPI支持的平台数量方面的限制,因为我想了解这两个概念是如何工作的。


作为Mike Seymour的补充回答:

主要的折衷取决于你必须在你的过程和线程之间分享什么。 通过共享内存,您实际上可以在执行上下文之间共享数据。

通过消息传递,您需要复制数据以在执行上下文(线程,进程,多台计算机上的进程)之间传递数据。

如果你的数据很小(读取:数据传输时间很短)与上下文的执行时间相比,那么与共享内存相比,MPI不应该有明显的开销。

相反,如果要共享的数据很大(数据传输时间)与执行时间相同,那么MPI可能不是一个好主意。

最后,你想跨越一台电脑的界限,共享内存不在游戏中。


“经典”线程共享线程之间的所有内存。 这非常危险,因为很容易意外修改另一个线程可能使用的数据,从而导致令人讨厌的错误。 程序员有责任谨慎保护数据免遭不安全访问。 这也(通常)要求所有进程在同一台机器上运行,并访问相同的物理内存。

在消息传递接口中使用独立进程可以让您更好地控制哪些数据是共享的,哪些是每个进程专用的; 一个进程意外修改另一个进程的状态几乎没有或没有危险。 正如你所说,消息传递接口可以推广到在不同机器上的进程之间通过网络传递消息。

链接地址: http://www.djcxy.com/p/64519.html

上一篇: Main differences between threading with shared memory and MPI?

下一篇: Is it still worth to invest time into OpenMP implementations?