代码之家  ›  专栏  ›  技术社区  ›  Hassan Syed

MPI是否适合大容量软实时工控机?

  •  1
  • Hassan Syed  · 技术社区  · 15 年前

    如果我只有一台服务器,我有两个进程类型A(多进程多线程)和B(一个进程N线程带N-CPU),我想从A到B发送大量单向消息。MPI是不是比使用以下自定义实现更好的实现:

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

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

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

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

    我的分离问题是:MPI(尤其是OpenMPI)是一个很好的库吗?它是否在各种操作系统上使用了最理想的内核原语?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Reed Copsey    15 年前

    如果您愿意重新构建您的体系结构以适应它的消息传递基础结构,MPI很可能会很好地实现这一点。

    理论上讲,至少当托管在一台服务器上时,如果包装自己的库,您可能能够更快地完成一些工作,这仅仅是因为您不必在MPI消息结构中进行进出转换。也就是说,MPI是非常有效的(特别是MPI-2, Open MPI 支持),非常,非常强大。您很难从自己的库中获得同样的灵活性、可配置性和健壮性。

    如果要在多台机器之间进行广播,MPI可能比尝试使用自己的方法更好。

    此外,MPI还支持许多通信模式。它确实支持 shared memory 用于非常快速的单机通信,以及用于机器间通信的TCP(加上一些商用、更快的选项)。

        2
  •  1
  •   Martin Beckett    15 年前

    MPI非常高效,它是为高性能应用而构建的。
    您甚至可以很好地将它用于同一个mboard上CPU之间的通信。

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

    我们使用MPICH是因为当时它在Windows上工作得最好,我们需要这种灵活性,我没有使用MPICH2或OpenMPI。