是否可以使用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数据类型以发送/接收对象数组?
答案 0 :(得分:1)
查看MPI_Pack / MPI_Unpack机制。在发送方面,您将元素填充到包缓冲区中并发送;接收方将逐个组件地解压缩它。这提供了这样可爱的可能性:首先解压缩一个整数,告诉你有多少后续双打要解包。这种方法的一大优点是它适用于只能通过迭代器等间接访问的对象。