关于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_FLOAT
和 MPI_DOUBLE
不太符合我的期望。有什么简单的解决方法吗?我可能只是漏掉了一些东西。
MPI_FLOAT
和"..."。MPI_DOUBLE
是 不 型(如 float
或 double
),但类型为 MPI_Datatype
所以,C++的 using
这里不能使用语法。
我想说的是 MPI_Datatype
是一个不透明的类型,它被实现为
int
在MPICH及其衍生物(和 MPI_FLOAT
是一个硬编码的整数)解决你的问题的便携方法可以是
#if defined(USE_SINGLE_PRECISION)
#define MPI_FLOAT_T MPI_FLOAT
#elif defined(USE_DOUBLE_PRECISION)
#define MPI_FLOAT_T MPI_DOUBLE
#endif
注意,可能有更C++的方式,但我不是合适的人提供建议。