Vous êtes sur la page 1sur 66

‫بـسـم هللا الرحــمــن الرحـــيــم‬

Module calcul parallèle


Cours DESA ANITS
2005/2006

Abdelhak LAKHOUAJA ‫عبد اــلحقلــخـواـجـــة‬


Bureau m10
E-mail : lakhouaja@sciences.univ-oujda.ac.ma
Introduction
Nous allons donner une introduction au calcul
parallèle et aux machines parallèles.
Pour commencer, nous allons traiter un exemple
réel pour faire une analogie avec le calcul
parallèle.
Organisation d'une bibliothèque.
Supposons que les livres sont organisés en plusieurs
rayons.
Un employé fait le travail dans un certain temps.
Pour gagner du temps, on peut utiliser plusieurs employés.
Meilleur stratégie de travail?
1. La manière la plus simple est de diviser tous les livres
de façon équitable aux employés. Chaque employé doit
parcourir la bibliothèque pour stocker les livres.
2. A chaque employé est affecté le même nombre de
rayons et le même nombre de livres de façon
arbitraire. Chaque employé, soit stocke les livres, soit
les passe a un autre employé.
 L'exemple précédent montre comment une
tâche peut être accomplie rapidement en la
divisant en plusieurs sous-tâches affectées à
plusieurs employés.
 Il n'y a pas une seule façon d'affecter les tâches
aux employés.
 L'affectation des livres aux employés est un
partage de tâches. Passer les livres est un
exemple de communication entre les tâches.
 Pour certains problèmes, affecter le travail à
plusieurs employés peut demandé plus de
temps que s'il est fait par un seul employé.
 Certains problèmes s'exécutent complètement
en série (creuser un trou).
Exemple : Prédiction du
temps
 1000 x 1000 km², sur 10 km de hauteur
 Méthode : EDP, éléments finis
 Élément de 0,1 km de côté => ~ 1010 éléments
 Prédiction à 4 jours / 10 min => ~600 étapes
 Un calcul d’élément nécessite 150 flop.
Exemple : Prédiction du
temps (suite)
 Vitesse d’un processeur : 1 Gflop/s (109 flops/s)
 Nombre total de Flop : 1010 x 150 x 600 = ~ 1015
 1 processeur mettrait au minimum 10 6 s, soit
280 h.
 Avec 100 processeurs, on peut faire le même
calcul en 3h.
 Certains ordinateurs atteignent aujourd’hui le
Tflop/s
Définition
Une machine parallèle (appelée aussi système
multiprocesseur) est un système composé de
plusieurs processeurs.
Les processeurs travaillent d'une manière
indépendante et peuvent communiquer entre
eux pour échanger les données ou partager une
mémoire commune.
Les processeurs fonctionnent, soit en mode
asynchrone (chaque processeur a sa propre unité
de contrôle), soit en mode synchrone (tous les
processeurs sont dirigés par la même unité de
contrôle).
Cette nouvelle conception a entraînée de
nouvelles contraintes qui se rajoutent par
rapport aux architectures séquentielles :
1. combien de processeurs? à quelle puissance?
2. comment relier les processeurs?
3. comment distribuer les charges aux
processeurs?
4. comment diminuer les communications?
5. comment concevoir des algorithmes efficaces?
L'introduction du parallélisme a nécessitée
d'adapter l'informatique à tout les niveaux:
 concepts
 environnements
 modèles
 algorithmique
 langages

Pour quelles applications ?
 Calcul scientifique intensif (High Performance
Computing ou HPC)
– Prédiction météo, climat
– simulation de crash
– chimie/physique moléculaire
– Modèles de pollution, thermique
– ...
Pour quelles applications ? (suite)
 Serveurs à grand nombre de transactions/s
– banques, finance
– internet, web
– ...
 Applications critiques temps-réel
– contrôle aérien
– aéronautique, spatial, ferroviaire
– ...
Classification des architectures
parallèles
La classification la plus connue est celle de Flynn
(1966), qui classifie les architectures parallèles
suivant les flux d'instructions et ceux de
données :

Single Instruction (SI)


Multiple Instruction (MI)
Single Data (SD)
Multiple Data (MD)
Classification des architectures
parallèles

DONNEE

SD MD
SI SISD SIMD
INSTRUCTION
MI MISD MIMD
Architecture SISD
Elle définit la plupart des ordinateurs séquentiels
existants d'aujourd'hui.
Les instructions sont exécutées de façon
séquentielle.

Modèle de Von Neumann (1946)


Architecture SIMD
Ce système est composé de plusieurs processeurs
identiques, qui ne sont en fait que des unités
arithmétiques et logiques programmables et
non de véritables processeurs.
Les instructions sont émises par la même unité de
contrôle (unité de contrôle centralisée).
C'est une architecture multiprocesseurs
synchrone
La difficulté essentielle de telles machines, est la
diffusion synchrone de la même unité de
contrôle d'une instruction à plusieurs milliers
de processeurs qui est un problème technique
complexe.
Ces machines sont utilisées pour résoudre des
problèmes qui ont une structure régulière
Architecture MISD
Plusieurs instructions successives traitent la
même donnée!
Architecture non réalisable!
Architecture MIMD
Les processeurs exécutent des instructions différentes
(Multiple Instruction) sur des données différentes
(Multiple Data).
Chaque processeur possède sa propre unité de contrôle
et sa mémoire locale (de taille petite ou grande).
Les communications entre les processeurs sont
effectuées, soit :
 via une mémoire globale (architecture à
mémoire partagée).
 via l'intermédiaire d'un réseau
d'interconnexion (architecture à mémoire
distribuée) qui relie physiquement les
processeurs entre eux.
Architecture des machines
parallèles à mémoire partagée
L'architecture de base est composée d'une
mémoire globale et de plusieurs processeurs.
Les processeurs communiquent entre eux via la mémoire
globale et par conséquent le temps de communication
entre deux processeurs différents ne dépend pas de la
position du processeur dans le réseau.
Chaque processeur peut avoir une mémoire locale
suffisamment grande pour le traitement local et le
stockage temporaire.
Le point sensible des architectures à mémoire partagée
et la difficulté d'accès à la mémoire (conflits d'accès à
la mémoire) qui limite le nombre processeurs.
Au delà de quelque dizaine de processeurs les
performances commencent à ce dégrader.
Architecture des machines
parallèles à mémoire distribuée
Pour pouvoir connecter un nombre important de
processeurs, entre eux et éviter le problème du
conflit d'accès à la mémoire dans le cas des
mémoires partagées, on a recours à des
architectures à mémoire distribuée.
Chaque processeur à sa propre mémoire, et
communique avec les autres processeurs via un
réseau d'interconnexion qui relie physiquement
les processeurs entre eux.
Le coût de communication entre deux
processeurs différents dépend de la position de
ces deux processeurs dans le réseau.
Plusieurs façons de connecter les processeurs
entre eux ont été étudiées.
Plusieurs machines parallèles à mémoire
distribuée existent et diffèrent suivant la
topologie du réseau d'interconnexion.
Réseaux d'interconnexion
Un réseau d'interconnexion permet de connecter
physiquement les processeurs entre eux.
On distingue deux types de réseaux :
 les réseaux statiques : la topologie est définie
une fois pour toute lors de la construction de la
machine parallèle.
 les réseaux dynamiques : la topologie peut
varier en cours d’exécution d'un programme.
Ce type de réseau est programmable.
Le réseau Complet
La façon la plus idéale de connecter les
processeurs entre eux est celle qui connecte
chaque processeur à tous les autres: réseau
complet.
Le nombre de connexions entre processeurs rend
impossible la réalisation d'une telle
architecture pour un grand nombre de
processeurs.
Pour un réseau composé de p processeurs, le
nombre de liens pour chacun est p‑1, et ceci
n'est pas réalisable pour p grand.
Le réseau linéaire
C'est l'une des architectures les plus simples.
Les processeurs internes ont deux voisins, et ceux
des extrémités ont un seul voisin.

P0 P1 P2 P3 P4

La structure n'est pas symétrique et pose des


problèmes de communication, surtout si le
nombre de processeurs est grand.
L'anneau
C'est aussi une des architectures les plus simples.
Chaque processeur est connecté à ses deux
voisins.

P0 P1 P2 P3 P4
L'anneau
Ce système est efficace, surtout, si les
communications sont faites entre processeurs
voisins, mais ne convient pas dans le cas
contraire.
La grille 2D
C'est aussi une architecture simple pour laquelle,
chaque processeur est relié à quatre autres
processeurs au maximum.
La grille 2D
Un des inconvénients de la grille est le manque de
symétrie; les processeurs de bord nécessitent
des programmes particuliers.
Pour avoir la symétrie, une solution simple
consiste à relier les processeurs de bord entre
eux.
On obtient ainsi un tore 2D.
Tore 2D

Chaque processeur a exactement quatre voisins.


L'hypercube
C'est une topologie qui possède plusieurs propriétés très
intéressantes.
Elle permet l'utilisation de plusieurs processeurs avec un
nombre de connexions petit.
Un hypercube de dimension d (appelé aussi d‑cube), est
composé de 2d processeurs numérotés de 0 à 2d‑1 (en
représentation binaire).
La connexion de deux processeurs est réalisée, seulement
si leurs numéros respectifs (toujours en représentation
binaire) diffèrent d'un seul bit.
Par conséquent chaque processeur a exactement d liens
(d voisins).
L'hypercube

Hypercube de dimension 3
L'hypercube
La construction de l'hypercube est faite par
récurrence :
 0‑cube est un seul processeur
 (d+1)‑cube est obtenu à partir de deux d ‑cube
en reliant les processeurs de même numéro.
000 10 0 001 10 1

010 110 011 111


L'hypercube

Hypercube de dimension 4
Hypercube de dimension 4
L'hypercube
Plusieurs topologies peuvent être immergées dans
l'hypercube : l'anneau, la grille, ...
Construction d'un anneau à 8 processeurs à
partir d'un hypercube de dimension 3 :
Grandeurs des réseaux
d'interconnexion
Le diamètre : c'est la distance maximale (nombre de
liens) entre deux processeurs quelconque
dmini,j = min(d(Pi,Pj))
diamètre = maxi,j (dmini,j)
La connectivité : indique de combien de manières
différentes deux processeurs peuvent être connectés.
Plus la connectivité est grande, plus le réseau est
tolérant aux pannes et autorise la communication à un
grand nombre de processeurs.
Le coût : plusieurs critères peuvent être utilisé pour
mesurer le coût d'un réseau. Une façon de définir le
coût, est le nombre de liens total du réseau.
sommaire des caractéristiques des
réseaux étudiés
Réseau diamètre connectivité coût
complet 1 p-1 p(p-1)/2
linéaire p-1 1 p-1
anneau p/2 2 p
grille 2(p - 1) 2 2(p - p )
tore 2 p/2 4 2p
hypercube log2(p) log2(p) p log2(p)/2
Mesure des performances
Accélération :
Elle évalue le gain apporté par l'utilisation d'une
machine parallèle. Elle est définie par le
rapport :
Sp = T 1 / T P
 T1 : temps d'exécution du meilleur algorithme
séquentiel (implémenté sur un seul processeur)
 Tp : temps d'exécution parallèle du même
algorithme en utilisant p processeurs.
Exemple :
Supposons que :
p=5
T1 = 8 s
T5 = 2 s
alors, on a : Sp = 8/2 = 4

Ceci montre que l'algorithme parallèle est 4 fois


plus rapide que l'algorithme séquentiel avec
utilisation de 5 processeurs.
L'accélération est généralement sous-linéaire
(Spp)

# processeurs
Accélération sur-linéaire
Parfois on a des accélérations sur-linéaires (S p>p).

# processeurs

ceci peut s'expliquer par le fait que l'algorithme


parallèle :
 tire profit des caractéristiques matériels (temps
d'accès à la mémoire).
 peut économiser des instructions.
Exemple
Considérons l'algorithme suivant :
pour i = 1 à 100
a[i] = 0;
ceci nécessite ~ 300 instructions (incrémentation, test et
affectation).
Supposons que nous disposons d'une machine composée de
100 processeurs, alors chaque processeur exécutera
l'algorithme suivant:
i = indice_processeur();
a[i] = 0;
Comme chaque processeur exécute 2 instructions:
S100 = 300/2 = 150 > 100
Efficacité
Elle mesure l'accélération moyenne par
processeur. Elle est définie par :
E p = Sp / p
Ep est comprise entre 0 et 1.
Ep = 1, veut dire que les processeurs consacrent
100% de leurs temps à faire du calcul.
Exemple :
Supposons que :
p=5
T1 = 8 s
T5 = 2 s
alors, on a : Sp = 4 et Ep = 4/5 = 0,8

Les processeurs sont utilisés à 80%


Loi d’Amdahl
Elle établit que l'accélération maximale d'un
algorithme est limité par le nombre
d'opérations, qui ne peuvent être effectuées que
séquentiellement.
Supposons que :
Tseq = ts + tpar = Tseq + (1-)Tseq 0 1
ts est la partie séquentielle de l'algorithme
tpar la partie qui se parallélise parfaitement.
On a donc:
Tp  ts + tpar/p  Sp  (ts + tpar)/(ts + tpar/p)
 Sp  1/( + (1-)/p)
limp 1/( + (1-)/p) = 1/
Ceci veut dire que l'accélération borné
supérieurement par 1/
Loi d’Amdahl
La loi d'Amdahl interdit toute accélération sur-linéaire.
Pour l'algorithme :
pour i = 1 à 100
a[i] = 0;
on peut faire la simulation suivante:
i=1
a[i] =0

i = 100
a[i] =0
Comme il faut 200 instructions, on a : S100 = 200/2 = 100
 Hit-parade des 500 ordinateurs les plus
puissants dans le monde
 Liste mise à jour tous les 6 mois par les
Universités de Mannheim et de Tennessee
 http://www.top500.org
 Liste actuelle : 26ème liste, novembre 2005
Les communications dans les
réseaux statiques
Dans la parallélisation d'algorithmes, les
communications des données entre processeurs sont
des contraintes supplémentaires qui se rajoutent par
rapport à l'algorithme séquentiel.
Par conséquent, risquent de diminuer les performances
des algorithmes parallèles.
Pour cela, il nécessaire:
 soit de les couvrir par les calculs
 soit d'affecter les tâches aux processeurs efficacement
pour diminuer les échanges entre processeurs.
 
56
Les communications
La communication de m données entre deux
processeurs voisins est modélisée par :
+m
  : temps d'initialisation
  : temps de transfert (envoie/réception) d'une
donnée
 1/ : le débit (aussi appelé bande passante), qui
est le nombre de données à envoyer par
secondes, exprimé en Mo/s.
57
Modèles de communication
Modèle unidirectionnel : on ne peut pas
effectuer simultanément l'envoi de Pi vers Pj et
de Pj vers Pi sur le même canal.
Pi Pj

canal de communication (lien physique)

Modèle half-duplex

58
Modèles de communication
Modèle bidirectionnel : envoi et réception
(simultanément) sur le même canal

Pi Pj

Modèle full-duplex

59
Communication entre deux
processeurs quelconques
But : envoyer un message M de taille m d'un
processeur Pi vers Pj, distants de h (h est le
nombre de liens entre Pi et Pj).

Exemple:
Pi Pj

h=4

60
Première solution:
Envoyer le message M (complet) de proche en
proche en passant par les processeurs
intermédiaires (store-and-forward) :
M
Etape 1: Pi Pj
M
Etape 2: Pi Pj
M
Etape 3: Pi Pj
M
Etape 4: Pi Pj
61
au bout de h étapes, le message M arrive à sa
destination.
 le coût pour envoyer M est :
h(mh hm

62
Deuxième solution :
Utilisation du technique du pipeline : le message
est découpé en q paquets, M1, …, Mq de même
taille m/q.
Exemple :
M = M3 M2 M1 q=3.

63
M1
Etape 1: Pi Pj
M2 M1
Etape 2: Pi Pj

M3 M2 M1
Etape 3: Pi Pj
M3 M2 M1
Etape 4: Pi Pj
M3 M2
Etape 5: Pi Pj

M3
Etape 6: Pi Pj

64
 Le premier paquet M1 arrive à Pj au temps :
t1 = h(m/q
 Le deuxième paquet M2 arrive à Pj au temps :

t2 = t1 + (m/q
 Le message M arrive à Pj lorsque le dernier
paquet Mq arrive à Pj
tq = t(q-1) + (m/q
Par récurrence :
tq = t = (h+q-1)(m/qf(q)
65
Question :
Quel est le nombre de paquets qui minimise t?
f(q) = (h+q-1)(m/q
 (h-1)m(h-1)m/qq
f'(q)  (h-1)m/q2
(h-1)m
f'(q) = 0  q0 
f''(q)  0  q0 est un minimum global

66

Vous aimerez peut-être aussi