我在程序中使用mpi4py。 我使用n> 1个核心运行程序,每个核心都有自己的列表(我们可以调用#34; 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吗? (我知道我可以像我一样对某些情况进行测试,但我需要确保我可以依赖这个假设)
谢谢。
答案 0 :(得分:2)
你绝对可以依赖这种行为,因为这正是MPI_GATHER
调用(由comm.gather
包裹)的工作方式。从MPI标准的§5.5开始:
根进程接收消息并按排名顺序存储它们。
...
另一种描述是,组中进程发送的
n
消息按排名顺序连接,结果消息由root接收,就好像是 致电MPI_RECV(recvbuf, recvcount·n, recvtype, ...)
。