1

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

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 数据类型来发送/接收对象数组?

4

1 回答 1

1

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

于 2013-11-05T20:42:04.083 回答