【发布时间】:2017-05-20 03:39:46
【问题描述】:
说/path/to/mpi/bin 在我的PATH 中。然后我可以调用例如mpicc 和 mpiexec。如果我现在想以编程方式确定我正在处理的 MPI 实现(例如 OpenMPI、MPICH),我该怎么做?
到目前为止,我得到的解决方案是 grep 在输出中获取更多 og 更少的任意字符串,例如mpiexec --version.
具体来说,我需要区分 OpenMPI 和 MPICH,但是一个通用的解决方案当然会很好。
【问题讨论】:
-
如果您在编译/构建/配置时需要该信息,只需尝试编译一个使用
OPEN_MPI预处理器符号值的小示例。当mpicc来自Open MPI 时,它在mpi.h中定义为1。使用 MPICH 编译时会报错。 -
在运行时区分两者的一种(不可靠的)方法是,例如,检查
MPI_INFO_NULL和MPI_INFO_ENV的值。两者都是 MPICH 的编译时常量和 Open MPI 的运行时常量。这两个值可以随机匹配的概率,特别是考虑到 MPICH 将MPI_INFO_ENV定义为奇数并且 Open MPI 的空信息对象可能在内存中对齐,非常低(尽管非零)。但是 Open MPI 代码在 MPICH 的mpiexec下无法正常运行,反之亦然,所以这可能不是问题。
标签: mpi implementation openmpi mpich