2012-11-02 42 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