【问题标题】:Determining MPI implementation programmatically以编程方式确定 MPI 实现
【发布时间】:2017-05-20 03:39:46
【问题描述】:

/path/to/mpi/bin 在我的PATH 中。然后我可以调用例如mpiccmpiexec。如果我现在想以编程方式确定我正在处理的 MPI 实现(例如 OpenMPI、MPICH),我该怎么做?

到目前为止,我得到的解决方案是 grep 在输出中获取更多 og 更少的任意字符串,例如mpiexec --version.

具体来说,我需要区分 OpenMPI 和 MPICH,但是一个通用的解决方案当然会很好。

【问题讨论】:

  • 如果您在编译/构建/配置时需要该信息,只需尝试编译一个使用 OPEN_MPI 预处理器符号值的小示例。当mpicc 来自Open MPI 时,它在mpi.h 中定义为1。使用 MPICH 编译时会报错。
  • 在运行时区分两者的一种(不可靠的)方法是,例如,检查 MPI_INFO_NULLMPI_INFO_ENV 的值。两者都是 MPICH 的编译时常量和 Open MPI 的运行时常量。这两个值可以随机匹配的概率,特别是考虑到 MPICH 将 MPI_INFO_ENV 定义为奇数并且 Open MPI 的空信息对象可能在内存中对齐,非常低(尽管非零)。但是 Open MPI 代码在 MPICH 的 mpiexec 下无法正常运行,反之亦然,所以这可能不是问题。

标签: mpi implementation openmpi mpich


【解决方案1】:

你可以用MPI_Get_library_version做到这一点

【讨论】:

    猜你喜欢
    • 2021-06-09
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    相关资源
    最近更新 更多