2011-01-20 176 views
1

我正在尝试实现主人计划。在MPI中使用非阻塞发送和阻塞接收?

我的主人有工人打算做的工作。每次工人完成一项工作,他都会向主人请求一份新工作,并由主人将其发送给他。工人正在计算最小路径。当一个工人发现一个比他获得的全球最小值更好的最小值时,他将它发送给每个人,包括主人。

我计划让工人和主人用MPI_ISEND发送数据。另外,我认为接收应该被阻止。当没有人要求工作或更新最佳结果时,主人无事可做,所以他应该阻止等待接收。另外,每个工人在完成工作之后都应该等待领取新工具。

尽管如此,我不知道的使用异步非阻塞发送的影响,并阻止同步接收

另一个我认为是使用MPI_IPROBE,但我不确定这会给我任何优化。

请帮我理解我在做什么是对的。这是正确的解决方案吗?

回答

2

您可以将阻塞发送与非阻塞接收进行匹配,反之亦然,这不会导致任何问题。但是,如果在工作人员工作时,主人确实无事可做,工作人员在完成工作单位后应该阻止工作,那么在这方面没有任何阻塞沟通的理由。主人可以通过MPI_ANY_SOURCE发布阻止接收,并且工作人员可以使用阻止发送来回传他们的结果,因为主人的匹配接收已经发布。

所以,我会让Send-Recv在主人和工作人员之间交换工作单位,Isend-Irecv则用于广播新的全球最低标准。