点差vs MPI vs zeromq?

时间:2020-03-05 18:45:17  来源:igfitidea点击:

在广播的答案之一(如具有TCP可靠性的UDP)中,用户提到了Spread消息传递API。我也遇到过一个叫?MQ的问题。我也对MPI有所了解。

所以,我的主要问题是:为什么我要选择一个?更具体地说,当有成熟的MPI实现时,为什么选择使用Spread或者?MQ?

解决方案

回答

我没有使用过这些库中的任何一个,但也许可以给出一些提示。

  • MPI是一种通信协议,而Spread和?MQ是实际的实现。
  • MPI来自"并行"编程,而Spread来自"分布式"编程。

因此,这实际上取决于我们是要构建并行系统还是分布式系统。它们彼此相关,但是隐含的含义/目标是不同的。并行编程通过同时使用多台计算机来处理增加的计算能力。分布式编程处理可靠(一致,容错和高可用性)的计算机组。

"可靠性"的概念与TCP的概念略有不同。 TCP的可靠性是"无论如何都将此包交给最终程序"。分布式编程的可靠性是"即使某些机器死了,系统作为一个整体仍将继续以一致的方式工作"。为了真正保证所有参与者都收到了消息,一个人将需要两阶段提交或者更快的替代方案之一。

回答

MPI被设计为具有快速,可靠网络的紧密耦合的计算集群。 Spread和?MQ是为大型分布式系统设计的。如果要设计并行科学应用程序,请使用MPI,但如果要设计一个持久的分布式系统,需要对故障和网络不稳定具有弹性,则可以使用其中之一。

MPI的容错功能非常有限;大多数实现中的默认错误处理行为是系统范围的故障。同样,MPI的语义要求最终发送的所有消息都必须被使用。这对于在集群上进行仿真非常有意义,但对于分布式应用程序则没有意义。