Personal tools
You are here: Home Calcul Technique Documentation IBM cluster p575 (Power5) Equation de Poisson 3D
Document Actions

Equation de Poisson 3D

Parallélisation de l'équation de Poisson 3D par MPI et OpenMP


Equation modèle : problème de Poisson

L'équation de Poisson en trois dimensions d'espace est notre premier problème.
Le problème mathématique s'écrit :

avec

On construit le second membre f pour que u_ex(x,y,z) = x.y.z.(x-1).(y-1).(z-1) soit solution de cette équation.

La parallélisation est faite par décomposition de domaine avec MPI et aussi par partage du travail avec OpenMP.

La discrétisation spatiale est faite par un schéma aux différences finies d'ordre deux à trois points.
Le système discrétisé est :

La matrice du système linéaire, A, est l'opposée du laplacien discrétisé. Elle est alors symétrique et définie positive.
Les pas d'espace sont hx = 1/(ntx + 1), hy = 1 / (nty + 1) et hz = 1 / (ntz + 1).
Les deux méthodes itératives, Jacobi et Gradient Conjugué, sont employées pour chaque type de parallélisation.


flechehaut

Cas test

Le test est fait pour ntx = nty = ntz = 256.
Le critère d'arrêt pour Jacobi est :  écart inférieur à 1E-10 ou 1000 itérations effectuées.
Le critère d'arrêt pour le Gradient Conjugué est : résidu inférieur à 1E-10 ou 1000 itérations effectuées.
Les codes parallèles (MPI et OpenMP) sont lancés sur 2 et 4 processus / threads.


flechehaut

Résultats code séquentiel

Les mesures du temps sont réalisées à l'intérieur du code.
Les tests ont été refaits sur les noeuds p575 (power5 à 1.9GHz) et certaines valeurs mises à jour.
Le résidu final correspond à la différence entre deux itérés successifs pour la méthode de Jacobi ou au vecteur résidu pour la méthode du Gradient Conjugué. L'erreur maximale correspond à l'erreur entre la solution calculée et la solution analytique connue.
 
Code séquentiel 
1 processus  Jacobi  Gradient Conjugué 
Nombre d'itérations  1000 1000
Résidu final  0.9085E-06
0.9085E-09
0.9634E-09
0.9146E-09
Erreur maximale  0.1470E-01
0.1470E-01
0.8321E-13
0.8352E-13
Temps écoulé (sec.)  241.9
114.0
503.3
263.7
MFlops  832.1
1766.2
500.1
954.5


flechehaut

Résultats sur 2 processus

Les mesures du temps sont réalisées à l'intérieur du code.
Les tests ont été refaits sur les noeuds p575 (power5 à 1.9GHz) et certaines valeurs mises à jour.
Les performances sont évaluées en comptant le nombre d'opérations flottantes pour chaque processus.
L'accélération et l'efficacité se calculent à partir des temps du code séquentiel et du code parallèle considéré.
 
Comparaison MPI/OpenMP Jacobi  Gradient Conjugué 
2 processus  OMP  MPI  OMP  MPI 
Nombre d'itérations  1000 1000 1000 1000
Résidu final  0.9085E-06
0.9085E-09
0.9085E-06
0.9085E-09
0.8893E-09
0.8893E-09
0.8931E-09
0.8902E-09
Erreur maximale  0.1470E-01
0.1470E-01
0.1470E-01
0.1470E-01
0.8427E-13
0.8416E-13
0.8399E-13
0.8413E-13
Temps écoulé (sec.)  137.2
66.3
61.2
40.2
251.7
229.8
196.4
153.8
MFlops/processus  733.6
1517.6
937.1
1645.9
403.9
547.4
499.8
818.1
MFlops code  1467.1
3035
1874.1
3291.8
 807.9
1094.9
999.6
1636.1
Accélération  1.76
1.72
2.26
1.86
2.00
1.15
2.56
1.71
Efficacité  0.88
0.86
1.13
0.93
1.00
0.57
1.28
0.86


flechehaut

Résultats sur 4 processus

Les mesures du temps sont réalisées à l'intérieur du code.
Les tests ont été refaits sur les noeuds p575 (power5 à 1.9GHz) et certaines valeurs mises à jour.
Les performances sont évaluées en comptant le nombre d'opérations flottantes pour chaque processus.
L'accélération et l'efficacité se calculent à partir des temps du code séquentiel et du code parallèle considéré.
 
Comparaison MPI/OpenMP Jacobi  Gradient Conjugué 
4 processus  OMP  MPI  OMP  MPI 
Nombre d'itérations  1000 1000 1000 1000
Résidu final  0.9085E-06
0.9085E-06
0.9085E-06
0.9085E-06
0.8858E-09
0.8881E-09
0.8878E-09
0.8914E-09
Erreur maximale  0.1470E-01
0.1470E-01
0.1470E-01
0.1470E-01
0.8438E-13
0.8438E-13
0.8440E-13
0.8447E-13
Temps écoulé (sec.)  83.2
42.7
52.1
37.0
195.3
99.5
137.1
97.1
MFlops/processus  674.8
1178.5
965.3
1360.7
322.1
632.4
458.9
648.1
MFlops code  2419.6
4713.8
3861.3
5442.9
1288.4
2529.7
1835.7
2592.5
Accélération  2.91
2.67
4.64
3.08
2.58
2.65
3.67
2.72
Efficacité  0.73
0.67
1.16
0.77
0.64
0.66
0.92
0.68


flechehaut

Load-balancing pour la méthode de Jacobi

Tableau des performances détaillées pour OpenMP pour Jacobi :
 
OpenMP  2 threads
cumul
4 threads
cumul
Rappel
Séquentiel 
Temps
calcul 205.0 218.5 161.3
converge  61.7  82.1  79.7

Tableau des performances détaillées pour MPI pour Jacobi :
 

MPI  2 processus  4 processus  Rappel Séquentiel 
Temps  proc 0 proc 1 Cumul proc 0 proc 1 proc 2 proc 3 Cumul
calcul  62.9 62.9 125.8 28.0 28.1 28.0 28.1 112.2 161.3
converge  40.7 40.6  81.3 21.1 21.1 621.2 21.6  85.0  79.7


flechehaut

Load-balancing pour le Gradient Conjugué

Tableau des performances détaillées pour OpenMP pour le Gradient Conjugué :
 
OpenMP  2 threads
cumul
4 threads
cumul
Rappel
Séquentiel 
Temps
saxpy 333.0 423.4 269.6
pmv 150.8 167.0 128.6
prodscal 125.4 145.1 104.1

Tableau des performances détaillées pour MPI pour le Gradient Conjugué :
 

MPI  2 processus  4 processus  Rappel Séquentiel
Temps  proc 0  proc 1 Cumul proc 0 proc 1 proc 2 proc 3 Cumul
saxpy 128.4 128.7 257.1 67.3 67.1 71.4 65.5 271.3 269.6
pmv 62.4 62.4 124.7 27.6 27.4 28.4 27.4 110.9 128.6
prodscal 54.8 54.8 109.6 32.5 32.3 33.4 32.9 131.1 104.1


flechehaut

Conclusions

- le Gradient Conjugué est nettement plus rapide que la méthode de Jacobi en nombre d'itérations pour atteindre un degré de convergence mais il faut se rappeler que le coût par itération n'est pas le même. Ici la convergence n'est pas atteinte pour la méthode de Jacobi, c'est le nombre d'itérations maximal qui arrête les deux algorithmes ;
- les versions parallèles permettent d'obtenir des temps de retour plus courts que la version séquentielle du code avec des résultats qualitativement équivalents;
- le load-balancing est bon entre les différents processus même si le temps cumulé est parfois supérieur au temps de la même routine en séquentiel;
- La version MPI est en général meilleure car les données de chaque processus sont dans la mémoire locale, contrairement à la version OpenMP qui repose sur le partage. Une version OpenMP basée sur les données locales est en cours de préparation afin de les comparer plus précisément.
- les mesures effectuées dépendent de l'état du système, de la charge de la machine et sont intéressantes pour les routines représentant une part significative du temps consommé.


flechehaut

Fichiers

On peut récupérer l'arborescence sous forme d'archive tar.gz .
Les deux répertoires Jacobi et Gradient contiennent chacun les trois sous-répertoires MPI, OMP et SEQ (resp. version MPI, version OpenMP et version séquentielle).
Chacun de ses trois répertoires contient les répertoires suivants : src, bin et run (resp. code source, les binaires et les fichiers de résultats).
Dans le répertoire run se trouvent des sous-répertoires de la forme xp (x = 1, 2, 4) correspondant au nombre de processus. Ils contiennent les fichiers d'échantillonnage et les analyses qui en résultent. Ces fichiers ont servi à la réalisation des tableaux précédents.


flechehaut

Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: