software que programming open microsoft informatica cluster mpi distributed-programming

que - mpi software



MPI recv de una fuente desconocida (2)

MPI_ANY_SOURCE es la respuesta obvia.

Sin embargo, si todos los rangos enviarán una solicitud al rango 0, entonces MPI_Irecv combinado con MPI_Testall también podría funcionar como un patrón. Esto permitirá que las llamadas MPI_Send se ejecuten en cualquier orden, y la información se puede recibir y procesar en el orden en que las llamadas MPI_Irecv coinciden.

Estoy implementando en MPI un programa en el cual el proceso principal (con rango = 0) debería poder recibir solicitudes de otros procesos que solicitan valores de variables que solo se conocen por la raíz. Si hago MPI_Recv (...) por el rango 0, tengo que especificar el rango del proceso que envía la solicitud a la raíz, pero no puedo controlar eso ya que los procesos no se ejecutan en el orden 1,2,3 , .... ¿Cómo puedo recibir la solicitud de cualquier rango y usar el número del proceso de emisión para enviar la información necesaria?


Esto supone que estás utilizando C. Hay conceptos similares en C ++ y Fortran. Solo debe especificar MPI_ANY_SOURCE como la fuente en el MPI_recv() . La estructura de estado contiene la fuente real del mensaje.

int buf[32]; MPI_Status status; // receive message from any source MPI_recv(buf, 32, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status); int replybuf[]; // send reply back to sender of the message received above MPI_send(buf, 32, MPI_INT, status.MPI_SOURCE, tag, MPI_COMM_WORLD);