【问题标题】:Adding MPI support to a C++ program向 C++ 程序添加 MPI 支持
【发布时间】:2010-11-07 23:14:03
【问题描述】:

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

【问题讨论】:

    标签: c++ parallel-processing mpi openmpi


    【解决方案1】:

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

    【讨论】:

    • 不完全是它在 N 个节点中启动相同的过程,而不是使用我在节点之间共享和更新信息的消息,分散和收集有时集中在一个特定节点或更新所有节点中的值,做所谓的还原。我的观点是这将如何在 OO 中表现?该对象将仅被并行化?所以对象内部使用的 MPI 调用只能在对象内部看到?还是物体外部的环境也受到影响? – lvcargnini 15 分钟前
    • 在不发布新数据的情况下在不同节点上产生相同的确切进程有什么意义???我见过的 MPI 是为 C 环境或 FORTRAN 编写的...在这些实现中没有用于 MPI 的 OOP,所以我不确定您为什么要询问 OOP...如果您将 MPI 代码放入方法中对于一个类,当该方法执行时会调用 MPI 代码,就像您将在该方法中放入的任何其他代码一样。
    【解决方案2】:

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

    【讨论】:

    • 感谢这些例子会有很大帮助。
    • 但它使用 MPI c++ 绑定作为普通的 c 应用程序,这是我的观点。这将如何在 OO 编程中发挥作用
    • MPI 绑定实际上是简单的方法调用,与 OO 编程几乎没有相似之处,您必须按预期使用它们,将信息从一台计算机传递到另一台计算机的方法。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      作为背景资料:

      大多数使用 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 都在示例中显示。我强烈建议您通读这本书,以了解什么是并行编程,什么不是。

      【讨论】:

      • 我在另一个列表中收到了两封不同的电子邮件:“MPI 本身具有面向对象的设计,所以这应该没问题。我不鼓励您使用 C++ 绑定,因为(对我的知识)它们可能会从 MPI 3.0 中删除(有这样的提议)。” “到目前为止,有一项提案已通过一票否决 MPI-2.2 中的 C++ 绑定(意思是:仍然拥有它们,但建议不要使用它们)。这为可能删除 MPI-3.0 中的 C++ 绑定打开了大门。 "
      • 我还不会太担心 MPI 3.0。首先,3.0 没有硬性发布日期。其次,MPI 的所有主要实现将在很长一段时间内继续支持 2.0 标准,以便为其用户/客户轻松过渡。作为备用方案,您始终可以获取支持 2.0 标准的最新 MPI 版本的副本,并将其保存在应用程序的剩余生命周期内。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-25
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多