CARATTERISTICHE DEI PROGRAMMI MPI

Tutti i programmi MPI incominciano con la chiamata della funzione:

MPI_INIT(ierr)

(se non esplicitamente detto, faccio riferimento alla sintassi delle librerie MPI in Fortran; mentre in C:  MPI_Init(&argc,&argv)), dopo aver incluso le librerie MPI con

include 'mpif.h'

(in C: #include <mpi.h>), e terminano con la chiamata:

MPI_FINALIZE(ierr)

(in C:  MPI_Finalize())

Non è un errore inserire sia in Fortran che in C  istruzioni prima di MPI_INIT(ierr)o dopo MPI_FINALIZE(ierr),  ma lo standard MPI non prevede di stabilire come queste istruzioni debbano essere eseguite, se su tutti i processori o solo su uno, oppure ancora su nessun processore. In pratica se si scrive un programma MPI con tali caratteristiche il risultato non è predicibile ed il programma non è portabile, ne si sconsiglia quindi la pratica.

Tutte le funzioni MPI iniziano con il prefisso MPI_FUNCTION dove FUNCTIONstà per il nome proprio di una funzione della libreria
(In C: MPI_Function, ma le costanti definite in mpi.h sono tutte maiuscole).
 

Versione Fortran Versione C
      program Ciao
c234567
      include 'mpif.h'

      integer nprocs, mype, ierr

      call MPI_INIT(ierr)
      call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierr)
      call MPI_COMM_RANK(MPI_COMM_WORLD, mype, ierr)
      write(6,*) 'Ciao Mondo', mype
      call MPI_FINALIZE(ierr)
      end

#include <stdio.h>
#include <mpi.h>

main(argc,argv)
int argc;
char *argv[];
{
int nprocs, mype;

MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &mype);
printf("%d: Ciao Mondo\n", mype);
MPI_Finalize();
}

Il programma non prevede comunicazione tra i vari processori e quindi nel modello SPMD è banalmente parallelizzato. Nel caso del linguaggio Fortran, che non distingue tra caratteri maiuscoli o minuscoli, di norma scriverò il codice con i caratteri minuscoli tranne che per le funzioni MPI, in modo che queste siano ben visibili nel testo.