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.
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