用 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 关心的是传递数据,而不是函数。
感谢您的评论。
我有一个要与 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 关心的是传递数据,而不是函数。
感谢您的评论。