2012-03-15 14 views
5

Deseo enviar un mensaje a uno de los rangos recibiendo un mensaje con una etiqueta específica. Si hay algún rango recibido, el mensaje y el mensaje se consumen. En MPI_Recv() podemos recibir un mensaje usando MPI_ANY_SOURCE/MPI_ANY_TAG pero MPI_Send() no puede hacer esto. ¿Cómo puedo enviar un mensaje con un destino desconocido? El MPI_Bcast() no puede hacerlo porque después de recibirlo, tengo que responder al proceso de origen. Gracias.¿Cómo enviar un mensaje sin un destino específico en MPI?

+0

Si el receptor sabe qué datos necesita, puede usar operaciones MPI de una cara, a saber, 'MPI_Get'. –

+1

Esta pregunta sería muy bien recibida en http://scicomp.stackexchange.com –

Respuesta

4

Lo que haría es hacer que los procesos de trabajo indiquen al maestro que están listos para recibir. El maestro mantendría un registro de los rangos que están listos, elija uno (rango más bajo primero, aleatorio, round robin, como quiera), envíelo y borre su bandera de "listo".

1

¿Desea enviar un mensaje al azar?

MPI_Comm_size(MPI_COMM_WORLD, &size); 
sendto = rand() % size; 
MPI_Send(buffer, count, MPI_CHAR, sendto, 0, MPI_COMM_WORLD); 
1

La respuesta corta es: No se puede hacer esto en MPI.

La respuesta un poco más larga es: Probablemente no quieras hacer esto. Supongo que estás intentando establecer algún tipo de robo de trabajo. Como suszterpatt sugirió, podría usar la comunicación unilateral para 'agarrar' el trabajo del proceso de envío, pero necesitará usar bloqueos, y esto no se adaptará bien a muchos procesos a menos que haya alguna idea de un grupo de proceso local (es decir, no puede tener 1,000 procesos, todo el robo de trabajo de un proceso, tendrá que descomponer las cosas).

Cuestiones relacionadas