2012-02-16 70 views
1

这个问题听起来有点奇怪......Howto在“串行”模式下编译MPI应用程序(不使用MPI编译器)?

想象一下,我有一个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支持的应用程序?

在此先感谢!

+0

为什么不为缺失的函数添加虚拟绑定并开放源代码的结果? – Jeff 2015-08-24 01:30:24

回答

2

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

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

实际上,希望能够使用或不使用MPI的应用程序似乎都使用自己的MPI抽象,使用特定于域的通信包装,#ifdef HAVE_MPI或更复杂的宏。

+0

感谢您的快速回答!我想跟踪不同编译器为一组给定的应用程序发出的指令,包括一些MPI应用程序。这就是为什么我不需要MPI支持,因为“串行”运行会给我所需的数据。对我来说,这应该是一个简单的问题(只是一个“void”mpi.h抽象层),但你说得很对,因为我可能错过了一些东西,因为提供串行版本的MPI应用程序通常使用#ifdef宏。 – Manel 2012-02-18 11:05:19