2012-10-29 49 views
1

是否可以使用MPI_Bcast,MPI_Scatter和MPI_Gather發送/接收C++對象和對象數組。如果是,那麼哪個MPI數據類型用於對象? 例如我有一個名爲cell的類。使用MPI發送/接收對象數組

class cell 
{ 
private:   
    int abc; 
    double xyz; 

public: 
    cell(){ }     
    ... 
}; 

在主函數中,我想做一個類的單元格的對象數組,並希望發送/接收爲對象數組。例如,

void main() 
{ 
... 
    cell** cells = new cell*[someVar]; 
     for(int i = 0; i < someVar; ++i) 
     { 
      cells[i] = new cell[someVar]; 
     } 
MPI_Bcast(cells, someVar, ???, 0, MPI_COMM_WORLD); 
... 
} 

我們如何定義一個MPI數據類型來發送/接收一個對象數組?

+1

您需要指定您正在使用的語言以及「對象」的含義。這可以是任何從C中的任意基本類型到包含任意數據結構的C++類。但是,一般來說,要發送一些沒有預定義的MPI數據類型(例如MPI_INT)的東西,必須通過枚舉其基本元素來自己構造適當的數據類型。 – Novelocrat

+0

@Novelocrat如何爲C++對象構造數據類型? – shaikh

+1

我認爲這個問題的第二個答案 - http://stackoverflow.com/questions/10419990/creating-an-mpi-datatype-for-a-structure-containing-pointers - 將是感興趣和用於您。 –

回答

1

查看MPI_Pack/MPI_Unpack機制。在發送端將元素填充到包緩衝區中,然後發送該元素;接收方逐個解包它。這提供瞭如此可愛的可能性,首先解開一個整數,告訴你有多少個後續的雙打要打開。這種方法的一大優點是它適用於只能通過迭代器或類似方法間接訪問的對象。