2010-11-30 10 views
5

Todo es el título. Mi equipo y yo estamos trabajando actualmente en un proyecto y estamos usando MPI. En un lugar, estamos haciendo un reclamo de MPI_send para un recurso con un tiempo de espera excedido. Si el recurso está disponible, devolvemos 1 y si no lo hace y el tiempo de espera finaliza, devolvemos 0. Intentamos usar las señales como SIGALRM, pero no funciona porque cada nueva solicitud cancela las antiguas configurando una nueva alarma.¿Hay un mecanismo de tiempo de espera en MPI?

Gracias por su respuesta !!

Respuesta

7

Debe investigar las primitivas de comunicación punto a punto sin bloqueo, como MPI_Isend, MPI_Irecv y MPI_Iprobe. Luego puede implementar el tiempo de espera usted mismo, y use MPI_Cancel si lo desea.

+0

Hola Edric y gracias por su respuesta. Pero, ¿cómo puedo usar el tiempo de espera? – Dimitri

+0

Debe iniciar un envío/recepción, implementar su propio tiempo de espera, verificar usando 'MPI_Test' para ver si la comunicación está completa, y luego completar el envío/recepción o cancelarlo. – Edric

2

No hay una forma estándar de lograr esto.

La implementación del par de envío/recepción con llamadas sin bloqueo (por ejemplo, MPI_Isend, MPI_Irecv) y el uso de MPI_Test y MPI_Cancel es una solución posible.

Dependiendo de la naturaleza de la naturaleza del recurso y del número de veces que se requiere esta funcionalidad en el programa, también podría considerar implementar el MPI_ISend como un objeto de "solicitud persistente". Hay más información aquí: Persistent Communications.

La ventaja de una solicitud persistente es que la solicitud se puede formar, y luego solo se ejecuta si el recurso está realmente disponible ... suponiendo que el recurso se puede verificar independientemente de la llamada MPI_ * real. La solicitud de comunicación persistente se puede reutilizar muchas veces a lo largo del programa, sin necesidad de reformar toda la llamada MPI_Send/MPI_Recv.

Cuestiones relacionadas