基于预处理器指令定义自定义 MPI 类型
Defining custom MPI type based on preprocessor directive
只是一个关于 MPI 数据类型的快速问题,我想通过预处理器指令提供单精度和双精度支持。对于我的顺序程序,我做
#if defined(USE_SINGLE_PRECISION)
using floatT = float;
#elif defined(USE_DOUBLE_PRECISION)
using floatT = double;
#endif
我天真地认为我可以为 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_FLOAT
和 MPI_DOUBLE
似乎并不是我所期望的那样。有没有简单的解决方法?我可能只是在这里遗漏了一些东西。
MPI_FLOAT
和 MPI_DOUBLE
是 不是 类型(如 float
或 double
),但是 "variables" MPI_Datatype
类型,因此不能在此处使用 C++ using
语法。
FWIW,MPI_Datatype
是实现为
的不透明类型
- MPICH 及其衍生物中的
int
(并且 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++ 的方式来做这件事,但我不是就此提出建议的合适人选。
只是一个关于 MPI 数据类型的快速问题,我想通过预处理器指令提供单精度和双精度支持。对于我的顺序程序,我做
#if defined(USE_SINGLE_PRECISION)
using floatT = float;
#elif defined(USE_DOUBLE_PRECISION)
using floatT = double;
#endif
我天真地认为我可以为 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_FLOAT
和 MPI_DOUBLE
似乎并不是我所期望的那样。有没有简单的解决方法?我可能只是在这里遗漏了一些东西。
MPI_FLOAT
和 MPI_DOUBLE
是 不是 类型(如 float
或 double
),但是 "variables" MPI_Datatype
类型,因此不能在此处使用 C++ using
语法。
FWIW,MPI_Datatype
是实现为
- MPICH 及其衍生物中的
int
(并且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++ 的方式来做这件事,但我不是就此提出建议的合适人选。