C++ MPI分布式、无序工作

C++ MPI分布式、无序工作,c++,python,c,mpi,distributed-computing,C++,Python,C,Mpi,Distributed Computing,我想编写一个MPI程序,其中主线程不断地向工作线程提交新作业(即,不只是在开始时,就像MapReduce模式中那样) 首先,假设我向100名工人提交100份工作 然后,我希望在工人完成工作时得到通知。我将发送下一个作业,其参数取决于迄今为止收到的所有结果。结果的顺序不必保留,我只需要在它们完成时使用它们 我可以使用C/C++/Python 从文档来看,我似乎可以广播N个作业,并收集结果。但这不是我所需要的,因为我没有所有可用的,而且聚集会阻塞。我正在寻找一个异步的、任意的工作者recv调用,本质

我想编写一个MPI程序,其中主线程不断地向工作线程提交新作业(即,不只是在开始时,就像MapReduce模式中那样)

首先,假设我向100名工人提交100份工作

然后,我希望在工人完成工作时得到通知。我将发送下一个作业,其参数取决于迄今为止收到的所有结果。结果的顺序不必保留,我只需要在它们完成时使用它们

我可以使用C/C++/Python


从文档来看,我似乎可以广播N个作业,并收集结果。但这不是我所需要的,因为我没有所有可用的,而且聚集会阻塞。我正在寻找一个异步的、任意的工作者recv调用,本质上是。

您可以使用
MPI\u任意源
MPI\u任意标记
从任何地方接收。收到后,您可以从必须传递给MPI_Recv调用的
MPI_Status
结构中读取信息(源和标记)

如果你使用它,你不需要任何异步通信,因为主人“倾听”每个人询问新工作并返回结果;每个从机完成任务,然后将结果发送给主机,请求新的工作并等待主机的答复


您根本不必使用“分散/聚集”功能,因为这些功能用于一系列数据,而且您的问题似乎有或多或少的独立任务。

使用术语mpi任务场中您最喜欢的搜索引擎。这是一个很好的起点——这似乎是正确的答案,并在本教程中演示: