Jeśli chodzi o MPI_Isend, standard MPI mówi: "Niezablokowane wysyłanie wywołania wskazuje, że system może rozpocząć kopiowanie danych z bufora wysyłania." Nadawca nie powinien uzyskiwać dostępu do żadnej części bufora wysyłania po wywołaniu niezawierającej operacji wysyłania, aż do wysłania kończy. " (http://www.mpi-forum.org/docs/mpi-11-html/node46.html)OK, aby wielokrotnie wywoływać MPI_Isend na jednym buforze?
Czy odwołanie do bufora wysyłania w innym poleceniu wysyłania jest ok, czy jest zawarte w "dostęp do dowolnej części bufora wysyłania"?
Innymi słowy, czy poniższy kod C dla nadawcy jest prawidłowy?
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);
Zgaduję, tutaj, dlatego nie jest to pełna odpowiedź, że to, czego naprawdę nie chcesz robić, to modyfikowanie zawartości bufora źródłowego lub odczytanie zawartości bufora docelowego przed wysyłanie jest zakończone. Więc dla mnie to, co robisz, wygląda dobrze. Ale proszę, sprawdź. Nie wierz mi na słowo. –
@ bob.sacamento Oczywiście, to prawda. I wiem, że mój kod byłby poprawny dla implementacji MPI, której używam (spojrzał na kod źródłowy), ale chciałbym wiedzieć, czy jest to poprawne zgodnie ze Standardem, tj. Działałoby przy każdej poprawnej implementacji MPI. –