我正在尝试使用 mpi4py 创建一个MPI组。我目前的尝试是这样的:
from mpi4py import MPI
comm = MPI.COMM_WORLD
newGroup = comm.group.Excl([0, 1, 2])
print newGroup.size
newComm = comm.Create_group(newGroup)
print newComm
print newComm.Get_size()
newGroup.size
调用的确返回2(我用5个进程启动了应用程序),而newComm
变量指示是通信者。但是,一旦我尝试调用Get_size
,就会引发异常:
mpi4py.MPI.Exception:MPI_ERR_COMM:无效的通信器
如何基于预定义的进程ID序列创建新的通信器?
答案 0 :(得分:1)
newComm
是任务[3-4]
的合法交流者,但MPI_COMM_NULL
是任务[0-2]
的合法沟通者。该标准不允许您调用MPI_Comm_size(MPI_COMM_NULL, ...)
,从而导致您的错误。
解决方案是在任务newComm.Get_size()
上或在[3-4]
不是不是 newComm
的任何任务上显式调用MPI_COMM_NULL
。