HPC - Sum-reduction di un array

Moreno Marzolla moreno.marzolla@unibo.it

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)

Figura 1: Calcolo della somma dei valori di un array usando MPI
Figura 1: Calcolo della somma dei valori di un array usando MPI
  1. Il processo master (quello con rango 0) crea e inizializza l'array master_array[].

  2. Il master distribuisce l'array master_array[] tra i \(P\) processi MPI (incluso se stesso) usando MPI_Scatter().

  3. Ciascun processo calcola la somma parziale della propria porzione di array.

  4. 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

File