Funzioni bloccanti e non bloccanti

Back to    Contents

Previous :  Head to Head      Next : Benchmark per comunicazioni collettive      Up to : Benchmark punto-punto


Nei nostri test tutte le funzioni Send sono non bloccanti, mentre le funzioni di ricezione possono essere sia bloccanti che non. Ad esempio una coppia ricezione-spedizione con primitive non bloccanti sara' cosi' :

     MPI_Irecv(rbuffer,len,MPI_BYTE,recv_from,MSG_TAG(i),MPI_COMM_WORLD,&msg_id);
  MPI_Send(sbuffer,len,MPI_BYTE,to,MSG_TAG(i),MPI_COMM_WORLD);
  MPI_Wait(&(msg_id),&status);

cioe' il processo avvia la ricezione del messaggio, ma non si blocca, quindi spedisce il suo messaggio ed infine con la MPI_Wait attende che la ricezione sia completata.

Nel  caso bloccante la ricezione- spedizione e' la seguente :

     MPI_Send(sbuffer,len,MPI_BYTE,to,MSG_TAG(i),MPI_COMM_WORLD);
  MPI_Recv(rbuffer,len,MPI_BYTE,recv_from,MSG_TAG(i),MPI_COMM_WORLD,&status);


cioe' il processo prima spedisce e poi attende il messaggio dall'altro processo con la MPI_Recv bloccante.

Le primitive non bloccanti sono utili quando e' possibile sovrapporre computazione alle operazioni di ricezione e spedizione. Pero' in questi test si vuole solamente misurare le prestazioni di comunicazione, non e' necessario fare altre computazioni, quindi i risultati dovrebbero essere gli stessi sia con le bloccanti che non le non bloccanti. In ogni caso abbiamo eseguito entrambi i tipi per verificare la  eventuale presenza di particolari ottimizzazioni a livello kernel per  le non bloccanti.

Come vedremo (I Risultati , Conclusioni)  non abbiamo rilevato alcuna differenza tra bloccanti e non.
 

Previous : Head to Head       Next :  Benchmark per comunicazioni collettive       Up to :  Benchmark Punto-Punto

Back to Contents