2

我有一个代码,其中包含一些依赖于 mpi api 的位:

#if MPIVERSION==1
...
#elif MPIVERSION==2
...
#endif

在假设 MPI-1 和 MPI-2 之间切换。

有没有一种很好的方法来推断一个好的版本——尤其是可能会进入构建系统的版本?

谢谢!

4

2 回答 2

4

configure脚本通常做的事情——尝试编译和运行一个非常简单的测试 MPI 代码,它包括:

#include <stdio.h>
#include <mpi.h>

int main (void)
{
    int version, subversion;
    MPI_Get_version(&version, &subversion);
    printf("%d.%d\n", version, subversion);
    return 0;
}

使用(或指定的任何编译器)编译此代码并在代码配置期间mpicc(直接而不是通过)运行它,您将:mpirun

  • 知道 MPI 编译器包装器确实有效
  • 获取支持的 MPI 标准主要和次要版本

您可以对 Fortran 项目执行相同的操作。

您也可以尝试mpi.h直接解析和搜索MPI_VERSIONMPI_SUBVERSION但您可能会遇到一些不可移植性问题。此外,这些宏旨在用于 C/C++ 代码中的条件编译。

于 2012-06-21T07:55:08.957 回答
1

MPI_VERSION如果需要,请与 with 一起使用(MPI_SUBVERSION即 MPI 1.2 是MPI_VERSION = 1and MPI_SUBVERSION = 2)。文档在这里

于 2012-06-21T00:04:51.613 回答