【问题标题】:Does MPI provide preprocessor macros?MPI 是否提供预处理器宏?
【发布时间】:2015-04-05 21:34:10
【问题描述】:

MPI 标准是否提供预处理器宏,所以如果我的 C/C++ 代码由启用 MPI 的编译器编译,它可以分支吗?类似于 OpenMP 的 _OPENMP 宏。

【问题讨论】:

  • 我想#include "mpi.h" 只有#if defined(_MPI)
  • 不幸的是,此功能不存在,因为 MPI 是一个库并且不假定任何编译器支持。你甚至不需要使用例如CC=mpicc 编译 MPI 代码。不过,您可以在应用程序/库构建系统中定义此功能。

标签: c++ c mpi


【解决方案1】:

根据MPI standard(第335页),您可以检查MPI_VERSION宏:

为了应对 MPI 标准的变化,有编译时和运行时两种方法来确定在使用环境中使用的标准版本。

“版本”将由两个单独的整数表示,用于版本和颠覆:

在 C 中,

#define MPI_VERSION 3
#define MPI_SUBVERSION 0

【讨论】:

  • 我尝试使用 OpenMPI 1.6.5 并且未定义 MPI_VERSION。因此,显然,并非所有 MPI 实现都支持它 :(.
  • 我不知道,自从 OpenMPI 项目诞生以来,OpenMPI 在 mpi.h 中就有了这些定义:请参阅提交 github.com/open-mpi/ompi/commit/566a050c2——尽管它是“大地块”之一在最初的骨架”提交中,github 不会显示 ompi/include/mpi.h.in 的第 120 行 ...但它就在那里。
  • @Rob:问题似乎是宏是在标题中定义的,这违背了 OP 检测他是否可以包含标题的目的:-)
  • @Cameron 这解释了它。我希望它是由编译器定义的。
  • 没有 MPI 编译器。您使用的编译器不知道 MPI。它就像任何其他图书馆一样。这是w.r.t的根本区别。 OpenMP。
猜你喜欢
  • 1970-01-01
  • 2010-09-23
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
  • 2012-02-07
  • 2015-07-31
  • 1970-01-01
相关资源
最近更新 更多