【问题标题】:C++; MPI: Send struct with vector of vectors through MPIC++; MPI:通过 MPI 发送带有向量向量的结构
【发布时间】:2012-10-23 00:01:48
【问题描述】:

我正在尝试通过 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);

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

【问题讨论】:

  • 请向我们展示分段错误回溯...
  • 请记住,在内部,std::vector 将有一个指向位于 Node 实例之外的内存块的指针。

标签: c++ vector struct mpi


【解决方案1】:

您正在通过不正确的 MPI 发送非 POD 数据。 您需要在发送/接收工作期间对整个 Node 进行序列化/反序列化。

例如,如果我有一个节点,并且它的 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了解更多信息

【讨论】:

  • 谢谢,我必须序列化我的结构。我将把它做成我应该通过 MPI 发送的向量。
  • «您正在通过 MPI 发送不正确的非 POD 数据» 您的意思是虽然发送向量 有效,但它不正确?
猜你喜欢
  • 2016-07-01
  • 2018-07-21
  • 2013-08-29
  • 2011-11-21
  • 2011-02-02
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多