mpi4py - 获取进程自己的通信器

时间:2016-01-16 18:25:57

标签: python mpi4py communicator

我们目前正在开发一个mpi4py项目,我们希望将这些流程分组到不同的组中。然后我们将这些组分配给他们自己的传播者。这些步骤由过程0完成。

现在问题是其他进程如何找出他们所属的沟通者?

请注意,这些群组的大小不同,例如:第一组包含5个进程,第二组包含3个进程。那么,进程4(在第一组中)如何从第一组获得通信器。

2 个答案:

答案 0 :(得分:0)

MPI为您做到这一点。看看MPI_COMM_SPLIT,或者在mpi4py中它将是COMM.Split()。重要的参数是颜色' (哪些小组流程最终会进入)和'关键' (一个过程在该组中的顺序)。

听起来你已经知道了自己想要的颜色'你的过程。 COMM.Split()是父通信器的集体,因此您将在每个节点上计算颜色应该是什么,然后拆分通信器。您可以单独保留密钥,在这种情况下,流程将根据其在父通信器中的排名进行排序。

答案 1 :(得分:0)

我们通过简单地让每个进程执行相同的初始化来解决问题,即每个进程创建每个组和通信器,并根据相同的模式将进程分配给这些组。这样,流程就知道了相应的沟通者。

有趣的是我们发现,尽管每个过程都创建了所有的群组和传播者,但他们只知道他们所属的传播者(和群体)。 例如,如果属于通信器1而不是2的进程4想要使用通信器2,则它将崩溃。根据错误消息,这是因为它不知道通信器,虽然它在开始时初始化它。