首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MPI任务调度

MPI任务调度
EN

Stack Overflow用户
提问于 2012-06-25 03:39:25
回答 2查看 4.3K关注 0票数 3

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-25 04:34:01

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

票数 3
EN

Stack Overflow用户

发布于 2012-06-26 06:32:35

每个进程对应一个MPI_IRecv就是一个解决方案。这样做的缺点是,当工作完成时,需要取消不匹配的MPI_IRecv。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11180624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档