首页 > 解决方案 > 在 mpi (mpi4py) 中创建组通信器

问题描述

我正在尝试使用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 序列创建新的通信器?

标签: pythonmpimpi4py

解决方案


newComm是任务上的合法沟通[3-4]者,但MPI_COMM_NULL在任务上[0-2]。该标准不允许您调用MPI_Comm_size(MPI_COMM_NULL, ...),因此您的错误。

解决方案是显式调用newComm.Get_size()任务[3-4],或任何没有调用的任务。newComm MPI_COMM_NULL


推荐阅读