【问题标题】:Howto compile MPI application in "serial" mode (without using MPI compiler)?如何以“串行”模式编译 MPI 应用程序(不使用 MPI 编译器)?
【发布时间】:2012-03-07 16:04:13
【问题描述】:

这个问题可能听起来有点奇怪……

假设我有一个 MPI 应用程序,但我没有安装 MPI 的系统。 所以我想在不修改源代码的情况下编译不支持 MPI(1 进程、1 线程)的应用程序。 这可能吗?

我在某处发现了一个“mimic_mpi.h”包装器,它应该完全符合我的要求。但是里面缺少了一些 MPI 函数(例如 MPI_Cart_create、MPI_Cart_get 等),所以我没有成功。

mimic_mpi.h http://openmx.sourcearchive.com/documentation/3.2.4.dfsg-3/mimic__mpi_8h-source.html

mimic_mpi.c http://openmx.sourcearchive.com/documentation/3.2.4.dfsg-3/mimic__mpi_8c-source.html

您知道我可以使用其他方法来编译不支持 MPI 的 MPI 应用程序吗?

提前致谢!

【问题讨论】:

  • 为什么不为缺失的函数添加虚拟绑定并将结果开源?

标签: mpi openmpi


【解决方案1】:

您可以使用单个进程轻松运行“真正的”MPI 应用程序。实际上,这甚至可以在不使用 mpiexec/mpirun 的情况下工作,尽管我不确定这是否得到官方支持。也就是说,一个完整且确认的 1 进程 MPI“串行”实现可能会变得相当复杂,而且它自己的库 - 那么在这种情况下,为什么不直接使用真正的完整 MPI 实现呢?

我希望你看到我要画的圆圈: 如果您想要完整的 MPI 行为,只需使用 MPI 实现 - 无论它是否仅限于单个进程。

在实践中,希望能够在有或没有 MPI 的情况下运行的应用程序似乎经常使用自己的 MPI 抽象,使用特定于域的通信包装器、#ifdef HAVE_MPI 或更复杂的宏。

【讨论】:

  • 感谢您的快速回答!我想跟踪给定应用程序集的不同编译器发出的指令,包括一些 MPI 应用程序。这就是我不需要 MPI 支持的原因,因为“串行”运行会给我想要的数据。对我来说,这应该是一个简单的问题(只是一个“无效”的 mpi.h 抽象层),但你说得对,我可能遗漏了一些东西,因为提供串行版本的 MPI 应用程序通常使用 #ifdef 宏。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 2014-06-03
  • 1970-01-01
  • 2015-11-08
相关资源
最近更新 更多