如何创建仅包含类或结构的一部分的MPI数据类型?

时间:2019-04-07 16:42:25

标签: c++ mpi

我想创建一个仅在类或结构中指定部分数据的新数据类型。

我已经知道如何使用 MPI_Type_create_struct 创建包含类中所有数据的新数据类型:

class A {
public:
  double value_1;
  double value_2;
  int    value_3;
  char   value_4;
};

// Create a new data type called "MPI_derived_type"
int      count {3};
int      block_lengths[3] = {2, 1, 1};
MPI_Aint displacements[3];
displacements[0] = offsetof (A, value_1);
displacements[1] = offsetof (A, value_3);
displacements[2] = offsetof (A, value_4);
MPI_Datatype types[3] = {MPI_DOUBLE, MPI_INT, MPI_CHAR};
MPI_Type_create_struct (count, block_lengths, displacements, types, &MPI_derived_type);
MPI_Type_commit (&MPI_derived_type);

使用上述代码,我可以发送和接收class A中的所有数据。但是,由于一些优化问题,我只需要在类中发送部分数据。例如,我只需要发送value_1value_3

  • 如何创建仅包含value_1value_3但不包含value_2value_4的新数据类型?
  • 我可以使用 MPI_Type_create_struct 仅指定结构的一部分以便以后进行通信吗?

0 个答案:

没有答案