将MPI_Scatter与C++一起使用 - 对不同的通信器进行散射

Dre*_*rew 1 c++ mpi

在C++中,使用MPI_Scatter的示例是:

MPI::COMM_WORLD.Scatter(sendbuf, 100, MPI::INT, recvarr, 100,MPI::INT, root);
Run Code Online (Sandbox Code Playgroud)

这将每个进程的内容分散sendbuff到100个单独的进程recvarr中,但仅限于MPI World通信器.

与C中的MPI_Scatter不同,C++版本没有通信器的输入.如何修改此示例以适用于任何通信器,而不仅仅是MPI_COMM_WORLD?

例如,说我的传播者被命名comm.如何sendbuffcomm通信组内而不是MPI_COMM_WORLD中分散?

Phi*_*ler 5

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中删除,因为它们未得到充分利用,难以维护,并且有类似的笨拙误解.