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

计算科学 高性能计算 C++ mpi
2021-11-25 23:11:49

我最不喜欢 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吗?

2个回答

我一直认为我们应该在自己的项目deal.II中使用它,因为它比纯MPI级别更高,可以在这里和那里节省几行代码。也就是说,这些年来我学到的是,大多数高级代码实际上并没有那么多 MPI 代码开始——deal.II 中的 600,000 行代码只有大约 50 次 MPI 调用。这肯定比 PETSc 之类的包要少得多,但我认为大多数代码的 MPI 调用确实比人们最初预期的要少,因此,使用更高级别的东西的好处不如一个可能乍一看。

那么这归结为让你考虑权衡是什么。您需要使用多少 MPI,以及与构建和链接外部库所需的额外工作相比如何。

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

Boost.MPI 中的精简抽象允许人们轻松地将其与对底层 C MPI 库的调用结合起来。

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