7.9.1.  Peer To Peer Communication

Message passing obsahuje radu funkci na vsechno mozne, ktere obsahuji popis datovych typu, ktere prenaseji. Zakladni jsou unicast funkce MPI::Send (void *buffer, int count, datatype &type, int dst, int tag, int comm) a MPI::Recv (void *buffer, int count, datatype &type, int src, int tag, int comm, status *status). Zprava je prijata pokud souhlasi pozadovany source a tag, da se dat MPI_ANY_TAG a MPI_ANY_SOURCE, pocet prijatych polozek se pozna z argumentu status. Zprava v Recv musi byt typove stejna jako v Send a musi se vejit do bufferu.

Zasilani je blokujici v tom smyslu, ze po navratu ze Send je mozne prepsat buffer, a asynchronni v tom smyslu, ze Send nemusi cekat na Recv. K dispozici jsou jeste volani BSend (zarucuje buffered send, kdy se zprava uklada do fronty), SSend (zajistuje synchronous send, kdy se ceka na prijemce) a RSend (zajistuje ready send, kdy prijemce musi byt v Recv nez odesilatel udela Send). Zarucuje se sender ordering. Pro buffered send jsou k dispozici volani MPI_BUFFER_ATTACH a MPI_BUFFER_DETACH, kterymi muze uzivatel alokovat pro MPI buffer.

Krom blokujicich operaci jsou k dispozici jeste neblokujici, ty se jmenuji MPI_ISEND, MPI_IRECV, MPI_WAIT, MPI_TEST, plus opet varianty pro buffered, synchronous a ready rezimy. ISend a IRecv vraci MPI_REQUEST, ktery se da predhodit MPI_WAIT (ceka na dokonceni) nebo MPI_TEST (rekne zda je dokonceno). Take MPI_WAITANY, MPI_WAITALL, MPI_WAITSOME, MPI_TESTANY, MPI_TESTALL, MPI_TESTSOME.

Jako drobnosti MPI_PROBE pro cekani na zpravu bez jejiho prijmuti, MPI_IPROBE pro neblokujici cekani na zpravu, MPI_CANCEL pro preruseni MPI_WAIT. Pak se take daji delat persistentni requesty pro odeslani nebo prijem paketu, ktere se daji opakovane startovat volanim MPI_START nebo MPI_STARTALL.