python – 在mpi4py中产生进程的相互通信?

鉴于主进程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创建新的子交流者,这样你就可以在他们中间做集体).

上一篇:linux – 如何在使用mpirun时使分析器(valgrind,perf,pprof)使用调试符号来获取/使用本地版本的库?


下一篇:MPI学习笔记(三):矩阵相乘