1

我在一个程序中使用 mpi4py。我用 n>1 个内核运行程序,每个内核都有自己的列表(我们可以将其称为“core_specific_list”的数字。我希望 0 级内核将所有列表收集在一个大列表中,我们可以称之为“big_list” .

我开始程序(只是为了定义变量):

from mpi4py import MPI
comm = MPI.COMM_WORLD

所以,为了让大名单做到这一点,我让每个核心调用:

big_list = comm.gather(core_specific_list, root = 0)

确实按预期创建了 big_list(其中每个元素都是其他等级的 core_specific_list 之一)。而且似乎每个列表元素都按照发送它的等级顺序排列(也就是说,big_list 的元素 0 是等级 0 的 core_specific_list 等)。

问:但是这个假设正确吗?也就是说,big_list 中的元素 j 是秩 j 的 core_specific_list 吗?(我知道我可以像我一样在某些情况下对此进行测试,但我需要绝对确保我可以依赖这个假设)

谢谢你。

4

1 回答 1

3

您绝对可以依赖这种行为,因为这正是MPI_GATHER调用(由 包装comm.gather)的工作方式。从 MPI 标准的 §5.5 开始:

根进程接收消息并按等级顺序存储它们。

...

另一种描述是,n组中的进程发送的消息按等级顺序连接,结果消息由根接收,就像调用MPI_RECV(recvbuf, recvcount·n, recvtype, ...).

于 2014-10-28T20:31:10.853 回答