0% ont trouvé ce document utile (0 vote)
32 vues15 pages

Architectures et Programmes Parallèles

Ce document introduit les concepts d'architecture et de programmation parallèles. Il présente différents modèles de calcul parallèle comme SIMD, SPMD et MIMD ainsi que des classifications mémoire pour le MIMD.

Transféré par

sahnouneleila4
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
32 vues15 pages

Architectures et Programmes Parallèles

Ce document introduit les concepts d'architecture et de programmation parallèles. Il présente différents modèles de calcul parallèle comme SIMD, SPMD et MIMD ainsi que des classifications mémoire pour le MIMD.

Transféré par

sahnouneleila4
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Introduction aux architectures et

programmes parallèles

Daniel Etiemble
de@lri fr
de@[Link]

Accélération
• Accélération (p processeurs) = Performance (p processeurs)
Performance (1 processeur)

• Pour un problème de taille fixe (entrées fixées),


performance = 1/temps

• Accélération à problème fixé


– (p processeurs) = Temps (1 processeur)
Temps (p processeurs)

IFIPS-2
D. Etiemble 2
Calcul parallèle

1
Amdahl et Gustafson
S: Temps séquentiel
P: Temps parallélisable
Application fixe Application extensible
Amdahl Gustafson
SP
Acc(n)  P = a*n
SP S  a.P
n Acc(n) 
SP
Ts = S+P = fs + (1
(1-fs)
fs)
Ts = S+P = fs + n (1-fs)
Tp = S+P/n = fs +(1-fs)/n
Tp = S+P/n = fs +(1-fs)
Acc(n) n  1/ f s fs
E ( n)   1  fs
n
IFIPS-2
D. Etiemble 3
Calcul parallèle

Classification de Flynn

• Flot d’instructions x Flot de données


– Single Instruction Single Data (SISD)
– Single Instruction Multiple Data (SIMD)
– Multiple Instruction Single Data
– Multiple Instruction Multiple Data (MIMD)
• “Tout est MIMD” !

IFIPS-2
D. Etiemble 4
Calcul parallèle

2
SIMD
• Modèle d’exécution Contrôleur
– CM2 Lancement instructions
– Maspar
ML PE ML PE ML PE

Réseau d’interconnexion
• Modèle obsolète pour machines parallèles
– Processeurs spécifiques différents des CPU standards
– Lancement des instructions incompatible avec les fréquences
d’horloge des microprocesseurs modernes
– Synchronisation
S h i ti après è chaque
h instruction
i t ti : lesl instructions
i t ti
conditionnelles sont synchronisées
• SPMD
• Extensions SIMD dans les microprocesseurs
IFIPS-2
D. Etiemble 5
Calcul parallèle

Version SPMD du SIMD


• Modèle d’exécution
ML CPU ML CPU ML CPU

Réseau d’interconnexion

– Chaque CPU exécute le même code.


– Les CPU sont synchronisés par des barrières avant les transferts
de données.
• Clusters de PCs
– PC
– Ethernet

IFIPS-2
D. Etiemble 6
Calcul parallèle

3
Organisation mémoire du MIMD
+
Mémoire centralisée Espace d’adressage unique Accès mémoire uniforme
Mémoire @Max
Mémoire Mémoire

12
Réseau 9 3
@0
6 12
9 3
PE PE PE

Complexité
PE PE PE PE PE
Opposé

Mémoire distribuée Plusieurs espaces d’adressage Accès mémoire non uniforme

Mémoire Mémoire Mémoire


Réseau @Max @Max @Max
Mé i
Mémoire
PE PE PE 12
@0 @0 @0 9 3
6 12
Mémoire

Mémoire
Mémoire

9 3
PE PE
PE PE PE 6

-
IFIPS-2
D. Etiemble 7
Calcul parallèle

Classification mémoire (MIMD)

Mémoire

Mé i partagée
Mémoire é Mé i distribuée
Mémoire di ib é

SMP ccNUMA MMP Hybrid Clusters

P1 Pn
Réseau

Cache C h
Cache PE PE PE
Bus
Mémoire

Mémoire
Mémoire

Mémoire Composants d’E/S

Modèle mémoire SMP


IFIPS-2
D. Etiemble 8
Calcul parallèle

4
Multi-thread et multiprocesseurs

Processeur Processeur Processeur


Processeur
logique 1 logique 2 physique 2
physique 1

Etat archit. Etat archit. Etat archit. Etat archit.


(registres) (registres) (registres) (registres)

Unités fonctionnelles Unités Unités


fonctionnelles fonctionnelles

Caches Caches Caches

Mémoire principale Mémoire principale

IFIPS-2
D. Etiemble 9
Calcul parallèle

Multiprocesseurs et multi-cœurs

CPU State CPU State

Execution Execution
unit Cache Cache
unit

Multiprocesseur

CPU State CPU State

Execution Execution
unit Cache unit Cache

Multi-cœurs
CPU State CPU State

Execution Execution
unit unit
IFIPS-2 Cache
D. Etiemble 10
Calcul parallèle

5
Le problème de cohérence des caches

P1 P2 P3
u=? u=? u=7
Cache 4 C h
Cache 5 Cache 3
u:5 u:5

1 Composants d’E/S
u:5 2

Mémoire

1 P1 lit u Résultat
é l des d lectures
l 4 et 5
2 P3 lit u avec écriture simultanée ?
3 P3 écrit dans u avec la réécriture ?
4 P1 lit u
5 P2 lit u

IFIPS-2
D. Etiemble 11
Calcul parallèle

Cohérence des caches avec un bus


• Construite au dessus de deux
fondements des systèmes
monoprocesseurs
– Les transactions de bus
– Le diagramme de transitions d’états
des caches
• La transaction de bus
monoprocesseur P1 Pn
– Trois phases : arbitrage,
commande/adresse, transfert de
données Cache Cache
– Tous les composants observent les
adresses ; un seul maître du bus Bus

• Les états du cache


monoprocesseur Mémoire Composants d’E/S
– Ecriture simultanée sans allocation
d’écriture
• Deux états : valide et invalide Modèle mémoire SMP
– Réécriture
• Trois états : valide, invalide, modifié
• Extension aux multiprocesseurs
pour implémenter la cohérence

IFIPS-2
D. Etiemble 12
Calcul parallèle

6
La cohérence par espionnage de bus
• Idée de base
– Les transactions bus sont visibles par tous les processeurs.
– Les processeurs peuvent observer le bus et effectuer les actions nécessaires sur
les évènements importants (changer l’état)

• Implémenter un protocole
– Le contrôleur de cache reçoit des entrées de deux côtés :
• Requêtes venant du processeur, requêtes/réponses bus depuis l’espion
– Dans chaque cas, effectue les actions nécessaires
• Mise à jour des états, fourniture des données, génération de nouvelles transactions bus
– Le protocole est un algorithme distribué : machines d’états coopérantes.
• Ensemble d’états, diagramme de transitions, actions
– La granularité de la cohérence est typiquement le bloc de cache

P1 Pn

Cache Cache
Bus

Mémoire Composants d’E/S

Modèle mémoire SMP


IFIPS-2
D. Etiemble 13
Calcul parallèle

Cohérence avec cache à écriture simultanée


P1 Pn
Espionnage de bus

Cache Cache

Transaction
Composants E/S Cache-mémoire
Mémoire

– Propagation des écritures


• la mémoire est à jour (écriture simultanée)
– Bande passante élevée nécessaire

IFIPS-2
D. Etiemble 14
Calcul parallèle

7
Cohérence avec cache à écriture différée
P1 Pn
Ecriture
Espionnage de bus
Invalidation

Cache
Cache

Transaction
Composants E/S Cache-mémoire
Mémoire

• Ligne dans un seul cache


– Ecriture dans la ligne et recopie mémoire lors d’un remplacement
• Ligne dans plusieurs caches
– Ecriture dans la ligne et invalidation des lignes correspondantes dans les
autres caches

IFIPS-2
D. Etiemble 15
Calcul parallèle

Le protocole MESI
PrRd
• 4 états PrWr/—
– Exclusif
M
• Seule copie du bloc
• Non modifié (= Mémoire) BusRdX/Flush
BusRd/Flush
– Modifié
• Modifié (!= Mémoire) PrWr/—
– Partagé PrWr/BusRdX
• Copie dans plusieurs blocs E
• Identique en mémoire BusRd/
– Invalide Flush
BusRdX/Flush
PrRd/—
• Actions PrWr/BusRdX
– Processeurs
S
– Bus 
BusRdX/Flush’
PrRd/
BusRd (S )
PrRd/—

BusRd/Flush’

PrRd/
BusRd(S)

IFIPS-2
D. Etiemble 16
Calcul parallèle

8
Le problème du faux partage
• Un processeur écrit dans une
partie d’une ligne de cache.
• Un autre processeur écrit dans
une autre p
partie d’une ligne
g de
cache
• Même si chaque processeur ne
modifie que sa « partie » de la
ligne de cache, toute écriture
dans un cache provoque une
invalidation de « toute » la
ligne de cache dans les autres
caches.

IFIPS-2
D. Etiemble 17
Calcul parallèle

Modèles de programmation

PARALLÉLISME DE DONNÉES TÂCHES CONCURRENTES


p
Opérations successives sur des Le pprogramme
g est décomposé
p en
PRINCIPLE données multidimensionnelles tâches concurrentes indépendantes

Données distribuées dans les Données dans une mémoire


mémoires locales (distribution, logiquement partagée
DONNEES alignement, partage)
Plusieurs espaces d’adressage Espace d’adressage unique
Un seul programme de type
séquentiel
é i l Distribué (tâches concurrentes)
- Accès aux variables partagées
CONTRÔLE Contrôle centralisé ou
- coopération entre processus
distribué
- instructions (SIMD)
- code (SPMD)

IFIPS-2
D. Etiemble 18
Calcul parallèle

9
Modèles de programmation (2) + -

Parallélisme SPSA :

Coomplexité pour le prograammeur


AUTOMATIQUE

Coomplexité pour le compiilateur


de données Un seul programme Ordonnancement du calcul
Un seul espace d’adressage Accès lointain
(HPF) Synchronisation
Mémoire
MISA :
partagée Plusieurs flots d’instructions
MANUEL
Ordonnancement du calcul
(OpenMP,P Un seul espace d’adressage Synchronisation
threads)

Passage de MIMA : MANUEL


Plusieurs flots d’instructions Ordonnancement du calcul
messages Plusieurs espaces d’adressage Accès lointain
(MPI) Synchronisation
- +

IFIPS-2
D. Etiemble 19
Calcul parallèle

Un exemple: le calcul de 
1 1 
0 1  x 2 dx  arctan(1)  arctan(0) 
4
Calcul de PI/4

1,2


0,8
1/(1+x*x)

0,6

0,4

0,2

0
4
0

1
05

1
15

2
25

3
35

4
45

5
55

6
65

7
75

8
85

9
95
0,

0,

0,

0,

0,

0,

0,

0,

0,
0,

0,

0,

0,

0,

0,

0,

0,

0,

0,

IFIPS-2
D. Etiemble 20
Calcul parallèle

10
Programme PI : version séquentielle

static long etapes = 100000;


double pas;
void main ()
{ int i; double x, pi, sum = 0.0;

pas = 1.0/(double) etapes;

for (i=1;i<= etapes; i++){


x = ((double)i
((double)i-0.5)*pas;
0 5)*pas;
sum = sum + 4.0/(1.0+x*x);
}
pi = pas * sum;
}
IFIPS-2
D. Etiemble 21
Calcul parallèle

Primitives de base en « mémoire partagée »


• Création et destruction de
threads
– CREATE (p, proc, arg) : création
de p threads qui commence à
e éc ter la procédure
exécuter procéd re proc avec
a ec
les arguments arg
– WAIT_for_end (p) : fin
d’exécution de p processus
• Variables privées et partagées
• Accès exclusif à des variables
partagées
for (i=1;i<= etapes; i++){
– LOCK(var) et UNLOCK(var) : x = ((double)i
((double)i-0.5)*pas;
0.5) pas;
accès exclusif à une région sum = sum + 4.0/(1.0+x*x)
critique de code
• Barrières -Répartir les itérations sur différents
– Barrière (nom, p) : threads
synchronisation de p threads -Réduction des sommes partielles dans
une variable globale

IFIPS-2
D. Etiemble 22
Calcul parallèle

11
PI open MP : approche SPMD
#include <omp.h> Programmes
static long etapes = 100000; double pas; SPMD :
#define NB_THREADS 2
void main () Chaque
q thread
{ int i; double x, pi, sum[NB_THREADS]; exécute le même
pas = 1.0/(double) etapes;
omp_set_num_threads(NB_THREADS)
code avec
#pragma omp parallel l’identificateur de
{ double x; int id; thread spécifiant le
id = omp_get_thread_num(); travail spécifique
for (i=id, sum[id]=0.0;i< etapes; i=i+NB_THREADS){
x = ((double)i+0.5)*pas;
du thread.
sum[id] += 4.0/(1.0+x*x);
}
}
for(i=0, pi=0.0;i<NB_THREADS;i++)
pi += sum[i] * pas;
}

IFIPS-2
D. Etiemble 23
Calcul parallèle

Programme PI OpenMP: clause privée et section critique

#include <omp.h>
static long etapes = 100000; double pas;
#define NB_THREADS 2
void main ()
{ int i; double x, sum, pi=0.0;
pas = 1.0/(double) etapes;
omp_set_num_threads(NB_THREADS)
#pragma omp parallel private (x, sum)
{ id = omp_get_thread_num();
for (i=id,sum=0.0;i< etapes;i=i+NB_THREADS){
x = ((double)i+0.5)*pas;
sum +=
+ 4.0/(1.0+x*x);}
4 0/(1 0+ * ) }
#pragma omp critical
pi += sum*pas;
}
}

IFIPS-2
D. Etiemble 24
Calcul parallèle

12
SECTIONS CRITIQUES

#pragma omp parallel private (x, sum)


{
id = omp_get_thread_num();
for (i=id,sum=0.0;i< etapes;i=i+NB_THREADS){
x = ((double)i+0.5)*pas;
sum += 4.0/(1.0+x*x);
}
#pragma omp critical
pi += sum

pii estt partagé


t é ett sum (chaque
( h processeur)) estt privé.
i é
Chaque itération pi+=sum (chaque processeur) doit être atomique.

IFIPS-2
D. Etiemble 25
Calcul parallèle

Programme PI OpenMP : For parallèle + réduction

#include <omp.h>
static long etapes = 100000; double pas;
#define NB_THREADS 2
void main ()
{ int i; double x, pi, sum = 0.0;
pas = 1.0/(double) etapes;
omp_set_num_threads(NB_THREADS)
#pragma omp parallel for reduction(+:sum) private(x)
for (i=1;i<= etapes; i++){
x = ((double)i-0.5)*pas;
sum = sum + 4.0/(1.0+x*x);
}
pi = pas * sum;
}

OpenMP ajoute 2 à 4
lignes de code
IFIPS-2
D. Etiemble 26
Calcul parallèle

13
Approche MPI
for (i=1;i<= etapes; i++){
x = ((double)i-0.5)*pas;
sum = sum + 4.0/(1.0+x*x)
ML CPU ML CPU ML CPU
-Répartir
p les itérations sur différents
ordinateurs
Réseau d’interconnexion
-Réduction des sommes partielles dans
une variable globale
• Initialiser l’environnement
• Identifier le nombre d’ordinateurs
et les identifier
• Calcul dans chaque ordinateur,
avec (ou
( sans)) communication
i ti ded
données intermédiaires
• Opération globale pour obtenir le
résultat

IFIPS-2
D. Etiemble 27
Calcul parallèle

Programme PI : version MPI


#include <mpi.h>
#include <math.h> if (myid==0)
int main(argc, argv) printf();
int argc; char *argv[]; }
{ i done=0,
int d 0 n=100000,
100000 myid,
id numprocs, ii; MPI Finalize();
MPI_Finalize();
double mypi, pi, h, sum, x; Return 0;
MPI_Init (&argc, &argv) }
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
MPI_Bcast(&n, 1,MPI_INT, 0, MPI_COMM_WORLD);

h=1.0/(double) n; sum=0.0;
for (i=myid+1;i<= n; i+=numprocs)
{
x = ((double)i-0.5)*h;
sum+ = 4.0/(1.0+x*x);
}
mypi = pas * sum;
MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE,
MPI_SUM, 0, MPI_COMM_WORLD);
IFIPS-2
D. Etiemble 28
Calcul parallèle

14
Primitives MPI utilisée dans PI
• MPI_Init (&argc, &argv)
– Initialise l’environnement MPI
• MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
– Fournit le nombre de processeurs
• MPI_Comm_rank(MPI_COMM_WORLD, &myid);
– Chaque processus reçoit son rang dans le groupe associé avec un
communicateur. Chaque processus reçoit une valeur myid différente
• MPI_Finalize
– Clôt l’environnement MPI

IFIPS-2
D. Etiemble 29
Calcul parallèle

Primitive MPI globale dans le programme PI


• MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
– La valeur de n est diffusée à chaque processus. Communication collective.
• MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0,
MPI_COMM_WORLD); );

Diffusion Réduction
(Broadcast) (Reduce)

Pi= Mypi(0)+ Mypi(1)+ Mypi(2)+ Mypi(2)

IFIPS-2
D. Etiemble 30
Calcul parallèle

15

Vous aimerez peut-être aussi