Boost.MPI与Boost.Asio的比较

7

你好!

这些库有什么区别?

我阅读了MPI的文档,并且对asio有一些经验。对我来说,它们是不同的网络通信实现,没有更多的区别。

但是它们各自引入了不同的抽象(我不确定这些抽象层次是否相同),这导致了不同的应用程序设计。

我应该在何时使用其中一个库?我必须知道什么才能在每种情况下做出正确的选择?

是的,Asio非常适合几个节点(并且一般来说是非常通用的框架),但为什么MPI对于这样的任务不太好呢?我认为依赖于MPI C库并不具有限制性,MPI也不难理解,那么可扩展性呢?使用Asio我们可以实现广播和其他功能,而另一方面MPI并不禁止编写简单的网络应用程序。如果需要,使用MPI重写Asio特定逻辑是否概念上困难?

那么像套接字一样的通信怎么办:如果必要,我们可以在Asio或任何其他框架中将其封装在模块中,仍然可以使用MPI进行其他通信。

对我来说,套接字和MPI标准是不同的网络服务,现实世界中从简单的客户端-服务器对到一些中等计算的距离只有一步。此外,我认为MPI与Asio相比没有显着的开销。

也许这是一个糟糕的问题,我们需要像ICE(Internet Communications Engine)这样的东西吗?不同的语言支持,而且(如ZeroC所保证的那样)性能很好。

当然,在任何文档中都没有类似“不要使用此库!”的主题。

我根本不能接受这种不统一:一种情况下是套接字,另一种情况下是异步消息,最后是重型中间件平台。在开发生命周期中哪里有清晰度?也许这不是公平的问题,但是为了开始减少这个动物园,我们需要一些指导方针。

2个回答

5
每个库都解决不同的问题,它们并不真正重叠。这也取决于你要解决什么问题以及应用程序的通信模式。如果要实现可扩展性,例如扩展到数千或数万个节点,请使用Boost.MPI。根据底层网络架构,MPI在集体操作方面也表现出色:收集、散布、广播等。
如果只需要少量节点(如单个服务器和一些客户端),请使用Boost.Asio作为套接字抽象层。如果您尚未以某种方式使用MPI分发,则建议使用Boost.Asio。

3

我没有使用过它们两个,但是Boost.ASIO更像是一个低级网络抽象层,而Boost.MPI实现了MPI标准,让您可以创建分布式计算系统。

所以,如果您需要一些类似套接字的通信,我建议使用ASIO。如果您想要进行分布式计算,甚至与其他语言/平台编写的MPI程序进行交互,那么请使用Boost.MPI。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接