4

假设主进程 A 产生一组工作进程 B,每个工作进程 B 都产生自己独特的工作进程 C,我如何打开 C 到 A 之间的通信器?

我正在尝试使用 mpi4py 在彼此分开编写的几段代码之间创建一个循环,同时最大限度地减少对代码的修改。因此,MPI 代码的一般框架将是:

  1. Master A(一个进程)派生出 8 个 worker B 的进程,并向它们分散一个数组。
  2. 每个 B 进程生成一个工作 C,对数组进行一些操作,并将其广播给自己的工作。
  3. 每个工人 C 以自己的方式操作数组,然后(理想情况下)主人 A 从 C 的每个数组中收集一个数组。

我知道这将涉及在现有进程之间打开一个互通器,可能使用组通信。实现这一目标的最佳方法是什么?

谢谢你。

4

1 回答 1

2

有两种方法可以让你在我的脑海中做到这一点。我不会说一个比另一个更好或更差,尽管第一个可能更符合您的用例。

  1. 使用名称发布系统(或其他方法)打开一个连接MPI_COMM_CONNECTMPI_COMM_ACCEPT并将 A 连接到需要与之通信的任何人。根据您创建的进程数量,这可能会导致 A 的一堆通信器,因此这可能会导致一些不好的事情,但这可能是使这项工作最直接的方法。你只需要让 A 做一堆调用MPI_COMM_ACCEPT(不幸的是没有这个调用的非阻塞版本)。

  2. 不断合并您正在创建的交互器,MPI_COMM_SPAWN以创建一个包含所有进程的巨型通信器。然后,您可以像往常一样发送消息(或使用 A 和所有生成者创建新的子通信器,以便您可以在它们之间进行集体)。

于 2014-02-18T16:18:05.640 回答