2012-11-02 94 views
1

我试图通过MPI发送此结构,但我不知道是否正确。C++; 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); 

和程序。 任何人都可以帮助我吗?

+2

请向我们展示segment fault fault backtrace ... – janr

+0

请记住,在内部,'std :: vector'将会有一个指向一个内存块的指针,它位于一个'Node'实例之外。 – Rook

回答

4

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

举例来说,如果我有一个节点,我在其sum_subset超过1000元,现在你只发送的sizeof(节点):

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了解更多信息

+0

谢谢,我将不得不序列化我的结构。我会把它做成我应该通过MPI发送的向量。 – kayn

+0

«您正通过MPI发送非POD数据,但这不正确»您的意思是,虽然发送矢量的作品,这是不正确的? – tuxayo