HPC - MPI Datatype

Moreno Marzolla moreno.marzolla@unibo.it

Ultimo aggiornamento: 2021-05-14

Quando si deve decomporre un dominio rettangolare di dimensione \(R \times C\) tra un insieme di processi MPI si è soliti adottare una decomposizione a blocchi per righe (Block, *): il primo processo elabora le prime \(R/P\) righe; il secondo le successive \(R/P\) righe, e così via. Infatti, nel linguaggio C le matrici sono memorizzate per righe, e una decomposizione di tipo (Block, *) consente di avere le partizioni adiacenti in memoria semplificando l'invio dei dati tramite le funzioni MPI apposite. In questo esercizio consideriamo una decomposizione sulle colonne allo scopo di prendere familiarità con gli MPI_Datatype.

Scopo dell'esercizio è la realizzazione di un programma MPI in cui i processi 0 e 1 mantengono ciascuno una matrice di interi di dimensioni \(\textit{SIZE} \times \textit{SIZE}\); le matrici includono una colonna a sinistra e a destra di ghost cells (dette anche halo), quindi la loro dimensione effettiva è \(\textit{SIZE} \times (\textit{SIZE} + 2)\). Nello scheletro di programma [mpi-send-col.c])mpi-send-col.c) si pone SIZE=4, ma il programma deve funzionare con qualunque valore.

I processi inizializzano le proprie matrici come segue (supponendo SIZE = 4)

Il processo 0 deve inviare l'ultima colonna della propria matrice al processo 1, che la inserisce nella ghost area di sinistra; analogamente, il processo 1 deve inviare la prima colonna della propria matrice al processo 0, che la inserisce nella ghost area di destra.

Per completare lo scambio delle colonne sul bordo il processo 0 invia ora la prima colonna della propria matrice al processo 1, che la inserisce nella ghost area di destra; il processo 1 invia l'ultima colonna (quella di destra) della propria matrice al processo 0, che la inserisce nella ghost area di destra.

Compilare con:

    mpicc -std=c99 -Wall -Wpedantic mpi-send-col.c -o mpi-send-col.c

Eseguire con:

    mpirun -n 2 ./mpi-send-col.c

File