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

define an MPI struct with ordering operator < in C++

我有一个要与 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 < 运算符?

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

感谢您的评论。