MPI
int MPI_Bcast(
void* data_p // in/out
int count // in
MPI_Datatype datatype //in
int source_proc //in
MPI_Comm comm
)-
sia input che output:
- per il rank
0sarà un parametro di output, per tutti gli altri di input (rank 0 fornisce un valore, gli altri si trovano i dati indata_p)
- per il rank
-
more readable (it’s obvious that it’s a broadcast)
MPI_Allreduce
Conceptually an MPI_Reduce followed by an MPI_Bcast.
- the argument list is identical to that of
MPI_Reduce, but there is nodest_processsince all the processes will get the results
In molti casi l’algoritmo non
Elapsed parallel time
double MPI_Wtime(void);rturns the # of seconds that have elapsed since ?? in the past
measuring
What time do we consider when we have to calculate how much time a program takes? Each rank might finish at different times.
is every rank going to start at the same time?
not necessarily. se non partono insieme, un processo ci puo’ mettere piu’ tempo per esempio per aspettare (receive) (la send di) un altro processo che e’ partito dopo
Per far si’ che i processi inizino qualcosa allo stesso tempo, si puo’ usare una MPI_Barrier (ma comunque potrebbero uscire dalla barriera in tempi diversi).
(I tempi non sono deterministici) ⟶ noise
Examples:
- se lancio un’applicazione sul mio portatile, ci sono altri processi che stanno essendo eseguiti - in base alle decisioni dello scheduler, i tempi saranno diversi
- le risorse di calcolo sono separate ma la rete di calcolo e’ condivisa, quindi altre applicazioni potrebbero utilizzarla (es. due processi fanno una send x due processi di 2 utenti diversi, che pero’ attraversano lo stesso link fisico della rete)