鉴于主进程A产生一组工作进程B的情况,每个进程都产生自己唯一的工作进程C,如何在C到A之间打开一个通信器?
我正在尝试使用mpi4py在几段代码之间创建一个循环,这些代码彼此分开编写,同时最大限度地减少对代码的修改.因此,MPI代码的一般框架将是:
> Master A(一个进程)生成8个进程B的进程,并将数组分散到它们.
>每个B进程生成一个worker C,对该数组进行一些操作,并将其广播给自己的worker.
>每个工作者C以自己的方式操纵数组,然后(理想情况下)主数据A从每个C的数组中收集一个数组.
我知道这将涉及在现有流程之间打开一个相互通信器,可能使用群组通信.实现这一目标的最佳方法是什么?
谢谢.
解决方法:
有两种方法可以做到这一点.我不会说一个比另一个更好或更差,尽管第一个可能更好地匹配你的用例.
>使用名称发布系统(或其他方法)使用MPI_COMM_CONNECT和MPI_COMM_ACCEPT打开连接,以将A连接到需要与之通信的任何人.这可能导致A的一堆通信器取决于您创建的进程数量,因此这可能会导致一些不好的事情,但这可能是使这项工作最直接的方法.你只需要让A对MPI_COMM_ACCEPT进行一堆调用(遗憾的是,这个调用没有非阻塞版本).
>使用MPI_COMM_SPAWN不断合并您正在创建的互通器,以创建一个包含所有进程的巨型通信器.然后你就可以像往常那样发送消息(或者用A和所有的spawne创建新的子交流者,这样你就可以在他们中间做集体).