3

我想使用 MPI 开发一个任务调度程序,其中有一个主处理器并且有工作/客户端处理器。每个工作人员都有它需要计算的所有数据,但从主服务器获取索引来处理。计算完成后,worker 将一些数据返回给 master。问题是有些进程会很快,有些进程会很慢。如果我运行一个循环,以便在每次迭代中主机发送和接收(阻塞/非阻塞)数据,那么它无法继续下一步,直到它从分配给它的上一个索引中接收到来自当前工作人员的数据。底线是,如果一个 worker 的计算时间过长,那么它就会成为限制因素,即使使用了非​​阻塞技术,master 也无法继续为下一个 worker 分配索引。

我开始认为 MPI 可能不是这样做的范例。python会是一个很好的平台来进行任务调度吗?

4

2 回答 2

3

使用MPI_Irecv()and是绝对可能的MPI_Test()。主进程需要做的就是为每个工作进程发布一个非阻塞接收,然后在循环中测试每个工作进程的传入数据。如果一个进程完成,给它发送一个新的索引,为它发布一个新的非阻塞接收,然后继续。

于 2012-06-24T20:34:01.170 回答
1

每个进程的一个 MPI_IRecv 是一种解决方案。这具有在工作完成时需要取消不匹配的 MPI_IRecv 的缺点。

MPI_ANY_SOURCE 是备用路径。这将允许管理器进程在任何给定时间有一个未完成的 MPI_IRecv,并且 MPI_Send 的“下一个”进程将与 MPI_ANY_SOURCE 匹配。当没有额外的工作要做时,这具有 MPI_Send 中多个等级阻塞的缺点。需要制定某种“无事可做”的信号,这样队伍才能干净利落地退出。

于 2012-06-25T22:32:34.790 回答