C ++; MPI:通过MPI向量矢量发送结构

时间:2012-11-02 10:23:30

标签: 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);

程序因Segmentation故障而终止。 有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:4)

您正在通过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了解更多信息