[英]Does mpi4py's gather create a list with elements matching ranks?
我在程序中使用了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吗? (我知道我可以像以前一样在某些情况下对此进行测试,但我需要绝对确保我可以依靠此假设)
谢谢。
您绝对可以依靠该行为,因为这正是MPI_GATHER
调用(由comm.gather
包装)的工作方式。 根据MPI标准的第5.5节:
根进程接收消息并按等级存储它们。
...
另一种描述是,由组中的进程发送的
n
消息按等级顺序连接,并且结果消息由根接收,就像通过调用MPI_RECV(recvbuf, recvcount·n, recvtype, ...)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.