3

我有一个用 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

4 回答 4

7

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

于 2009-07-03T15:28:12.373 回答
6

我真的会推荐拿起Gropp MPI Book,它对基本的 MPI 真的很有帮助!

于 2009-07-03T15:27:42.767 回答
6

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

于 2010-02-07T08:12:36.150 回答
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 库交互存在根本性的误解。

使用 MPI 进行并行编程是学习使用 MPI 编程的绝佳参考。代码示例使用 C 语言编写,并且大多数 MPI API 都在示例中显示。我强烈建议您通读这本书,以了解什么是并行编程,什么不是。

于 2009-07-03T16:02:10.767 回答