En MPI
, ¿hay algún mecanismo incorporado para notificar a un grupo de procesos que necesitan recibir mensajes de otros procesos?
En mi aplicación, todos los procesos deben enviar datos a un grupo de procesos con identificadores de rango conocidos (que potencialmente cambian en cada iteración), pero no conocen el rango de los procesos de los que recibirán mensajes. ¿Existe una forma portátil, preferiblemente incorporada, de lograr esto sin consultar todos y cada uno de los procesos?
MPI_Probe
esencialmente más barato queMPI_Recv
?MPI_IProbe
llamadas publicar o cuánto tiempo siguen sondeando?Otros ya han propuesto las diversas variantes de MPI_Probe, pero me gustaría señalar una cosa: MPI no es una llamada a procedimiento remoto, es decir, no hay formas de notificar a un proceso que ha entrado algún mensaje (por ejemplo, al emitir una señal ) Se envían mensajes, pero si el proceso de recepción no los busca, entonces no sucederá nada. Como tal, la respuesta a su pregunta es "no", pero un proceso puede determinar activamente si se le ha enviado un mensaje.
fuente
http://mpitutorial.com/tutorials/dynamic-receiving-with-mpi-probe-and-mpi-status/ tiene un tutorial que describe el uso de MPI_Probe que podría serle útil.
fuente
Si los remitentes saben a quién envían pero los receptores no saben de quién están recibiendo, simplemente publique sus recibos de MPI_ANY_SOURCE. Eso coincidirá con la recepción con cualquier proceso que le envíe un mensaje.
Si los receptores podrían no recibir nada, pueden publicar un iRecv. Cada vez que se realiza un proceso enviando sus mensajes, puede publicar am Ibarrier. Cuando Ibarrier se completa porque todos los procesos lo ingresaron (y llamaron a MPI_WAIT en el objeto de solicitud), todos saben que la comunicación se realizó y pueden cancelar su Irecv anterior.
fuente