2014-10-28 51 views
1

我在程序中使用mpi4py。我运行的程序有n> 1个内核,每个内核都有它自己的列表(我们可以称之为“core_specific_list”的数字 我想排名0的内核收集所有列表中的一个大列表,我们可以称之为“ 。big_list”mpi4py的集合是否创建一个列表,其中的元素匹配行列?

我启动程序与(只是为了定义变量):

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是rank j的core_specific_list? (据我所知,我可以像我一样在一些情况下测试这一点,但我需要绝对确定我可以依靠这个假设)

谢谢。

回答

2

你完全可以依靠这种行为,因为这正是MPI_GATHER调用(由comm.gather包装)的工作原理。从MPI标准的§5.5开始:

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

...

一种替代描述是通过该组中的进程所发送的消息n在排位次序被连接,并且由根接收到结果消息,就好像由 调用MPI_RECV(recvbuf, recvcount·n, recvtype, ...)

+0

我感谢您的帮助。 – denvar 2014-10-28 20:43:15

相关问题