MPI - 跨进程共享队列

MPI - Shared queue across processes

我有一个 MPI 程序,其中主节点等待直到从节点完成一定数量的任务(比如 1000)。从节点处于 while(True) 循环中,并继续从其任务中生成输出。这些任务的运行时间可能因任务和节点而异,因此如果有 2 个从节点并且主节点需要等待 1000 个任务,那么从节点 1 可能已经完成了 450 个任务,而从节点 2 可能已经完成了另外 550 个任务.

从节点到 "tell" 主节点总共完成了 1000 个任务的最佳方式是什么?在我看来,我需要某种跨进程的共享队列,从服务器可以在任务完成后推送数据,而主服务器只轮询这个队列的大小,直到它达到 1000。随后,主服务器可以从这个队列中排出数据重置从站的队列大小以填充更多数据。

我推荐两种解决方案。

Gilles 指出的第一个是使用 MPI_ANY_SOURCE 接收 1000 条可以从任何工作人员发送的完成消息。

第二种是使用MPI_ACCUMULATE。在这种情况下,主节点共享一个初始化为0的window,然后每个工作节点在每个任务完成后使用MPI_ACCUMULATE来增加window中的值。 master 轮询它自己的本地 window 直到它达到 1000.

在这种情况下,我会坚持使用 MPI_ANY_SOURCE 而不是创建和销毁 windows。我认为没有令人信服的理由在此处添加这种复杂性。