es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo puedo utilizar MPI_Testany y MPI_Irecv para recibir únicamente el primer mensaje que llegue?

En c en “mpi.h”, creo que sería algo como

MPI_Request mpireq[2];
MPI_Status mpistat;
int temp, index, flag;
MPI_Irecv(&temp, 1, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &mpireq[0]);
MPI_Irecv(&temp, 1, MPI_INT, MPI_ANY_SOURCE, 1, MPI_COMM_WORLD, &mpireq[1]);
MPI_Testany(2, mpireq, &index, &flag, &mpistat);

pero creo que Testany es un proceso no bloqueante, por lo que no sé cómo usar flag e index. Propongo algo así, pero no sé si va a funcionar.

if(flag){
  printf("Alguien ha llegado\n");
  if (index == 0){ // hacer algo
  } else { // hacer algo más
  }
} else {
  printf("Aún no ha llegado nadie\n");
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Tu solución propuesta parece correcta.

    MPI_Testany() es una función sin bloqueo que devuelve inmediatamente. Verifica si alguna de las solicitudes en la matriz mpireq se ha completado o no. Si alguna de las solicitudes se ha completado, establece el indicador en true y devuelve el índice de la solicitud completada en la variable de índice. Si ninguna de las solicitudes se ha completado, establece el indicador en false y el índice en MPI_UNDEFINED.

    En tu código, estás verificando el valor del indicador para ver si alguna solicitud se ha completado. Si el indicador es true, significa que al menos una solicitud se ha completado. Luego, estás verificando el valor del índice para ver qué solicitud se ha completado. Si el índice es 0, significa que se ha completado la primera solicitud, y si el índice es 1, significa que se ha completado la segunda solicitud.

    En función del valor del índice, puedes decidir qué acción tomar. Si el índice es 0, puedes hacer algo, y si el índice es 1, puedes hacer algo más.

    En general, tu solución parece correcta y debería funcionar como se espera.

Comments are closed.