Python 与mpi4py中生成的进程的相互通信?
假设主进程a生成一组工作进程B,每个工作进程B生成自己唯一的工作进程C,我如何打开C到a之间的通信器 我正在尝试使用mpi4py在几段代码之间创建一个循环,这些代码彼此独立编写,同时尽量减少对代码的修改。因此,MPI代码的总体框架将是:Python 与mpi4py中生成的进程的相互通信?,python,mpi,mpi4py,Python,Mpi,Mpi4py,假设主进程a生成一组工作进程B,每个工作进程B生成自己唯一的工作进程C,我如何打开C到a之间的通信器 我正在尝试使用mpi4py在几段代码之间创建一个循环,这些代码彼此独立编写,同时尽量减少对代码的修改。因此,MPI代码的总体框架将是: 主进程A(一个进程)生成辅助进程B的8个进程,并向它们散布一个数组 每个B进程产生一个工作进程C,对数组进行一些操作,并将其广播给自己的工作进程 每个辅助C以自己的方式操纵数组,然后(理想情况下)主A从每个C的数组中收集一个数组 我知道这将涉及在现有流程之间打开
谢谢。有两种方法可以让你在我的脑海里完成这件事。我不会说一个比另一个好或坏,尽管第一个可能更符合您的用例
MPI\u COMM\u CONNECT
和MPI\u COMM\u ACCEPT
将a连接到需要与其通信的人。这可能会导致一系列的通讯器,具体取决于您创建的进程数量,因此这可能会导致一些不好的事情,但这可能是最直接的方法。您只需对MPI\u COMM\u ACCEPT
进行一系列调用即可(遗憾的是,此调用没有非阻塞版本)MPI\u COMM\u SPAWN
合并,创建一个包含所有进程的巨型通讯器。然后,您可以像往常一样发送消息(或者创建一个新的子通讯器,其中包含一个和所有的派生对象,这样您就可以在它们之间进行集体活动)谢谢,韦斯利!选项1更符合我的目标。在mpi4py中使用MPI_COMM_CONNECT和ACCEPT的语法是什么?它是否简单到让每个工作进程调用MPI.MPI\u COMM\u CONNECT(),然后主进程就有了与工作进程一样多的“COMM\u n=MPI.MPI\u COMM\u ACCEPT”行?我不知道语法。我从不使用MPI4PY。不过我肯定有一些文档。