通过OpenMPI共享非阻塞数据

时间:2013-09-07 14:53:24

标签: c++ c parallel-processing mpi openmpi

我正在尝试使用OpenMPI在多个工作人员之间传播数据,但是,我正在以相当自定义的方式进行数据划分,适合MPI_Scatter或{{ 1}}。我想做的是给每个处理器一些工作在一个队列(或其他一些异步机制),这样他们就可以在第一块数据上完成工作,取下一个块,重复直到不再有块。< / p>

我知道MPI_Broadcast,但是如果我使用MPI_Isend发送数据,则在完成发送之前我无法对其进行修改;强迫我使用MPI_Isend,因此必须等到线程完成接收数据!

这个问题是否有标准的解决方案,还是我必须重新考虑我的方法?

1 个答案:

答案 0 :(得分:1)

使用MPI_ISEND并不一定意味着在远程端收到消息。它只是意味着缓冲区可以重用。可能是消息已由Open MPI在内部缓冲,或者消息实际上已在另一端收到。这取决于您的邮件大小。

另一种选择是让您的员工在需要时让主流程工作,而不是将其推送到他们。然后主人只能根据需要工作。您可以为第一条消息执行MPI_SCATTER,因为每个人都会收到一些数据。然后,让主服务器执行MPI_RECV(MPI_ANY_SOURCE)以从其中一个工作进程获取消息。