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

C++ 基于预处理器指令定义自定义MPI类型,c++,types,mpi,C++,Types,Mpi,只是一个关于MPI数据类型的快速问题,我想通过预处理器指令提供单精度和双精度支持。对于我的顺序程序,我是这样做的 #如果定义(使用单精度) 使用float=float; #定义的elif(使用双精度) 使用float=double; #恩迪夫 我天真地认为我可以为MPI做一些类似的事情,即 #如果定义(使用单精度) 使用MPI_FLOAT_T=MPI_FLOAT; #定义的elif(使用双精度) 使用MPI_FLOAT_T=MPI_DOUBLE; #恩迪夫 不过,似乎MPI\u FLOAT和

只是一个关于MPI数据类型的快速问题,我想通过预处理器指令提供单精度和双精度支持。对于我的顺序程序,我是这样做的

#如果定义(使用单精度)
使用float=float;
#定义的elif(使用双精度)
使用float=double;
#恩迪夫
我天真地认为我可以为MPI做一些类似的事情,即

#如果定义(使用单精度)
使用MPI_FLOAT_T=MPI_FLOAT;
#定义的elif(使用双精度)
使用MPI_FLOAT_T=MPI_DOUBLE;
#恩迪夫

不过,似乎
MPI\u FLOAT
MPI\u DOUBLE
并不是我所期望的那样。有没有简单的解决办法?我可能只是遗漏了一些东西。

< P>浮动> < /C>和<代码> MPIIOUTIO/<代码>是<强> > < >强> >类型(如<代码>浮点或<代码>双< /代码>),但“变量”类型为<代码> MPIYDATA YP> <代码>,因此C++ <代码>使用语法不能在此使用。 FWIW,
MPI_数据类型
是一种不透明类型,实现为

  • MPICH及其导数中的
    int
    (和
    MPI\u FLOAT
    是硬编码整数)
  • openmpi中的不透明指针
解决您的问题的一种便携式方法是

#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\u FLOAT
MPI\u DOUBLE
不是类型(比如
FLOAT
DOUBLE
),而是
MPI\u数据类型的“变量”
,因此,使用语法的C++ <代码>不能在这里使用。 FWIW,
MPI_数据类型
是一种不透明类型,实现为

  • MPICH及其导数中的
    int
    (和
    MPI\u FLOAT
    是硬编码整数)
  • openmpi中的不透明指针
解决您的问题的一种便携式方法是

#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\ucode>前缀作为用户类型或变量名称,因为这可能会与标准的未来添加内容冲突,或导致当前实现中的神秘错误。通常不建议使用
MPI\ucode>前缀作为用户类型或变量名称它可能与标准的未来补充内容冲突,或者导致当前实现中的神秘错误。