C++; MPI : Send struct with vector of vectors through MPI

标签 c++ vector struct mpi

我正在尝试通过 MPI 发送此结构,但我不知道这样做是否正确。

struct Node {
int sum_node;
int depth_node;
vector<vector<int> > subset;
vector<int> sum_subset;
vector<int> depth_subset;
};

像这样发送:

Node zz = stack.back();
stack.pop_back();
MPI_Send(&zz, sizeof(struct Node), MPI_BYTE, 1, MSG_WORK_SENT, MPI_COMM_WORLD);

这样接收:

Node gg;
MPI_Recv(&gg, sizeof(struct Node), MPI_BYTE, status.MPI_SOURCE, MSG_WORK_SENT, MPI_COMM_WORLD, &status);
stack.push_back(gg);

程序因段错误而终止。 有谁能帮帮我吗?

最佳答案

您正在通过 MPI 发送非 POD 数据,这是不正确的。 您需要在发送/接收工作期间序列化/反序列化整个节点。

例如,如果我有一个节点并且我在它的 sum_subset 中有 1000 个元素,现在你只发送 sizeof(Node) 过来:

  Node d;
  for(int i=0;i<1000;i++)
  {
    d.sum_subset.push_back(1);
  }
  cout << sizeof(Node) << endl;

结帐http://www.boost.org/doc/libs/1_51_0/libs/serialization/doc/index.html了解更多信息

关于C++; MPI : Send struct with vector of vectors through MPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13193353/

相关文章:

C++ 类作为 Objective-C 类的实例变量

vector - 如何过滤自定义结构的向量?

c++ - 如何在 C++ 中初始化 3D 数组

C++ vector 在 Release模式下未初始化为空

c++ - While循环与for循环中的迭代器失效

c++ - QList 模板化结构

struct 中的 Golang channel 表现不同,在创建 struct 时传递它,在创建后通过函数传递

c - 存储大小未知

c++ - 矛盾的未解析外部符号+未使用的库与 VS2017 和 FFMPEG 4

c++ - 糟糕的矢量化代码会影响可扩展性吗?