在MPI中使用非阻塞发送和阻塞接收?

时间:2011-01-20 19:58:46

标签: parallel-processing mpi master-slave

我正在尝试实施master-worker程序。

我的主人有工作人员要做的工作。每当一个工人完成一份工作,他就会要求一位新工作,然后主人把它发给他。工人正在计算最小路径。当一个工人发现一个比他得到的全局最小值更低的最小值时,他会将它发送给包括主人在内的所有人。

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

然而, 我不确定使用非阻塞异步发送和阻止同步接收的影响

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

请帮助我了解我所做的是否正确。这是正确的解决方案吗?

1 个答案:

答案 0 :(得分:4)

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

所以,我有Send-Recv用于在主人和工人之间交换工作单位,而Isend-Irecv用于广播新的全局最小值。