我想向收到带有特定标签的邮件的其中一个级别发送邮件。如果有任何等级收到消息并且消息被消耗。在MPI_Recv()中,我们可以使用MPI_ANY_SOURCE / MPI_ANY_TAG接收消息,但MPI_Send()不能执行此操作。如何发送目的地未知的邮件? MPI_Bcast()无法做到,因为收到后,我必须回复源进程。 感谢。
答案 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个进程从一个进程中窃取所有工作,你需要分解一些东西。)