HPC - Broadcast usando comunicazioni punto-punto

Moreno Marzolla moreno.marzolla@unibo.it

Ultimo aggiornamento: 2021-10-27

Lo scopo di questo esercizio è di implementare la funzione

    void my_Bcast(int *v)

che effettua una comunicazione di tipo broadcast. La funzione deve inviare a tutti i processi diversi dal master (processo 0) il valore *v presente nella memoria del master.

Nota. MPI mette a disposizione la funzione MPI_Bcast() per realizzare una comunicazione di tipo broadcast, che va sempre preferita a soluzioni "fatte in casa" come quella descritta nel seguito. Lo scopo di questo esercizio è di vedere una possibile implementazione dell'operazione broadcast in MPI, sebbene non ci sia alcuna garanzia che la funzione MPI_Bcast() sia realizzata effettivamente come descritto.

Per realizzare la funzione my_Bcast(), ogni processo determina il proprio rango \(p\) e il numero \(P\) di processi MPI attivi. Il processo 0:

Ogni altro processo \(p > 0\):

Ad esempio, nel caso siano presenti \(P=15\) processi MPI, si otterrebbe lo schema di comunicazione illustrato nella Figura 1; le frecce indicano comunicazioni punto-punto, i numeri indicano il rango dei processi coinvolti. Si noti che il procedimento descritto sopra funziona correttamente qualunque sia il numero \(P\) di processi.

Figura 1: Schema di comunicazione broadcast con P=15 processi
Figura 1: Schema di comunicazione broadcast con \(P=15\) processi

Il file mpi-my-bcast.c contiene lo scheletro della funzione my_Bcast(). Si chiede di completarne il corpo usando MPI_Send() e MPI_Recv().

Compilare con:

    mpicc -std=c99 -Wall -Wpedantic mpi-my-bcast.c -o mpi-my-bcast

Eseguire con:

    mpirun -n 4 ./mpi-my-bcast

File