MPI-跨进程共享队列

问题描述 投票:1回答:1

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

从属节点“告诉”主节点总共完成1000个任务的最佳方法是什么?在我看来,我需要跨进程的某种共享队列,从属可以在任务完成后将数据推送到主服务器,而主服务器仅轮询此队列的大小,直到达到1000。随后,主服务器可以从此队列中清空数据重置队列大小以供从站填充更多数据。

mpi message-queue shared-memory distributed-computing
1个回答
2
投票

我推荐两种解决方案。

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

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

在这种情况下,我会坚持使用MPI_ANY_SOURCE,而不是一味地创建和销毁窗口。我认为没有必要在此添加这种复杂性。

© www.soinside.com 2019 - 2024. All rights reserved.