MPI_Scatter:散布顺序

时间:2018-01-16 19:39:26

标签: mpi openmpi

我的工作,我注意到即使我将相同数量的数据分散到每个进程,也需要更多时间将数据从根传输到最高级别的进程。我在分布式内存机上测试了这个。如果需要MWE,我将准备一个,但在此之前我想知道MPI_Scatter是否给予较低级别进程的特权。

1 个答案:

答案 0 :(得分:1)

MPI标准没有说明这样的事情,因此MPI库可以自由地实现MPI_Scatter()关于哪个任务可能比其他任务更早返回的方式。

例如,

Open MPI可以执行线性分割或二项分散(默认情况下,基于通信器和消息大小选择算法)。

话虽这么说,所有数据都必须从根进程发送到其他节点,所以显然,首先会提供一些节点。如果root进程的排名为零,我希望最高级别的进程最后会收到数据(我不知道任何实现拓扑感知的MPI_Scatter()的MPI库,但可能会在某一天出现)。如果根进程没有排名为零,那么MPI可能会在内部对排名重新编号(因此root总是虚拟排名为零),如果实现此模式,则接收数据的最后一个进程将是(root + size - 1) % size

如果从您的应用程序角度来看这不是最理想的,您始终可以选择以自己的方式重新实现MPI_Scatter()(如果需要,可以调用提供的库PMPI_Scatter())。另一种方法是MPI_Comm_split()(使用单一颜色)以重新编号,并使用新的通信器MPI_Scatter()