基于预处理器指令定义自定义MPI类型

问题描述 投票:0回答:1

关于MPI数据类型,我想提供单精度和双精度支持,我通过预处理器指令来实现。对于我的顺序程序,我做了

#if defined(USE_SINGLE_PRECISION)
  using floatT = float;
#elif defined(USE_DOUBLE_PRECISION)
  using floatT = double;
#endif

我天真地以为我可以为MPI做一些类似的事情,例如,我可以为MPI做一些类似的事情。

#if defined(USE_SINGLE_PRECISION)
  using MPI_FLOAT_T = MPI_FLOAT;
#elif defined(USE_DOUBLE_PRECISION)
  using MPI_FLOAT_T = MPI_DOUBLE;
#endif

不过,似乎 MPI_FLOATMPI_DOUBLE 不太符合我的期望。有什么简单的解决方法吗?我可能只是漏掉了一些东西。

c++ types mpi
1个回答
2
投票

MPI_FLOAT 和"..."。MPI_DOUBLE 型(如 floatdouble),但类型为 MPI_Datatype所以,C++的 using 这里不能使用语法。

我想说的是 MPI_Datatype 是一个不透明的类型,它被实现为

  • 一个 int 在MPICH及其衍生物(和 MPI_FLOAT 是一个硬编码的整数)
  • 在Open MPI中,一个不透明的指针。

解决你的问题的便携方法可以是

#if defined(USE_SINGLE_PRECISION)
  #define MPI_FLOAT_T MPI_FLOAT
#elif defined(USE_DOUBLE_PRECISION)
  #define MPI_FLOAT_T MPI_DOUBLE
#endif

注意,可能有更C++的方式,但我不是合适的人提供建议。

© www.soinside.com 2019 - 2024. All rights reserved.