如果是MPI_FLOAT_INT,那么c ++等效类型是什么

时间:2017-06-12 13:43:17

标签: c++ mpi

我正在为mpi编写一个type_traits库,但是当我将float int定义为MPI_FLOAT_INT的类型时,我在声明错误中得到两个或更多变量类型,{{1}的等价类型是什么1}}在c ++中?

3 个答案:

答案 0 :(得分:2)

根据documentation

  

MPI_FLOAT_INT
    这是一对32位浮点数后跟一个32位整数。

等效值为truestd::pair<float, int>

您可以尝试使用struct float_int{ float f; int i;};代替int32_tint,以尝试获得正确的尺寸。

答案 1 :(得分:2)

唯一的权威来源MPI standardMPI_FLOAT_INT定义为(第5.9.4节 MINLOCMAXLOC ):

  

数据类型MPI_FLOAT_INT ,就好像由以下指令序列定义。

type[0] = MPI_FLOAT
type[1] = MPI_INT
disp[0] = 0
disp[1] = sizeof(float)
block[0] = 1
block[1] = 1
MPI_TYPE_CREATE_STRUCT(2, block, disp, type, MPI_FLOAT_INT)
  

类似的陈述适用于MPI_LONG_INTMPI_DOUBLE_INT

这意味着该类型对应struct { float a; int b; },但前提是保证在ab之间不插入填充空格。在int为64位且必须在8个字节上对齐的系统上可能不是这种情况。可能需要指示编译器生成压缩结构,例如与海湾合作委员会:

#pragma pack(push, 1)
struct float_int
{
   float a;
   int b;
}
#pragma pack(pop)

请注意,MPI_FLOAT_INT旨在用于MINLOCMAXLOC缩减,以便找出最小/最大float值和最低编号等级抱着它。

答案 2 :(得分:0)

根据Linux man pageMPI_FLOAT_INT是一个定义为:

的结构

struct { float, int }