【发布时间】:2018-06-21 15:54:36
【问题描述】:
MPI_Scatter在C++中的函数原型如下:
MPI_Scatter(
void* send_data,
int send_count,
MPI_Datatype send_datatype,
void* recv_data,
int recv_count,
MPI_Datatype recv_datatype,
int root,
MPI_Comm communicator)
例如,我们可以将一个双精度数组 (send_data) 从根进程 (0) 分散到 procs 中,如下所示:
MPI_Scatter(send_data, send_count, MPI::DOUBLE, recv_data, recv_count, MPI::DOUBLE, 0, MPI_COMM_WORLD);
现在所有 proc 在recv_data 中都有拆分数组。
但是现在,如果send_data 是一个对象数组呢?例如,send_data 定义为
SomeClass *send_data
在这种情况下,MPI_Scatter 中的数据类型应该使用 MPI::DOUBLE,而不是 MPI::DOUBLE?
【问题讨论】:
-
注意 MPI 处理连续内存中的数据(例如,不是指向对象的指针数组)。您可以创建与您的类匹配的派生数据类型。由于您使用的是 C++,因此您可能想看看 Boost.MPI 和 Boost.Serialization。这不是标准的 MPI,但这些库可能会使用一些黑魔法来传输 c++ 对象,而无需您手动创建派生数据类型。
标签: c++ parallel-processing mpi openmpi