1

この構造を 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);

そして、プログラムはセグメンテーション違反で終了しました。誰でも私を助けてもらえますか?

4

1 に答える 1

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をご覧ください。

于 2012-11-02T10:28:52.747 に答える