MPICH
MPICH è una implementazione libera e portabile di MPI, un protocollo di comunicazione utilizzato nelle applicazioni per sistemi a memoria distribuita per il Calcolo parallelo. MPICH è Software libero ed è disponibile per varie versioni di Unix (incluso Linux e macOS) e Microsoft Windows.
La prima implementazione di MPICH si chiama MPICH1 che implementa lo standard MPI-1.1. Attualmente l'ultima implementazione si chiama MPICH2 la quale implementa lo standard MPI-2.0, ma non supporta ancora la traduzione dei dati da differenti tipi di architetture hardware.
Funzionamento
modificaPer poter usare le implementazioni di MPICH-2 è necessario effettuare alcuni passaggi.
Prima di tutto, bisogna creare un file .mpd.conf da piazzare nella home dell'utente e aggiungere una parola segreta.
cd $HOME touch .mpd.conf chmod 600 .mpd.conf echo "MPD_SECRETWORD=mr45-j9z" > .mpd.conf
Dopo questo passaggio, bisogna specificare le macchine che verranno usate in fase di esecuzione. Proprio per questo, le macchine vengono inserite in un apposito file mpd.hosts. All'interno di tale file vengono inseriti gli indirizzi IP oppure gli hostname.
Fatto questo passaggio, non resta che avviare il tutto con:
mpdboot -n <numero nodi> -f mpd.hosts
Esempi
modificaÈ possibile usare MPICH-2 con i linguaggi C, C++ e Fortran. Vediamo di seguito, dei piccoli codici di esempio.
#include <stdio.h>
#include <mpi.h>
int main (int argc, char* argv[])
{
int rank, size;
MPI_Init (&argc, &argv);
MPI_Comm_rank (MPI_COMM_WORLD, &rank);
MPI_Comm_size (MPI_COMM_WORLD, &size);
printf( "Hello world dal processo %d di %d\n", rank, size );
MPI_Finalize();
return 0;
}
Per compilare ed eseguire questo programma su 5 nodi, è necessario lanciare questi 2 comandi:
mpicc -o exe_c mpi_c.c mpiexec -l -n 5 ./exe_c
In output si avrà una cosa del genere:
0: Hello world dal processo 0 di 5 1: Hello world dal processo 1 di 5 3: Hello world dal processo 3 di 5 2: Hello world dal processo 2 di 5 4: Hello world dal processo 4 di 5
program hello
include 'mpif.h'
integer rank, size, ierror, tag, status(MPI_STATUS_SIZE)
call MPI_INIT(ierror)
call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierror)
call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierror)
print*, 'nodo', rank, ': Hello world'
call MPI_FINALIZE(ierror)
end
Per compilare ed eseguire questo programma su 5 nodi, è necessario lanciare questi 2 comandi:
mpif90 -o exe_f mpi_f.f mpiexec -l -n 5 ./exe_f
In output si avrà una cosa del genere:
1: nodo 1 : Hello world 2: nodo 2 : Hello world 3: nodo 3 : Hello world 0: nodo 0 : Hello world 4: nodo 4 : Hello world
Voci correlate
modificaCollegamenti esterni
modifica- (EN) MPICH Home Page, su www-unix.mcs.anl.gov.
- (EN) MPICH-2 Home Page, su mcs.anl.gov.
- (EN) MPI standards documents, su mpi-forum.org. URL consultato il 26 gennaio 2007 (archiviato dall'url originale il 6 novembre 2006).