Boost :: mpi或C MPI用于高性能科学应用?


16

我最不喜欢MPI的一点是处理数据类型(即数据映射/掩码),因为它们与面向对象的C ++不太吻合。boost::mpi仅在其网站上支持MPI 1.1:

boost :: mpi是标准消息传递接口的C ++友好接口……Boost.MPI可以使用Boost.Serialization库为用户定义的类型构建MPI数据类型。

有没有人boost::mpi对严肃的科学计算有任何经验?你会推荐吗?您是否遇到了任何问题(扩展问题,编译器问题,错误,未实现的功能,需要某些mpi 2.2功能)?

您能否评论使用boost::mpi而不是使用C ++中的MPI C实现?可以同时使用两者吗(可以的话,使用boost :: mpi,在其他地方使用C-MPI)?

您知道使用的任何大型科学代码boost::mpi吗?


您还应该查看此页面boost.org/doc/libs/1_50_0/doc/html/mpi/…,以确保支持所需的所有功能。您也应该考虑自己实施它们的可能性。
亚历山大

1
我可以想到使用Boost :: MPI的最佳原因是它自动支持C ++类型的序列化。MPI C接口不能单独执行此操作,除非您要通过其他方式进行自己的序列化,否则您必须为所有C ++对象创建MPI数据类型,以便通过Send / Recv等传递它们。
Jeff

Elemental(libelemental.org)MPI接口(github.com/elemental/Elemental/blob/master/src/core/imports/…)以一种优雅的方式进行自动类型检测。但是,它不会尝试执行Boost :: MPI所做的许多事情。
杰夫

Answers:


13

我一直认为我们应该在自己的项目Deal.II中使用它,因为它比纯MPI更高级别,并且可以在这里和那里节省几行代码。就是说,我这些年来所学到的是,大多数高级代码实际上并没有那么多的MPI代码开始-交易中的60万行代码.II仅有约50个对MPI的调用。这肯定比像PETSc这样的软件包要少得多,但是我认为,尽管如此,大多数代码对MPI调用的数量确实比一开始所期望的要少,这是事实,因此,使用更高级别的东西所带来的好处不如一个。可能乍一看。

然后,这归结为您要考虑的权衡。您需要使用多少个MPI,与构建和链接外部库所需的额外工作相比,这又如何?


6

据我所知,boost::mpi仅仅是API 的c++包装器C。因此,只要未实现某些功能,您就应该能够使用boost::mpi并切换到CAPI。确实,从他们的网页上:

Boost.MPI中的精简抽象使人们可以轻松地将其与对基础C MPI库的调用结合起来。

我自己并没有使用过它,也不知道有一个主要的库可以使用,但是我希望它只是一个轻量级的包装器,因此与CAPI 相比,它不必担心性能。


2
Boost :: MPI是MPI子集的包装;我记得,它仅支持MPI 1.2,就我而言,它与MPI-2.2或MPI-3标准相去甚远。
杰夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.