Programmation parall le
Objectifs
Afin de nous rendre compte de la programmation des machines parall les
(implicitement du style de programmation pour une Grid) nous allons programmer
en langage C ou C++ en utilisant deux API :
" MPI (Massage Passing Interface)
" OpenMP (Open Multiprocessing)
Ces deux API sont tr s diff rentes, voire compl mentaire et peuvent s'utiliser
ensemble pour la r alisation d'une application (programmation hybride). Dans cette
partie on tentera de r aliser des programmes soit avec l'une, soit avec l'autre des API,
jamais
deux.
les
MPI illustre le paradigme de la m moire distribu e (chaque unit de traitement
dispose uniquement de sa propre m moire) et OpenMP illustre le paradigme de la
partag e.
m moire
Installation
Il faut que vous ayez install le compilateur gcc sur votre machine. Pour OpenMP il
n'y a rien faire, le compilateur gcc impl mente d j cette API. Pour MPI on
site OpenMPI.
conseille
d'installer
fortement
depuis
l'API
le
Publicité
OpenMP
Une application en OpenMP est une application mono-processus avec un thread
principal et, ventuellement, d'autres threads lanc s en parall le. Les variables du
programmes (dans la fonction main ou toute autre fonction) deviennent des variables
(private).
communes
(shared)
priv
ou
compilation
La
gcc
L'ex cutable
executable ou ./executable
Quelques exemples de programmes :
s'ex cute
comme
se
r alise
avec
:
-fopenmp prog.c ....
:
sous Unix/Linux
tout
ex cutable
" programme qui lance un nombre de thread et chacun affiche son num ro
Publicité
: omp_hello.c avec diverses versions pour voir clairement l'usage des
variables partag es ou priv es et
l'importance d'une barri re de
synchronisation
: omp_hello_V2.c, omp_hello_V3.c, omp_hello_V4.c, omp_hello_V5.c.
" programme pour lequel on lance des threads qui communiquent en anneau (sur
la base de leur num ro forment un anneau virtuel) : anneau.c
calcule
" programme
date
qui
de
la
P ques (facile
!) : date_Paques.c (illustration en programme d'un exercice en TD).
" programme qui fait la somme d'un tableau de valeurs g n r es al atoirement
: somme_omp.c version avec la partition des donn es en blocks de taille gale
(+1), somme_omp_V2.c version avec un thread en plus et le dernier block de
taille 'reste'
" programme qui impl mente le tri exhaustif tri_omp.c
" programme pour le calcul de pr fixe prefixe_parallel.c et une version qui n'est
pas correcte prefixe_blague.c
MPI
Une application crite en C et MPI se composera des plusieurs processus, les
processus seront obtenus partir du m me code C (SPMD - Single Program Multiple
Data) ou partir des codes diff rents (MPMD). Toutefois, on conseille de ne pas
utiliser plus de 3 codes (programmes) diff rents pour une m me application.
Publicité
:
se
compilation
La
mpicc prog.c -o executable
programme
Chaque
s par ment.
commande
compile
avec
fait
se
la
se
fait
application MPI
:
L'ex cution d'une
-np nb_processus executable
mpirun
Si l'application se compose des processus issus des programmes diff rents, on
compile avec la commande mpicc chaque programme, chaque programme a sa propre
fonction main(), on construit autant d'ex cutables que de programmes et on indique
dans la commande mpirun le nombre de processus ayant le m me ex cutable :
-np n2 executable2 ...
mpirun
Publicité
Quelques exemples de programmes :
-np n1 executable1 :
commande
avec
la
" programme qui d tecte son num ro de process et l'affiche ( quivalent du
"Hello, world!") : mpi_code.c
" programme pour lequel les processus, sur la base de leur num ro, forment un
anneau virtuel : mpi_anneau.c
" programme distribu qui calcule
le
triangle de Pascal (difficile
!) : mpi_pascal.c
Regardez attentivement le fonctionnement de ces programmes qui d butent tous pas
la d tection de num ro d'ordre du processus dans le cadre de son groupe (appel
communicateur).
Probl mes r solus compl tement
"
"
le calcul de la date de P ques : solution s quentielle, en m moire partag e et
en m moire distribue avec MPI (l'ex cutable attend en entr e l'ann e de
r f rence)
le produit entre une matrice et un vecteur : solution s quentielle, parall lisme
de threads au niveau du calcul, avec un nombre de threads pr d finie, en MPI
(l'ex cutable attend en entr e les noms de fichiers d'entr e et de sortie)