MPICH

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

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 | modifica wikitesto]

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

Esempi[modifica | modifica wikitesto]

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

Linguaggio C[modifica | modifica wikitesto]

#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

Linguaggio Fortran[modifica | modifica wikitesto]

        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 | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

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