2011-04-30 11 views
5

Tengo un programa MPI donde cada nodo envía algunos valores a otros nodos. Los remitentes saben qué nodos enviar los datos pero los receptores no saben 1) la cantidad de datos que se espera al final y 2) que los rangos le van a enviar.cómo manejar una situación en mpi donde el número de mensajes para recibir es desconocido

Puedo usar MPI_ANY_SOURCE para la segunda parte del problema anterior, pero no tengo ni idea de cómo sabe el receptor cuánto tiene que recibir. es decir, cuántas veces debería llamar a la función de recepción en MPI en el nodo receptor.

+0

Creo que usar MPI_Put me puede ayudar a resolver mi problema porque de esa manera no tengo que preocuparme por la parte de recepción ... !! Algún comentario ? – Neal

Respuesta

1

La gran ventaja de las comunicaciones unilaterales en MPI2 es que no necesita coordinar envíos con recieves, por lo que definitivamente sería un enfoque. Por otro lado, aún necesita saber la cantidad de datos que pueden aparecer en su camino al crear la ventana para que otros puedan acceder a MPI_Put. Entonces eso es potencialmente un problema.

Pero también es posible coordinar mensajes punto a punto. Como parece que todos los remitentes saben cuántos mensajes enviarán y a quién, puede combinar toda esa información. Por ejemplo, decir que había 4 procesadores, y el proceso 1 tuvo que enviar un mensaje a cada uno de los procesos 0 y 2. Podría tener una matriz de enteros tosend:

toSend[] = {1,0,1,0}

y así podía cada uno de los otros procesadores. Entonces podría hacer un MPI_Allreduce(...., MPI_SUM,...) de estas matrices, y ahora cada procesador sabría la cantidad total de mensajes para recibir; Luego, podrían publicar muchos correos no bloqueados de MPI_ANY_SOURCE.

Si tampoco se conoce la cantidad de datos por mensaje, eso es un poco más complicado; pero podría hacer lo mismo con la cantidad de datos; crear un espacio de búfer apropiado; entonces podría hacer MPI_Bsend() sy los receptores podrían hacer MPI_Probes y MPI_Recv's.

+0

Para mi problema, hay un límite en la cantidad de datos para que la comunicación unilateral sea lo suficientemente buena para mí. Continuaré con eso e implementaré eso. Por cierto, el segundo enfoque también suena bien y lo cambiaré en caso de problemas. gracias jonathan por ayudar .. :) – Neal

Cuestiones relacionadas