Em MPI
, existe algum mecanismo interno para notificar um grupo de processos de que eles precisam para receber mensagens de outros processos?
No meu aplicativo, todo processo precisa enviar dados para um grupo de processos com IDs de classificação conhecidos (que potencialmente são alterados a cada iteração), mas eles não sabem a classificação dos processos dos quais as mensagens serão recebidas. Existe uma maneira portátil, de preferência embutida, de conseguir isso sem consultar cada processo?
MPI_Probe
essencialmente mais barato queMPI_Recv
?MPI_IProbe
chamadas para postar ou por quanto tempo continua a sondar?Outros já propuseram as várias variantes do MPI_Probe, mas gostaria de salientar uma coisa: o MPI não é uma chamada de procedimento remoto, ou seja, não há maneiras de notificar um processo de entrada de alguma mensagem (por exemplo, levantando um sinal ) As mensagens são enviadas, mas se o processo de recebimento não for procurá-las, nada acontecerá. Como tal, a resposta para sua pergunta é "não", mas um processo pode descobrir ativamente se uma mensagem foi enviada para ela.
fonte
http://mpitutorial.com/tutorials/dynamic-receiving-with-mpi-probe-and-mpi-status/ possui um tutorial que descreve o uso do MPI_Probe que pode ser útil para você.
fonte
Se os remetentes souberem para quem estão enviando, mas os destinatários não souberem de quem estão recebendo, basta postar seus recebimentos em MPI_ANY_SOURCE. Isso corresponderá ao recebimento com qualquer processo que enviar uma mensagem para ele.
Se os receptores realmente não receberem nada, eles poderão postar um iRecv. Sempre que um processo termina de enviar suas mensagens, ele pode postar um ibarrier. Quando o Ibarrier é concluído porque todos os processos entraram nele (e chamado MPI_WAIT no objeto de solicitação), todos sabem que a comunicação está concluída e podem cancelar o Irecv anterior.
fonte