Broadcast Round

Back to    Contents

Previous :  Benchmark collettivi      Next : Sincronizzazione   


Questo metodo misura il tempo necessario per completare  un certo numero (reps) di round di Broadcast. Un round di Broadcast consiste nel eseguire una MPI_Broadcast per ogni possibile mittente, cioe' per ogni processo coinvolto nel test.

Il nucleo del test e' il seguente :

     t0=MPI_Wtime();
  for (i=0; i<reps; i++) {
    MPI_Bcast(lval, len, MPI_BYTE, root, MPI_COMM_WORLD );
    root++;
    if (root >= comm_size) root = 0;
    }
  t1=MPI_Wtime();
  MPI_Barrier(MPI_COMM_WORLD );
  time = t1-t0;


reps e' per default 50 e puo' essere cambiato dall'utente.

MPICH implementa la MPI_Broadcast attraverso un algoritmo ad albero binomiale.
Se supponiamo che il mittente sia lo 0, il messaggio verra' spedito per primo al processo che ha pid (size_del_comunicatore-1)/2, che avra' il compito di far arrivare il messaggio ai processi nella seconda meta' del Comunicatore, mentre al mittente resterą la prima meta'. A questo punto si ripete il procedimento : il processo 0 divide la sua meta' alta  in due parti e spedisce il messaggio a quello di mezzo, lo stesso fa' il processo (size-1)/2 con la propria meta' bassa e cosi' via. In questo modo il tempo richiesto per completare le operazioni e' proporzionale al logaritmo in base 2 del numero di processi.



E' interessante notare che, anche conoscendo l'algoritmo, non e' facile dire a priori quale sara' l'ultimo processo a ricevere il messaggio e a chiudere la Broadcast, in quanto i ritardi coinvolti sono da considerarsi delle variabili aleatorie.  Questo puo' portare ad un certo parallelismo di trasmissione nella esecuzione del test BroadcastRound, quando il prossimo processo a dover eseguire la Boradcast come root potrebbe essere il primo ad aver terminato la precedente, e che quindi  andrebbe a sovrapporre la sua  Broadcast a quella non ancora terminata.
Come vedremo ( I Risultati, Conclusioni) questo sara' particolarmente penalizzante per MPICH-G2 con particolari dimensioni di messaggio. Vedremo anche come una diversa implementazione di questo test  (variante di Broadcast) risolva il problema e dai risultati piu' accurati.


Previous : Benchmark collettivi      Next :  Sincronizzazione      

Back to Contents