使用MPI发送/接收对象数组

时间:2012-10-29 04:41:50

标签: parallel-processing mpi

是否可以使用MPI_Bcast,MPI_Scatter和MPI_Gather发送/接收C ++对象和对象数组。如果是,那么哪个MPI数据类型用于对象? 例如,我有一个名为cell的类。

class cell
{
private:        
  int abc;
  double xyz;

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

在main函数中,我想创建一个类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 个答案:

答案 0 :(得分:1)

查看MPI_Pack / MPI_Unpack机制。在发送方面,您将元素填充到包缓冲区中并发送;接收方将逐个组件地解压缩它。这提供了这样可爱的可能性:首先解压缩一个整数,告诉你有多少后续双打要解包。这种方法的一大优点是它适用于只能通过迭代器等间接访问的对象。