MPI任务调度

时间:2012-06-24 19:39:25

标签: scheduled-tasks mpi

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

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

2 个答案:

答案 0 :(得分:3)

使用MPI_Irecv()MPI_Test()绝对可以。所有主进程需要做的是为每个工作进程发布一个非阻塞接收,然后在循环测试中为每个进程数据发送一个。如果进程已完成,请向其发送新索引,为其发布新的非阻塞接收,然后继续。

答案 1 :(得分:1)

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

MPI_ANY_SOURCE是备用路径。这将允许管理器进程在任何给定时间具有单个MPI_IRecv未完成,并且MPI_Send的“下一个”进程将与MPI_ANY_SOURCE匹配。当没有额外的工作要做时,MPI_Send中有几个等级阻塞的缺点。某种“无需做什么”的信号需要解决,所以排名可以做得干净利落。