1

我正在尝试使用 OpenMPI 将数据分布在多个工作人员之间,但是,我正在以一种相当自定义的方式进行数据划分,这种方式适合MPI_ScatterMPI_Broadcast. 我想做的是让每个处理器在队列中(或其他一些异步机制)做一些工作,这样他们就可以在第一个数据块上完成工作,获取下一个块,重复直到没有更多块。

我知道MPI_Isend,但是如果我发送数据,MPI_Isend则在发送完成之前无法修改它;强迫我使用MPI_Wait,因此不得不等到线程完成接收数据!

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

4

1 回答 1

1

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

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

于 2013-09-08T01:46:27.720 回答