将MPI支持添加到C ++程序

时间:2009-07-03 15:25:28

标签: c++ parallel-processing mpi openmpi

我有一个用C ++实现的程序,现在我想添加MPI支持。有一个用于C ++的MPI绑定,带有命名空间MPI和所有内容。

在我的情况下,我有一个特定的对象,适合作为群集的并行化过程。

我的问题是:

  • 以前有人做过这样的事吗?我可以就如何最好地实现这一点获得一些建议吗?
  • 如何在构造函数中初始化MPI?在Class的构造函数中初始化MPI之后,所有中间调用是否也会并行化?

例如:

MyClass obj;

x = x; //this will be parallelized ?
onj.calc();

y = x++; //this will be parallelized ?

z = obj.result();

4 个答案:

答案 0 :(得分:7)

MPI不会自动并行化任何内容,它只为您提供了一个在节点之间发送数据的接口。您的代码在每个节点上独立编写和运行,并且每隔一段时间就会将数据发送到其他节点或尝试从其他节点接收数据。

答案 1 :(得分:6)

我真的建议选择Gropp MPI Book,它对基本的MPI有帮助!

答案 2 :(得分:6)

在一个旧线程中,我发现OpenMPI和Boost::MPI很好用。库的面向对象设计可能有点笨拙,但我发现它比纯MPI更好用,特别是对于许多类型的自动序列化和一个相当可扩展的接口,用于收集/减少功能以及序列化用户类型。

答案 3 :(得分:3)

作为背景资料:

大多数使用MPI的应用程序都是用Fortran或C编写的.MPI的每个主要实现都是用C语言编写的。

支持MPI C ++绑定最多是粗略的:某些MPI数据类型不可用(例如MPI_DOUBLE),I / O存在问题以及源文件中包含标头的顺序。如果MPI库是用C构建的,并且应用程序是使用Fortran或C ++构建的,则存在名称错位问题。 mpich2 FAQ有条目帮助解决这些问题。我不熟悉Open MPI,它对Fortran和C ++的特殊行为。

针对您的具体问题:

我认为您对MPI是什么和不是什么有基本的误解,以及应用程序代码应该如何与MPI库交互。

Parallel Programming with MPI是学习使用MPI编程的绝佳参考。代码示例在C中,大多数MPI API都在一个示例中显示。我强烈建议您通过本书来了解并行编程是什么和不是什么。