Sources du parallélisme

Programming, Data Parallelism, Control Parallelism · course

Voir tous les documents en programmation

Sources du parallélisme

Dr. Khedija AROUR INSAT

GL4

1

Plan

 Motivation

 Parallélisme de contrôle

 Parallélisme de données

 Parallélisme de flux

2

Sources du parallélisme

 Source du parallélisme

– Parallélisme  de Contrôle

–

de Données de Flux

3

Parallélisme de contrôle

4

Parallélisme du contrôle

– L’exploitation du parallélisme de Contrôle vient de la

constatation naturelle qu'une application est composée d’actions que l'on peut faire en même temps. Les actions, appelées aussi Tâches, Processus, Instructions etc., peuvent être exécutées de manière plus ou moins indépendante sur des ressources de calcul appelées aussi Processeurs Élémentaires (ou PEs).

– Dans le cas où toutes les actions sont indépendantes,

il suffit alors d’associer une ressource de calcul à chacune d’entre-elles pour obtenir un gain en temps d’exécution qui est linéaire

5

Mise en route

 Algorithme séquentiel : A

 Parallélisation de A

– Décomposition en tâches – Analyse de dépendances – Ordonnancement de tâches

6

Tâche

 Une tâche est une unité de traitement

caractérisée par

– le temps d’exécution (durée) = temps de calcul+

temps de communication + autre

7

Tâche : granularité  Plusieurs décompositions sont possibles pour le

même algorithme

 granularité = taille des tâches

 Le choix de la meilleure décomposition est un

problème difficile – le nombre de processeurs – le rapport communication VS calcul – les accès mémoires

8

Grain de parallélisme

 Comment diviser un traitement en sous-tâches ?  Quelle taille doivent avoir ces sous-tâches. La

taille des tâches élémentaires sur lesquelles vont porter la parallélisation ?

 La taille des tâches élémentaires sur lesquelles

vont porter la parallélisation détermine le grain de parallélisme. En général on distingue entre grain fin (fine grain) et grain grossier (coarsed grain).

9

Exemple

 Calcul du produit matriciel C=AxB  Cas1: une tâche= une opération élémentaire

(produit scalaire/additaion scalaire) : c(i,j)=c(i,j)+A (i,k)xB(k,j) Grain fin

 Cas2: une tâche calcule un élément de C Grain

moyen

 Cas3 : Une tâche calcule une ligne de C Grain

grossier

10

Degré de parallélisme

 Le grain de parallélisme a généralement une

grande influence sur un autre paramètre caractérisant les programmes parallèles: le degré de parallélisme.

 Le degré et profil du parallélisme

– Le degré de parallélisme est la mesure du nombre de sous-tâches exécutées simultanément dans un programme parallèle.

11

Profil de parallélisme

 profil du parallélisme

– L’évolution du degré de parallélisme au cours de l’exécution est appelé le profil du parallélisme. Le degré maximal est une borne supérieure sur le nombre de processeurs qu’il faut allouer au programme.

–

12

Exemple illustratif

 Exemple 1 :

– Soit a et b deux vecteurs donnés d'indices 1..n, on calcule le vecteur c d'indices 0..n et le vecteur d d'indices 1..n de la façon suivante:  d(i) = a(i) - b(i)  SI i=0 ALORS c(i) = 0  SINON c(i) = c(i-1) + a(i) + b(i)

13

Exemple illustratif...

BEGIN c(0):=0; FOR i IN 1..n LOOP d(i) := a(i) - b(i); c(i) := c(i-1) + a(i) + b(i); END FOR; END exemple

BEGIN c(0):=0; FOR i IN 1..n LOOP PARBEGIN

d(i) := a(i) - b(i); t(i) := a(i) + b(i);

END PAR; c(i) := c(i-1) + t(i); END FOR; END exemple

14

Parallélisme de Contrôle :Exemple illustratif…

 Le niveau de parallélisation est l’instruction, on

peut donc parler de grain fin,

 Le degré maximal de parallélisme  Le profil du parallélisme est donné

d1 t1

c1

c0

d2 t2

15

Dépendances

 Deux tâches du même algorithme sont soit liées

par une relation de précédence soit indépendantes

 Deux tâches Ti et Tk sont consécutives s’il

n’existe aucune autre tâche Tj / Ti < Tj < Tk ou Tk < Tj < Ti

16

Dépendances...

 décomposition en n tâches  A= {T1,T2,...,Tn,<}  < : Relation de dépendance d’ordre partiel Ti < Tj  Un système de tâches A= {T1,T2,...,Tn,<} est un systèmes de précédence si pour tout couple (Ti, Tk), une et une seule des 3 conditions est vérifiée – Ti < Tk – Tk< Ti – Ti et Tk sont indépendantes

–

17

Analyse de dépendances

 décomposition en n tâches  A= {T1,T2,...,Tn,<}  < : Relation de dépendance d’ordre partiel Ti <

Tj

 Ti=

– un ensemble d’entrées : Ri – un ensemble de sorties : Mi – durée d’exécution : di

18

Graphe de précédence

 Le graphe de précédence G associé au

système de précédence A est :

– L’ensemble de sommets de G sont les tâches de A

– Ti et Tj sont reliées par un arc Ssi Ti et Tj sont

consécutives et ordonnées (par la relation d’ordre)

19

Exemple

 Soit un algorithme composé de 8 tâches

T1,...,T8 – T1 < T3, T1< T4, T1 < T5, T1 < T6, T1 < T7, T1 < T8 – T2 < T3, T2 < T4, T2 < T5, T2 < T6, T2 < T7 T2 <

T8

– T3 < T7, T3 < T8 – T4 < T6, T4 < T7, T4 < T8 – T5 < T7 – T6 < T8  Graphe

20

Exemple...

 Rechercher les tâches indépendantes  Déduire le système de précédence  Rechercher les tâches consécutives  Graphe de tâches  Niveau 1 : T1, T2  Niveau 2 : T3, T4, T5  Niveau 3: T6, T7 (AU PLUS TÔT)  Niveau 4 : T8, T7 (AU PLUS TARD)

21

Exemple...

T1

T2

T3

T4

T6

T5

T7

T8

T7

22

Dépendances

 Dépendance de contrôle de séquence : correspond au

Publicité

séquencement dans un algorithme classique

 Dépendance de contrôle de communication : lorsqu'une

action envoie des informations à une autre action

B(i) = 1.0 (S2)

 IF (A(i) = 0) (S1)  THEN   ELSE   ENDIF

B(i) = A(i) (S3)

23

Dépendances...

– Les deux cas de dépendance imposent des

restrictions sévères sur l’association des ressources de calcul aux actions

– L’exploitation du parallélisme de Contrôle consiste à

gérer les dépendances entre les actions d'une application pour obtenir une allocation des ressources de calcul aussi optimale que possible 

24

Dépendances...

 Mi ∩ Rj: producteur-consommateur :

dépendance vraie (RAW) : a=... ; ... =a

 Ri ∩ Mj : anti-dépendance (WAR) : ...=a ; a =...

 Mi ∩ Mj : dépendance de sortie (WAW) : a=...; a=...

25

Construction du graphe de dépendances

 Condition de BERSTEIN  Pour chaque tâche Ti,

– générer l’ensemble Ri des valeurs lues – générer l’ensemble Mi des valeurs modifiées

 Il y a une dépendance de Ti vers Tj si

– Ti est exécutée avant Tj – si l’un des trois ensembles

Mj est non vide

, Ri ∩ Mj ou Mi ∩

26

Mi ∩ RjRemarques sur le graphe de précédence  Le temps d’un chemin du graphe de précédence est la somme des temps d’exécution des tâches qui le composent

 Le plus long chemin du graphe de précédence est celui dont le temps d’exécution est le plus grand : Chemin Critique

 Chemin critique : est la plus grande chaîne dans

le graphe de précédence qui relie une tâche initiale à une tâche finale

27

Remarques sur le graphe de précédence...

 La hauteur H(G) du graphe est le nombre de

tâches du chemin critique

 Décomposition en niveaux : l’ensemble D(G) = {N1,N2,...,N(HG)} qui constitue un ensemble de niveaux des sommets vérifiant les conditions suivantes: – niveau 1: tâches sans prédécesseurs – niveau k : tâches dont les prédécesseurs sont de niveaux inférieurs et dont les successeurs sont de niveaux supérieurs

– niveau H(G) : tâches sans successeurs

28

Remarques sur le graphe de précédence...

 Un même graphe peut admettre plusieurs

décompositions en niveaux

 Décomposition par prédécesseur Dp(G) la

décomposition en niveaux/ – niveau 1: toutes les tâches sans prédécesseurs – k=2, H(G), est constitué des tâches dont tous les

prédécesseurs sont dans des niveaux inférieurs et ayant au moins un prédécesseur dans le niveau k-1

 dès qu’une tâche est prête, on l’exécute 29

temps optimal et p optimal

 Avec un nombre illimité de processeurs, le

temps optimal (topt) est égal au temps de calcul du plus long chemin du graphe de tâches (sans communication ou autre)

 Le nombre minimal de processeurs Popt

permettant de réaliser un algorithme s’exécutant en temps topt est égal à la largeur L(G) du graphe de tâches

30

Ordonnancement

 Étant donné

– le graphe de précédence – l’ensemble de ressources

 Affecter les tâches aux processeurs disponibles

en respectant les contraintes du graphe

31

Ordonnancement...

Processeurs

T5

T7

T2

T4

T6

T1

T3

T8

Temps

MakeSpan (Cmax)

32

Ordonnancement

 L’ordonnancement consiste à

– Choisir une ressources – Choisir une date d’exécution pour chaque tâche

 La valeur de l’ordonnancement est la valeur de

la fonction objectif choisie – temps d’exécution (makespan) : Cmax – temps d’exécution optimal Cmax*

33

Parallélisme du contrôle…

– Exemple :

 Soit l’expression suivante (a+4)*(b+c)-(d-1)

-

-

d 1

+

*

+

a

4

b

c

L’analyse de cet arbre : Faire en parallèle a+4 b+c d-1 Puis calculer (a+4)*(b+c)-(d-1)

3 unités de temps

34

Parallélisme du contrôle:Graphe de dépendance…

 Le nombre de processeurs ?

 Diagramme de gantt

 Le temps d’exécution parallèle ? Gain ?

 Peut-on faire mieux ? Diagramme de gantt ?

35

Parallélisme du contrôle:Graphe de dépendance…

 Critiques :

– Si TS n’est pas négligeable par rapport à TU alors le

T//>Tseq .

– Pour éviter que cette situation se produise il faut

essayer de maintenir le rapport TS/TU le plus bas possible.

 diminuer TS soit augmenter TU. En général il est difficile

d’agir sur TS car c’est une donnée technique de la machine sous-jacente. On peut par contre essayer d’agir sur TU36

Parallélisme du contrôle: Exemple

 Supposons un programme séquentiel peut être divisé en 7 tâches prenant respectivement t1, t2,…, t7

T4

T1

T2

T3

T5

T6

T6 T7

T7

T1 T2 T3 T4 T5

P1

2

1

2 1

3

1 1

37

Parallélisme du contrôle: Exemple…

P2 T1 T4

P1

T2

T6

T3

T5

T7

P2 T1

Publicité

T3

T4 T2

P1

T5

T6

T7

T1

T5

P2

T4

P1

T3

T2

T6 T7

38

Parallélisme de Contrôle et parallélisation efficace

 Pour obtenir une parallélisation efficace il est

donc important de bien placer les tâches sur les processeurs

 Ce placement dépend :

– du nombre de processeurs, – du graphe dépendance, – de la durée et de la taille des tâches, – des communications entre ces tâche.

39

Parallélisme de données

40

Parallélisme de données

– L’exploitation du parallélisme de Données vient de la

constatation naturelle que certaines applications sont composées de données identiques (tableaux de données par exemple) sur lesquelles on doit répéter une même action.

– Les ressources de calcul sont associées aux

données.

– Souvent, les données identiques sont en très grand

41

Parallélisme de données…

42

!"#$% &'()* &$+,-$.(,$#)

Distribution de données

! /0#1234!510$134/0#126!510$1

!"#$% &'()* &$+,-$.(,$#)

! /0#1234!510$134/0#126!510$1

 Distribution cyclique

 Distribution par bloc

 Bloc cyclique

!"#$% &'()* &$+,-$.(,$#)

! /0#1234!510$134/0#126!510$1

43

Exemple

-- Produit matriciel pour machine à mémoire partagée --

...

 N : CONSTANT integer := 1024;

 TYPE Matrice_NN IS ARRAY(1..N,1..N) OF float;

...

 PROCEDURE Produit_Mat(A,B:in Matrice_NN; C:out Matrice_NN) IS

 BEGIN

 FORALL i IN 1..N LOOP // exécution parallèle

//toutes les itérations de 1 à N sont indépendantes et peuvent

//être exécutées en parallèle sur l’indice i.

 FORALL j IN 1..N LOOP

 C(i,j):=0.0;

FOR k IN 1..N LOOP

C(i,j):= C(i,j) + A(i,k)*B(k,j);

44

Exemple...

Temps théorique : le calcul de C(i,j) suppose trois accès à la mémoire (C(i,j), A(i,k) et B(k,j)). Le goulet d’étranglement provoqué par les accès à la mémoire va donc faire chuter les performances. L’accès simultané de plusieurs processeurs à la mémoire centrale est le problème majeur rencontré par les concepteurs de machines multiprocesseurs à mémoire partagée (étranglement de la mémoire)

Une autre version possible qui consisterait à n’utiliser que N processeurs et à ne paralléliser effectivement que la première boucle. Le temps serait alors de l’ordre de N^2

45

Exemple...

 Si on dispose de N^2 processeurs, écrire un

algorithme adéquat sur une machine à mémoire distribuée ?

46

Exemple...

PROCESSEUR IS p; ... N : CONSTANT integer := 1024; TYPE Vecteur_N IS ARRAY (1..N) OF float; ...

PROCEDURE Produit_Mat (A,B:in Vecteur_N; C:out float) IS BEGIN C:=0.0; FOR k IN 1..N LOOP C := C + A(k)*B(k); END FOR; ....... END Produit_Mat;

47

Exemple...

 Idée 1 : calculer par chaque processeur

plusieurs éléments de C, par exemple C(1..m,j), m étant un paramètre dépendant du nombre de processeurs.

 Avec cette méthode si le nombre de

processeurs ≤ N chaque processeur va devoir calculer au moins une ligne complète de C et il devra donc disposer d’une copie locale de toute la matrice B

48

Exemple...

 calculer un élément C(i,j), un processeur a

besoin d’une ligne de A et d’une colonne de B  chaque processeur calcule un pavé de 1x1 de la

matrice C

 Si l’on ne dispose pas de N^2 processeurs mais

seulement de P< N^2 processeurs, chaque processeur peut calculer un pavé mxm de la matrice C avec m = ?

49

Exemple...

 m ?  Problème

50

Exemple...

 problème de la distribution préalable des matrices A et B lors de l’enchaînement de plusieurs calculs

 Solution : Avoir une seule copie des matrices A et B avec une répartition qui minimiserait le volume de communications durant le calcul

 Répartir les matrices A et B de la même façon

que la matrice C, c’est à dire par pavés de mxm avec m=N/(P1/2)

 Volume de communication?

51

Exemple...

 Chaque processeur calcule un pavé de C et possède les pavés correspondant de A et B

 Ainsi chaque processeur doit aller chercher sur les autres processeurs les parties manquantes des lignes de A et des colonnes de B.

 Le volume total de communications est le

suivant:

52

Exemple...

 2(mN-m^2) = 2(N/(√ P )N- Nm^2/P) = 2 N^2((√

P )-1)/P

2(N-1)

 Lorsque P vaut N^2, on obtient:   En effet ce qui est important c’est le rapport entre le volume des communications et le volume de calculs

 Volume de calculs par processeur?

53

Exemple  Dans ce cas le volume de calculs pour chaque

élément C(i,j) est de:

 (N-1) additions + N multiplications = 2N-1

opérations

 Chaque processeur calcule m^2 = N^2/P

éléments de la matrice C

 le volume de calculs pour un processeur est de:  (2N-1) N^2/P

54

Exemple...

-- Produit matriciel pour machine à mémoire distribuée (2) --

 PROCESSEUR IS p;

...

 MaxP : CONSTANT integer := 256;

 N : CONSTANT integer := 1024;

 m : CONSTANT integer := N DIV (Sqrt

(MaxP));

Publicité

 TYPE Pave_mN IS ARRAY(1..m,1..N) OF

float;

 TYPE Pave_Nm IS ARRAY(1..N,1..m) OF

float;

 TYPE Pave_mm IS ARRAY(1..m,1..m) OF

float;

...

 PROCEDURE Produit_Mat(A:in Pave_mN;

B:in Pave_Nm; C:out Pave_mm) IS

i1 : CONSTANT integer := m*((p*m - 1) DIV N) + 1;

j1 : CONSTANT integer := ((p-1)*m + 1) MOD N;

i2 : CONSTANT integer := j1 + m ;

j2 : CONSTANT integer := i1 + m ;

-- Je possède mes bloc: --

-- A(i1..i2-1,j1..j2-1) et B(i1..i2-1,j1..j2-1) --

55

Exemple...

 BEGIN

 GET(A(i1:i2-1,1:j1-1));

 GET(A(i1:i2-1,j2:N));

 GET(B(1:i1-1,j1:j2-1));

 GET(B(i2:N,j1:j2-1));

 FOR i IN 1..m LOOP

 FOR j IN 1..m LOOP

 C(i,j):=0.0;

 FOR k IN 1..N LOOP

 C(i,j):=C(i,j) + A(i,k)*B(k,j);

 END FOR;

 END FOR;

 END FOR;

 END Produit_Mat;

On recopie localement les m lignes de A et les m colonnes de B et l’appelant de la procédure

 La programmation sur une machine MIMD implique principalement une distribution judicieuse des données afin de :

minimiser le rapport communications/ calculs

de ne pas dépasser la mémoire disponible sur chaque processeurs. Cette “répartition judicieuse” doit la plupart du temps être faite “à la main”.

56

Calcul des dépendances: cas des boucles

 Paralléliser une boucle

analyse des dépendances qui existent

entre les différentes itérations de la boucle

 Deux itérations sont dépendantes si elles accèdent à une même cellule

mémoire dont l’un au moins des deux accès soit en écriture.

Pas de dépendance

Do I=1,N A(I)=B(I)*C(I) X(I)=A(I)+F(I+1)

DOALL I=1,N A(I)=B(I)*C(I) X(I)=A(I)+F(I+1)

Do I=1,N A(I)=A(I-1)+c

dépendance de type S(I) δ S(I+1) : Boucle

séquentielle

57

Calcul des dépendances: cas des boucles

 Paralléliser une boucle :

– Analyse des dépendances – Restructuration du programme initial

 Il s’agit d’étudier pour une boucle données les liens entre les itérations

f(I)-g(I)=0

Do I=1,N A(f(I))=… …=A(g(I))

∃ (i,j) ∈[1,N]x [1,N] / f(i)=g(i) avec i≠j

58

Techniques de parallélisation de boucles...

 Transformations standards

– Normalisation des boucles

Do I=V1,VN Step p T(I)

Do I1=1,V T(I1)

– Propagation des constantes

V=1000 X=12 Do I=1,V T(I)=T(X)+B(I)

V=1000 X=12 Do I=1,1000 T(I)=Cte+B(I)

59

Techniques de parallélisation de boucles...

 Techniques de restructuration – Permutation des boucles

Do I=1,N Do j=1,N S: X(I,J)= X(I-1,J-1)*X(I,J-1)

Do j=1,N DoALL i=1,N X(I,J)= X(I-1,J-1)*X(I,J-1)

 La boucle interne n’est pas parallélisable : dépendance

indique une relation entre des itérations : il suffit de permuter les deux boucles : fixer j et exécuter toutes les itérations de i en parallèle

60

Techniques de parallélisation de boucles...

 Techniques de restructuration – Distribution des boucles

Do i = 1,n S1: a(i) = 2*b(i) S2: c(i) = d(i)*a(i+1) End Do

–

S2(I) δ S1 (I+1)

Doall i = 1,n c(i) = d(i)*a(i+1) End Doall Doall i = 1,n a(i) = 2*b(i) End Doall

61

Techniques de parallélisation de boucles...

 Techniques de restructuration – Distribution des boucles…

Do I=1,N S1: X(I)= A(I)*C

S2: Y(I)=X(I-4)

DoALL i=1,N S1 DoALL i=1,N S2

–

–

S1(I) δ S2 (I+4) S2 δ S1 (I+4) (S2 consomme une case mémoire qui

va être modifiée par S1 après 4 itérations)

62

Techniques de parallélisation de boucles...

 Techniques de restructuration – Distribution des boucles…

Do i = 1,n S1: a(3*i-1) = 2*b(i) S2: c(i) = d(i)*a(6*i+1) End Do

DoALL i = 1,n S1: a(3*i-1) = 2*b(i) S2: c(i) = d(i)*a(6*i+1) End DoALL

–

3i-6j=2

Impossible

63

Parallélisme de flux

 L’exploitation du parallélisme de Flux vient de

la constatation que certaines applications fonctionnent selon le mode du travail à la chaîne :

– on dispose d'un Flux de données, généralement

similaires, sur lesquelles on doit effectuer une suite d'opérations en cascade

 Les ressources de calcul sont associées aux

64

Parallélisme de flux…

65

Parallélisme de flux…

 Le cas typique d’utilisation du parallélisme de

flux est lorsque l’on doit appliquer à des données une fonction F qui peut se décomposer en plusieurs fonctions:

F(x) = F1(F2(F3(...Fp(x)..)))

 Dans ce cas le calcul peut être divisé en P

étages de la façon suivante:

66

Parallélisme de flux…

Parallélisme de flux…

 Dans les systèmes temps réel de traitement de

données (traitement de signal) – Le flux de données est ici fourni par l’arrivée continue des mesures provenant d’un dispositif de saisie des données

 …

67