2009-07-03 67 views
2

我有一个程序在C++中实现,我现在想要添加MPI支持。有一个C++的MPI绑定,命名空间MPI和一切。将MPI支持添加到C++程序中

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

我的问题是:

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

例如:

MyClass obj; 

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

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

z = obj.result(); 
+1

也许你的意思是OpenMP? – tstenner 2010-02-07 08:20:56

回答

6

我真的建议拿起Gropp MPI Book,它确实有助于对基本MPI!

+0

感谢这些例子将会有所帮助。 – lvcargnini 2009-07-03 15:32:52

+0

,但它使用MPI C++绑定作为普通的c应用程序,这是我的观点。在OO编程中如何工作 – lvcargnini 2009-07-03 15:34:48

+0

MPI绑定实际上只是方法调用,与OO编程几乎没有相似之处,您必须按照预期的方式使用它们,这些方法可以将信息从一台计算机传递到另一台计算机。 – 2009-07-03 15:46:55

7

MPI不自动并行任何东西,它只给你一个在节点之间发送数据的接口。您的代码被编写并在每个节点上独立运行,并且每次都将数据发送到其他节点或试图从其他节点接收数据。

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都以示例形式显示。我强烈建议你通读本书,以了解并行编程是什么,不是。

6

在一个旧的线程中寻找,我发现OpenMPI和Boost::MPI很好用。库的面向对象设计可能有点疯狂,但我发现它比纯MPI更适合工作,尤其是对于许多类型的自动序列化以及用于收集/减少函数的相当可扩展的接口以及序列化用户类型。

相关问题