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

Parallel processing 如何在MPI中发送没有特定目的地的消息?,parallel-processing,mpi,hpc,Parallel Processing,Mpi,Hpc,我想向接收带有特定标记的消息的队列之一发送消息。如果有任何列组收到该消息,则该消息已被使用。在MPI_Recv()中,我们可以使用MPI_ANY_SOURCE/MPI_ANY_标记接收消息,但MPI_Send()不能这样做。如何发送目的地未知的邮件? MPI_Bcast()无法执行此操作,因为在接收后,我必须回复源进程。 谢谢。您只想将消息发送到随机队列吗 MPI_Comm_size(MPI_COMM_WORLD, &size); sendto = rand() % size; M

我想向接收带有特定标记的消息的队列之一发送消息。如果有任何列组收到该消息,则该消息已被使用。在MPI_Recv()中,我们可以使用MPI_ANY_SOURCE/MPI_ANY_标记接收消息,但MPI_Send()不能这样做。如何发送目的地未知的邮件? MPI_Bcast()无法执行此操作,因为在接收后,我必须回复源进程。
谢谢。

您只想将消息发送到随机队列吗

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

我要做的是让工作进程向主进程发出信号,表示它们已准备好接收。大师会记录哪些等级已经就绪,选择一个(最低等级优先,随机,循环,不管你喜欢什么),发送给它,并清除它的“就绪”标志。

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


稍微长一点的答案是:你可能不想这样做。我猜你是想设下什么盗窃案。正如suszterpatt所建议的那样,您可以使用单边通信从发送进程“抓取”工作,但您需要使用锁,并且这将无法很好地扩展到许多进程,除非对本地进程组有所了解(即,您不能让1000个进程都从一个进程中窃取工作,您需要对其进行分解).

如果接收器知道它需要什么数据,您可以使用单边MPI操作,即
MPI\u Get
。这个问题在