如何在MPI中发送没有特定目的地的消息?

时间:2012-03-15 11:59:27

标签: parallel-processing mpi hpc

我想向收到带有特定标签的邮件的其中一个级别发送邮件。如果有任何等级收到消息并且消息被消耗。在MPI_Recv()中,我们可以使用MPI_ANY_SOURCE / MPI_ANY_TAG接收消息,但MPI_Send()不能执行此操作。如何发送目的地未知的邮件? MPI_Bcast()无法做到,因为收到后,我必须回复源进程。 感谢。

3 个答案:

答案 0 :(得分:5)

我要做的是让工人向主人发出信号,表明他们已准备好接收。主人会记录哪些等级准备就绪,选择一个(最低排名第一,随机,循环,无论你喜欢),发送给它,并清除其“准备好”标志。

答案 1 :(得分:1)

您是否只想将消息发送到随机排名?

 MPI_Comm_size(MPI_COMM_WORLD, &size);
 sendto = rand() % size;
 MPI_Send(buffer, count, MPI_CHAR, sendto, 0, MPI_COMM_WORLD);

答案 2 :(得分:1)

简短的回答是:你不能在MPI中这样做。

稍长的答案是:你可能不想这样做。我猜你正试图设置一些偷工作的东西。正如suszterpatt建议的那样,你可以使用片面通信来“抓取”发送过程中的工作,但是你需要使用锁,除非有一些本地进程组的想法,否则这将无法很好地扩展到许多进程(也就是说,你不能让1000个进程从一个进程中窃取所有工作,你需要分解一些东西。)