【问题标题】:MPI Task SchedulingMPI 任务调度
【发布时间】:2012-06-26 06:32:34
【问题描述】:

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

我开始认为 MPI 可能不是执行此操作的范例。 python 会是一个很好的任务调度平台吗?

【问题讨论】:

  • LAM/MPI 提供了一个detailed example 您想要实现的内容。请注意,“主/从”术语有点过时,为了政治正确,现在称为“经理/工人”。

标签: scheduled-tasks mpi


【解决方案1】:

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

【讨论】:

  • 哎呀!现在这很简单。谢谢!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-30
    • 2020-11-19
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多