现在,我有一个由单个主人和许多工人组成的应用程序。应用程序要求非常简单:工作人员完成一些作业并将数据发送到master和master将这些数据分别存储到文件中。我可以简单地在工作端使用MPI_Send将数据发送给master。但是主人不知道数据发送顺序。有些工人走得快,有些人走得很慢。更具体地说,假设有5名工人,则数据发送顺序可以是1,3,4,5,2或2,5,4,1,3。如果我只是在主端使用MPI_Recv为(i = 1到5)写一个for循环来获取数据,那么master和一些更快的worker必须等待很长时间。我知道MPI_Gather可以实现这一点。但我不确定MPI_Gather是并行工作还是只是MPI_Recv的一些顺序调用?另一个问题是我的数据非常大,需要将超过1GB的数据发送给master。如果我将数据划分为中继,可能会使其更复杂。我不认为MPI_Gather可以工作。我也尝试过考虑原始套接字编程,但我认为这不是一个好习惯。你能给我一些建议吗?
答案 0 :(得分:2)
答案 1 :(得分:0)
工人可以写出文件而不是将数据发送回主人吗?当一个工人完成时,它可以向主人发送“我已完成”的消息。然后,主人可以将下一部分工作发送给该工作人员。当没有剩下的工作要做时,让主人向工人发送“不再工作”的信息,然后工人可以拨打MPI Finalize。