c++中线程库和mpi的区别

Posted

技术标签:

【中文标题】c++中线程库和mpi的区别【英文标题】:difference between thread library and mpi in c++ 【发布时间】:2018-01-16 10:54:35 【问题描述】:

在并行编程方面,我只接触过多线程,但最近我接触了 mpi,我试图通过在线搜索了解其中的区别,但无济于事。我认为它们都是为了使您的代码正确并行化的库?如果是这样,它们有何不同?或者它们甚至可以像苹果和橙子一样进行比较。有人可以澄清吗?

【问题讨论】:

【参考方案1】:

多线程严格来说是在同一台计算机、相同的程序和相同的内存空间上。 MPI 基本上是多处理,它是一起通信的不同程序。 MPI 的优势在于您可以并行化其程序并在集群系统(即不同的计算机)上运行它。多线程被认为要简单得多。 C++ 没有多处理的标准实现,这就是 MPI 库用于此目的的原因。

更多信息here。

【讨论】:

知道了!如果您在单台机器上运行并行程序,那么另一个问题是有意义的,您是否需要安装一个实现?我在网上遇到了 MPICH2? @JohnKang 我不明白你的问题。究竟什么是“平行”?您的主要问题区分了两种并行。 @JohnKang 这取决于您如何链接已编译的程序。如果你静态链接,那么没有。如果您链接到共享库,那么可以。 非常感谢! @量子物理学家 我一直觉得面向过程的 MPI 会出错。如果使用 MPI 进行通信的进程本身是多线程的(例如使用 OpenMP),那么在进程之间更改这些线程的部署是一个重大的重大重写。使用 ZMQ 之类的东西通常是更好的选择。您可以在线程之间使用它,也可以在进程之间使用它,从而使跨系统的线程部署成为一个相对微不足道的问题。尽管它与 OpenMPI 不在同一个领域; ZeroMQ 对 Infiniband 的支持似乎有点不稳定。

以上是关于c++中线程库和mpi的区别的主要内容,如果未能解决你的问题,请参考以下文章

c++ 多线程与c多线程有啥区别?

.net类库和api mfc有啥区别呀??

MPI_Send() 和 MPI_Ssend() 之间的区别?

mpi中的darray和子数组有啥区别?

单例模式 静态库和动态库的区别

运行 MPI 脚本时 -n 和 -np 之间的区别?