具体来说,如何编写同时适用于 MPICH 和 OpenMPI 的代码?
我目前正在清理我们打算在今年 Spring 发布的分布式内存随机混合整数线性编程包的构建脚本和代码。代码的特性之一(或者更确切地说,我们从合作者那里依赖的库之一)是它只能与 MPICH 一起使用,而不能与 OpenMPI 一起构建或运行。我应该以独立于 MPI 实现的方式实现什么样的东西?(例如,一位同事指出 OpenMPI 和 MPICH 以不同的方式代表沟通者。)我的目标是尝试修补软件,使其适用于 OpenMPI 和 MPICH,以及有关如何做到这一点的任何高级指导(希望与一些参考资料)将非常有帮助。
编辑:这是来自编译器的示例错误消息(OS X,来自 Xcode 7.2 的 Clang):
PIPS/PIPS-IPM/Core/QpStoch/sTree.C:147:9: error: no matching function for call to 'MPI_Comm_create'
ierr = MPI_Comm_create(mpiWorldGroup, childGroup, &childComm); assert(ierr==MPI_SUCCESS);
^~~~~~~~~~~~~~~
/usr/local/Cellar/open-mpi/1.10.1_1/include/mpi.h:1271:20: note: candidate function not viable: cannot convert argument of incomplete type 'MPI_Group' (aka 'ompi_group_t *') to 'MPI_Comm' (aka 'ompi_communicator_t *')
OMPI_DECLSPEC int MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm);
^
1 error generated.
我应该更清楚一点:错误出现在一个库中,我正在帮助一些合作者为新版本做好准备。我不是原作者,但我已经修补了代码以添加我需要的功能,而且我帮助改进了构建系统。因此,这个问题实际上更适合开发人员对 MPI 有点熟悉,可以编写符合 MPI 标准的代码,但现在正试图调试其他人的代码并将其替换为符合 MPI 标准的代码的情况。基本上,我正在寻找常见的陷阱。