在 C++ 中使用 MPI_Scatter - 分散在不同的通信器上
Using MPI_Scatter with C++ - Scattering over different communicators
在 C++ 中,使用 MPI_Scatter 的示例是:
MPI::COMM_WORLD.Scatter(sendbuf, 100, MPI::INT, recvarr, 100,MPI::INT, root);
这会将 sendbuff
的内容分散到 100 个单独的进程中,使每个进程 recvarr
,但仅在 MPI World 通信器中.
与 C 中的 MPI_Scatter 不同,C++ 版本没有用于通信器的输入。我如何修改此示例以适用于任何通信器,而不仅仅是 MPI_COMM_WORLD?
例如,假设我的通讯器名为comm
。如何将 sendbuff
分散到 comm
通讯组而不是 MPI_COMM_WORLD?
comm.Scatter(sendbuf, 100, MPI::INT, recvarr, 100,MPI::INT, root);
.
左边的对象是 MPI 通信器参数。 MPI::COMM_WORLD
恰好是 MPI 通信器的预定义实例,对应于 C 绑定的预定义 MPI_COMM_WORLD
请注意,MPI C++ 绑定已在 MPI-3.0 中删除,因为它们没有得到充分利用,难以维护,并且存在像这样的笨拙的误解。
在 C++ 中,使用 MPI_Scatter 的示例是:
MPI::COMM_WORLD.Scatter(sendbuf, 100, MPI::INT, recvarr, 100,MPI::INT, root);
这会将 sendbuff
的内容分散到 100 个单独的进程中,使每个进程 recvarr
,但仅在 MPI World 通信器中.
与 C 中的 MPI_Scatter 不同,C++ 版本没有用于通信器的输入。我如何修改此示例以适用于任何通信器,而不仅仅是 MPI_COMM_WORLD?
例如,假设我的通讯器名为comm
。如何将 sendbuff
分散到 comm
通讯组而不是 MPI_COMM_WORLD?
comm.Scatter(sendbuf, 100, MPI::INT, recvarr, 100,MPI::INT, root);
.
左边的对象是 MPI 通信器参数。 MPI::COMM_WORLD
恰好是 MPI 通信器的预定义实例,对应于 C 绑定的预定义 MPI_COMM_WORLD
请注意,MPI C++ 绑定已在 MPI-3.0 中删除,因为它们没有得到充分利用,难以维护,并且存在像这样的笨拙的误解。