我正在尝试使用OpenMPI在多个工作人员之间传播数据,但是,我正在以相当自定义的方式进行数据划分,不适合MPI_Scatter
或{{ 1}}。我想做的是给每个处理器一些工作在一个队列(或其他一些异步机制),这样他们就可以在第一块数据上完成工作,取下一个块,重复直到不再有块。< / p>
我知道MPI_Broadcast
,但是如果我使用MPI_Isend
发送数据,则在完成发送之前我无法对其进行修改;强迫我使用MPI_Isend
,因此必须等到线程完成接收数据!
这个问题是否有标准的解决方案,还是我必须重新考虑我的方法?
答案 0 :(得分:1)
使用MPI_ISEND
并不一定意味着在远程端收到消息。它只是意味着缓冲区可以重用。可能是消息已由Open MPI在内部缓冲,或者消息实际上已在另一端收到。这取决于您的邮件大小。
另一种选择是让您的员工在需要时让主流程工作,而不是将其推送到他们。然后主人只能根据需要工作。您可以为第一条消息执行MPI_SCATTER
,因为每个人都会收到一些数据。然后,让主服务器执行MPI_RECV(MPI_ANY_SOURCE)
以从其中一个工作进程获取消息。