使用排序运算符<定义MPI结构在C ++中

时间:2018-02-05 18:05:21

标签: c++ struct mpi user-defined-types mpich

我有一个序列化程序的结构,我想与MPI并行化。我使用的是MPICH。我的程序使用<在sturct上运算符创建id到顶点的映射,以便能够创建我需要将此运算符保留在我的结构中的相同类型的映射。

struct Vertex{
  int id;
  int degree;
  double credit;
  bool operator <(const Vertex& x) {return this->id < x.id;}
};

我需要知道如何使用MPI数据类型重新定义此结构。到目前为止,我有这个......

  MPI_Datatype vertex_type, oldtypes[3];
  int blockcounts[4];
  MPI_Aint offsets[4], extent_int, extent_double,
                       lower_bound_int, lower_bound_double;

  offsets[0] = 0;
  oldtypes[0] = MPI_INT;
  blockcounts[1] = 1;

  MPI_Type_get_extent(MPI_INT, &lower_bound_int, &extent_int);
  offsets[1] = extent_int;
  oldtypes[1] = MPI_INT;
  blockcounts[1] = 1;

  offsets[2] = 2*extent_int;
  oldtypes[2] = MPI_DOUBLE;
  blockcounts[2] = 1;

  MPI_Type_get_extent(MPI_DOUBLE, &lower_bound_double, &extent_double);
  offsets[3] = 2*extent_int + extent_double;
  oldtypes[3] = MPI_Aint;
  blockcounts[3] = 1;

  MPI_Type_create_struct(4, blockcounts, offsets, oldtypes, &vertex_type);
  MPI_Type_commit(&person_type);

我不认为这是在MPI结构中定义运算符的正确方法。我已经找到了关于此的文档,但是还没有找到任何有用的东西。

https://linux.die.net/man/3/mpi_double https://www.rc.colorado.edu/sites/default/files/Datatypes.pdf

有没有办法让我的MPI结构指向Vertex <运算符?

1 个答案:

答案 0 :(得分:0)

我的问题无效。没有必要在MPI中传递运算符,因为MPI关注的是传递数据而不是函数。

感谢您的评论。