Ultimo aggiornamento: 2021-10-25
Il file mpi-sum.c contiene una implementazione essenzialmente seriale di un programma MPI che calcola la somma degli elementi di un array di lunghezza \(N\); il programma quindi realizza una operzione sum-reduction. Nella versione fornita, il processo 0 esegue tutte le computazioni; modificare il programma in modo da parallelizzare la somma, seguendo le seguenti indicazioni (si faccia riferimento alla Figura 1)
Il processo master (quello con rango 0) crea e inizializza l'array master_array[]
.
Il master distribuisce l'array master_array[]
tra i \(P\) processi MPI (incluso se stesso) usando MPI_Scatter()
.
Ciascun processo calcola la somma parziale della propria porzione di array.
Ciascun processo (diverso dal master) invia la propria somma locale al master, usando MPI_Send()
; il master ricevele somme locali usando MPI_Recv()
e le accumula.
Vedremo nelle prossime lezioni come il passo 4) possa (debba!) essere effettuato in modo più efficiente sfruttando le operazioni collettive.
Compilare con:
mpicc -std=c99 -Wall -Wpedantic mpi-sum.c -o mpi-sum
Eseguire con:
mpirun -n P ./mpi-sun N
Esempio:
mpirun -n 4 ./mpi-sum 10000