2

如果我有一台服务器并且我有两种进程类型 A(许多进程许多线程)和 B(一个进程 n 线程和 n-cpu),我想从 A 发送大量单向消息到 B . 与使用以下自定义实现相比,MPI 是否是更好的实现:

  1. Unix 域套接字
  2. Windows 命名管道
  3. 共享内存

我正在考虑基于 1 和 2 编写自己的库,并且我还想知道 3 是否更好,因为共享内存需要锁定。

进程A对外提供服务,因此B的资源使用和消息传递一般需要消耗尽可能少的资源,而A在发送消息时可以实现阻塞或非阻塞。B 的资源使用和消息传递需要与 A 的使用成线性关系。

我最终也需要机器之间的广播能力。可能用于过程B。

我的离别问题是:MPI(尤其是 openMPI)是否是一个很好的库,它是否在各种操作系统上使用了最优化的内核原语。

4

2 回答 2

3

如果您愿意重新设计您的架构以适应它的消息传递基础架构,MPI 很可能会很好地解决这个问题。

Theoretically, at least when hosted on a single server, you may be able to do something faster if you wrap your own library, just because you won't have to do the transition into and out of the MPI message structures. That being said, MPI is very efficient (esp. MPI-2, which Open MPI supports), and very, very robust. You'd have a difficult time getting the same flexibility, configurability, and robustness out of your own library.

If you're going to be broadcasting between multiple machines, MPI is probably a better approach than trying to roll your own method.

Also, MPI supports quite a few modes of communication. It does support shared memory for very fast, single machine communication, as well as TCP for inter-machine communication (plus some commercial, faster options).

于 2009-12-09T18:38:20.997 回答
2

MPI 非常高效,它是为高性能应用程序而构建的。
您甚至可以很好地使用它在同一块主板上的 CPU 之间进行通信。

我不确定广播,我几年前使用的系统没有,但我不记得这是我们的互连还是 MPICH 的限制。

附言。我们使用 MPICH 是因为当时它在 Windows 上运行得最好并且我们需要这种灵活性,我没有使用 MPICH2 或 OpenMPI。

于 2009-12-09T18:27:54.450 回答