【发布时间】:2020-05-10 06:13:49
【问题描述】:
我有一个 MPI 程序,其中主节点等待从节点完成一定数量的任务(比如 1000 个)。从节点处于 while(True) 循环中,并继续从它们的任务中生成输出。这些任务的运行时间可能因任务和节点而异,因此如果有 2 个从节点并且主节点需要等待 1000 个任务,那么从节点 1 可能已经完成了 450 个任务,而从节点 2 则完成了另外 550 个任务.
从节点“告诉”主节点总共完成了 1000 个任务的最佳方式是什么?在我看来,我需要某种跨进程的共享队列,一旦任务完成,从属可以推送数据,而主控只是轮询这个队列的大小,直到它达到 1000。随后,主控可以从这个队列中排出数据重置从属队列大小以填充更多数据。
【问题讨论】:
-
MPI 代表消息传递接口,因此没有“共享队列”。相反,进程相互发送和接收消息。一个典型的场景是从机向主机请求一些工作,主机向从机发送一些工作,从机将其结果返回。如果进程之间应该存在一些不平衡,请让 master 使用
MPI_ANY_SOURCE。
标签: mpi message-queue shared-memory distributed-computing