COMUNICAZIONI UNIDIREZIONALI

Quando si spedisce un messaggio da un processo ad un altro, ad esempio tra il processo 0 al processo 1, vi sono 4 diverse possibili combinazioni di funzioni MPI tra cui sceglire dipendentemente dal fatto che il processo che spedisce il messaggio e quello che lo riceve chiamino funzioni MPI bloccanti o non bloccanti.
Scritte esplicitamente le 4 combinazioni sono le seguenti:
if(mype.eq.0) then
  call MPI_SEND(imesg,1,MPI_INTEGER,1,itag,MPI_COMMON_WORLD,ierr) 
elsif(mype.eq.1) then 
  call MPI_RECV(imesg,1,MPI_INTEGER,0,itag,MPI_COMMON_WORLD,istatus,ierr) 
endif
if(mype.eq.0) then
  call MPI_ISEND(imesg,1,MPI_INTEGER,1,itag,MPI_COMMON_WORLD,ireq,ierr)
  ...
  call MPI_WAIT(ireq,istatus,ierr)
elsif(mype.eq.1) then 
  call MPI_RECV(imesg,1,MPI_INTEGER,0,itag,MPI_COMMON_WORLD,istatus,ierr) 
endif
if(mype.eq.0) then
  call MPI_SEND(imesg,1,MPI_INTEGER,1,itag,MPI_COMMON_WORLD,ierr) 
elsif(mype.eq.1) then 
  call MPI_IRECV(imesg,1,MPI_INTEGER,0,itag,MPI_COMMON_WORLD,ireq,ierr)
  ...
  call MPI_WAIT(ireq,istatus,ierr)
endif
if(mype.eq.0) then
  call MPI_ISEND(imesg,1,MPI_INTEGER,1,itag,MPI_COMMON_WORLD,ireq,ierr) 
elsif(mype.eq.1) then 
  call MPI_IRECV(imesg,1,MPI_INTEGER,0,itag,MPI_COMMON_WORLD,ireq,ierr) 
endif
...
call MPI_WAIT(ireq,istatus,ierr)

Si deve osservare che la funzione MPI_WAIT può essere usata ovunque dopo la chiamata di una funzione non bloccante ma prima di riutilizzare le variabili oggetto del messaggio.