如果我有一个服务器并且我有两个进程类型A(许多进程处理多个线程)和B(一个进程n-threads与n-cpu的),我想发送大量的单向消息A到B.与使用以下的自定义实现相比,MPI是更好的实现吗?
我正在考虑基于1和2编写自己的库,我也想知道3是否更好,因为共享内存需要锁定。
进程A提供外部服务,因此B的资源使用和消息传递通常需要消耗尽可能少的资源,并且A在发送消息时可以在阻塞或非阻塞中实现。 B的资源使用和消息传递需要随着A的使用而线性扩展。
我最终还需要在机器之间进行广播。可能是过程B.
我的离题问题是:MPI(特别是openMPI)是一个很好的库,它在各种操作系统上使用最优的内核原语。
答案 0 :(得分:2)
理论上,至少当托管在单个服务器上时,如果你包装自己的库,你可以更快地做一些事情,因为你不必转换进出MPI消息结构。话虽这么说,MPI非常有效(特别是MPI-2,Open MPI支持),非常非常强大。您很难从自己的库中获得相同的灵活性,可配置性和健壮性。
如果你要在多台机器之间进行广播,那么MPI可能比尝试推出自己的方法更好。
此外,MPI支持多种通信模式。它支持shared memory用于非常快速的单机通信,以及用于机器间通信的TCP(以及一些商业,更快的选项)。
答案 1 :(得分:1)
MPI非常高效,专为高性能应用而设计 您甚至可以将它用于同一mboard上的CPU之间的通信。
我不确定广播,我多年前使用的系统没有,但我不记得这是否是我们的互连或MPICH的限制。
PS。我们使用MPICH是因为当时它在Windows上运行得最好,我们需要灵活性,我还没有使用MPICH2或OpenMPI。