【问题标题】:difference between thread library and mpi in c++c++中线程库和mpi的区别
【发布时间】:2026-02-08 13:55:01
【问题描述】:

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

【问题讨论】:

    标签: c++ multithreading parallel-processing mpi


    【解决方案1】:

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

    更多信息here

    【讨论】:

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