MPICH

implementazione libera e portabile del protocollo MPI

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

modifica

Per 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

È possibile usare MPICH-2 con i linguaggi C, C++ e Fortran. Vediamo di seguito, dei piccoli codici di esempio.

Linguaggio C

modifica
#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

modifica

Collegamenti esterni

modifica
  Portale Informatica: accedi alle voci di Wikipedia che trattano di Informatica