HPC - Prodotto scalare MPI

Moreno Marzolla moreno.marzolla@unibo.it

Ultimo aggiornamento 2021-05-16

Il file mpi-dot.c calcola il prodotto scalare tra due array a[] e b[] di uguale lunghezza \(n\). Ricordo che il prodotto scalare s di due array a[] e b[] è:

\[ s = \sum_{i=0}^{n-1} a[i] \times b[i] \]

Il programma implementa una soluzione seriale in quanto solo il master esegue la computazione. Scopo di questo esercizio è di parallelizzare il calcolo del prodotto scalare, distribuendo gli array a[] e b[] tra i processi usando la funzione MPI_Scatter. Ciascun processo calcola il prodotto scalare della porzione di array ricevuti; il master usa la funzione MPI_Reduce per sommare i prodotti scalari parziali, determinando il valore di \(s\).

Assumere inizialmente che \(n\) sia un multiplo esatto del numero di processi MPI. Realizzare successivamente una versione del programma che funzioni correttamente con lunghezze \(n\) arbitrarie. La soluzione più semplice consiste nel far gestire al processo master i dati in eccesso. Una soluzione alternativa è di usare MPI_Scatterv per distribuire l'input ai vari processi.

Per compilare:

    mpicc -std=c99 -Wall -Wpedantic mpi-dot.c -o mpi-dot -lm

Per eseguire:

    mpirun -n P ./mpi-dot [n]

Esempio:

    mpirun -n 4 ./mpi-dot 1000

File