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