Per quanto riguarda MPI_Isend, lo standard MPI dice "Una chiamata di invio non bloccante indica che il sistema può iniziare a copiare i dati dal buffer di invio. Il mittente non deve accedere a nessuna parte del buffer di invio dopo che è stata chiamata un'operazione di invio non bloccante, fino a quando l'invio completa." (http://www.mpi-forum.org/docs/mpi-11-html/node46.html)Ok per chiamare MPI_Isend più volte su un buffer?
Fa riferimento al buffer di invio in un'altra chiamata di invio ok oppure è incluso in "accesso a qualsiasi parte del buffer di invio"?
In altre parole, il seguente codice C per il mittente è corretto?
MPI_Request req[2];
MPI_Status statuses[2];
...
MPI_Isend(buf, type, count, dest0, tag, comm, &req[0]);
MPI_Isend(buf, type, count, dest1, tag, comm, &req[1]);
MPI_Waitall(2, req, statuses);
Sto indovinando qui, che è il motivo per cui questo non sta entrando come una risposta completa, che ciò che davvero non vuoi fare è modificare il contenuto del buffer sorgente o leggere il contenuto del buffer di destinazione prima del l'invio è completo. Quindi per me, quello che stai facendo sembra OK. Ma per favore prova. Non credermi sulla parola. –
@ bob.sacamento Certo, è vero. E so che il mio codice sarebbe corretto per l'implementazione MPI che sto usando (guardò il codice sorgente), ma mi piacerebbe sapere se questo è corretto secondo lo standard, cioè lavorare su ogni corretta implementazione di MPI. –