• Aucun résultat trouvé

Motivation (1/2) Parallélisme et granularité

N/A
N/A
Protected

Academic year: 2022

Partager "Motivation (1/2) Parallélisme et granularité"

Copied!
47
0
0

Texte intégral

(1)

Motivation (1/2)

Parallélisme et granularité

Granularité « pratique » : gros grain

Découpe en p = #ressources disponibles

Inconvénient : architecture hétérogène, dynamique

Granularité « théorique » : grain fin

Parallélisme maximal avec #ops ~ tps séquentiel

Inconvénient : surcoût d’ordonnancement sur l’architecture

Quel grain pour limiter le surcoût de la parallélisation ?

a b

H(a) O(b,7)

F(2,a) G(a,b) H(b)

Degré de parallélisme

arbitraire

(2)

• Exemple : calcul des préfixes P

i

= *

k=0

a

i

(i=0..n)

• Algorithme séquentiel :

for (i= 0 ; i <= n; i++ ) P[ i ] = P[ i – 1 ] * a [ i ] ; #ops * = n

• Algorithme parallèle :

Motivation (2/2) Algorithmique

i

(3)

• Exemple : calcul des préfixes P

i

= *

k=0

a

i

(i=0..n)

• Algorithme séquentiel :

for (i= 0 ; i <= n; i++ ) P[ i ] = P[ i – 1 ] * a [ i ] ; #ops * = n

• Algorithme parallèle :

Motivation (2/2) Algorithmique

i

a0 a1 a2 a3 an

* * *

an-1

(4)

• Exemple : calcul des préfixes P

i

= *

k=0

a

i

(i=0..n)

• Algorithme séquentiel :

for (i= 0 ; i <= n; i++ ) P[ i ] = P[ i – 1 ] * a [ i ] ; #ops * = n

• Algorithme parallèle :

Motivation (2/2) Algorithmique

i

a0 a1 a2 a3 an

* * *

an-1

Préfixe ( n / 2 )

(5)

• Exemple : calcul des préfixes P

i

= *

k=0

a

i

(i=0..n)

• Algorithme séquentiel :

for (i= 0 ; i <= n; i++ ) P[ i ] = P[ i – 1 ] * a [ i ] ; #ops * = n

• Algorithme parallèle :

Motivation (2/2) Algorithmique

i

a0 a1 a2 a3 an

* * *

an-1

Préfixe ( n / 2 )

P0 P2 Pn-1

(6)

• Exemple : calcul des préfixes P

i

= *

k=0

a

i

(i=0..n)

• Algorithme séquentiel :

for (i= 0 ; i <= n; i++ ) P[ i ] = P[ i – 1 ] * a [ i ] ; #ops * = n

• Algorithme parallèle :

Motivation (2/2) Algorithmique

i

a0 a1 a2 a3 an

* * *

an-1

Préfixe ( n / 2 )

P0 P2 Pn-1

* P3

* P1

* Pn

(7)

• Exemple : calcul des préfixes P

i

= *

k=0

a

i

(i=0..n)

• Algorithme séquentiel :

for (i= 0 ; i <= n; i++ ) P[ i ] = P[ i – 1 ] * a [ i ] ; #ops * = n

• Algorithme parallèle :

dopar (i= 0 ; i <= n; i+=2 ) b[ i ] = a[ 2.i ] * a [ 2.i+1 ] ; PrefixePar( b[ 0 .. n/2], P[1, 3, 5, .., n-1] ) ; dopar (i= 1 ; i <= n/2; i++ ) P[ 2.i ] = P[2i-1] * a [ 2.i ] ;

=> #T = tps parallèle = 2. log n mais #ops * = 2.n

• Parallèle => surcoût en nbre d’opérations

[Ladner-Fischer]

Motivation (2/2) Algorithmique

i

(8)

Plan de la présentation

• 1. Découpe récursive et ordonnancement work-stealing

• 2. Parallélisation à grain adaptatif:

couplage algorithme séquentiel et algorithme parallèle

• 3. Application à la parallélisation de gzip

(9)

1. Parallélisme par découpe récursive

exemple: Produit itéré, arborescence critique Branch&Bound, …

void ProdIter ( node x, …) { if (grain(x) < …) eval_seq(x) else {

for s ∈ fils(x) dopar compute( s, …) ;

} }

h

Notations :

T

s

= temps séquentiel T

1

= travail parallèle T

= temps parallèle

Sur p processeurs [Brent]

T

exec(p)

~ T

1

/p + T

+ surcoût //

task

(10)

Implantation : ordo. par vol de travail (1/2)

• Ordonnancement par vol de travail

[Graham]

:

• Graphe de tâches avec parallélisme dynamique

• Nombre de vols < p. T => Tp = T1/p + T + O(p.T)

• Intérêt de la découpe récursive si T petit

• Optimisation à l’exécution :

work-first principle

[Multilisp, Cilk, …]

⇒ dégénération séquentielle de l’algorithme parallèle pour éviter le surcoût de gestion de tâches parallèles inutiles

(11)

Implantation : ordo. par vol de travail (2/2)

f1() { ….

fork 2 ; … }

+ Exécution non-préemptive d’une tâche prête Hypothèse : ordo. séquentiel de l’algorithme parallèle valide

Pile

(12)

Implantation : ordo. par vol de travail (2/2)

f1() { ….

fork 2 ; … }

+ Exécution non-préemptive d’une tâche prête Hypothèse : ordo. séquentiel de l’algorithme parallèle valide

Pile

f1

P

Pile

(13)

Implantation : ordo. par vol de travail (2/2)

f1() { ….

fork 2 ; … }

+ Exécution non-préemptive d’une tâche prête Hypothèse : ordo. séquentiel de l’algorithme parallèle valide

Pile

f1

P

Pile

fork f2

(14)

Implantation : ordo. par vol de travail (2/2)

f1() { ….

fork 2 ; … }

+ Exécution non-préemptive d’une tâche prête Hypothèse : ordo. séquentiel de l’algorithme parallèle valide

Pile

f1

P

Pile

fork f2

f2

(15)

Implantation : ordo. par vol de travail (2/2)

f1() { ….

fork 2 ; … }

+ Exécution non-préemptive d’une tâche prête Hypothèse : ordo. séquentiel de l’algorithme parallèle valide

Pile

f1

P

Pile

fork f2

f2

(16)

Implantation : ordo. par vol de travail (2/2)

f1() { ….

fork 2 ; … }

+ Exécution non-préemptive d’une tâche prête Hypothèse : ordo. séquentiel de l’algorithme parallèle valide

Pile

f1

P

Pile

fork f2

f2

P’

(17)

Implantation : ordo. par vol de travail (2/2)

f1() { ….

fork 2 ; … }

+ Exécution non-préemptive d’une tâche prête Hypothèse : ordo. séquentiel de l’algorithme parallèle valide

Pile

f1

P

Pile

fork f2

f2

P’

vol

(18)

Implantation : ordo. par vol de travail (2/2)

f1() { ….

fork 2 ; … }

+ Exécution non-préemptive d’une tâche prête Hypothèse : ordo. séquentiel de l’algorithme parallèle valide

Pile

f1

P

Pile

fork f2

f2

P’

vol

(19)

Implantation : ordo. par vol de travail (2/2)

f1() { ….

fork 2 ; … }

+ Exécution non-préemptive d’une tâche prête Hypothèse : ordo. séquentiel de l’algorithme parallèle valide

Pile

f1

P

Pile

fork f2

f2

P’

vol

f1

(20)

Implantation : ordo. par vol de travail (2/2)

f1() { ….

fork 2 ; … }

+ Exécution non-préemptive d’une tâche prête Hypothèse : ordo. séquentiel de l’algorithme parallèle valide

Pile

f1

P

Pile

fork f2

f2

P’

vol

f1

• Intérêt : Grain fin « statique », mais contrôle dynamique

• Inconvénient: surcôut possible de l’algorithme parallèle

[ex. préfixes]

(21)

Expérimentations : knary

SMP Origin 3800

Cilk / Athapascan

iCluster

Athapascan

59,2 64

90,1 100

30,9 32

15,6 16

7,83 8

Speed-Up

#procs

Ts = 2397 s - T1 = 2435

(22)

2. Parallélisation à grain adaptatif

Principe : si un processeur devient inactif,

=> extraction de parallélisme sur un processeur en train d ’exécuter un algorithme séquentiel

Hypothèses : deux algorithmes :

1 algo. séquentiel : SeqCompute

1 algo. parallèle : LastPartComputation => à tout moment, possibilité d’extraire du parallélisme du travail restant à faire dans l’algo. séquentiel.

Après extraction : le travail extrait peut être réalisé par l’algo.séquentiel.

(23)

2. Parallélisation à grain adaptatif

Principe : si un processeur devient inactif,

=> extraction de parallélisme sur un processeur en train d ’exécuter un algorithme séquentiel

Hypothèses : deux algorithmes :

1 algo. séquentiel : SeqCompute

1 algo. parallèle : LastPartComputation => à tout moment, possibilité d’extraire du parallélisme du travail restant à faire dans l’algo. séquentiel.

Après extraction : le travail extrait peut être réalisé par l’algo.séquentiel.

SeqCompute

(24)

2. Parallélisation à grain adaptatif

Principe : si un processeur devient inactif,

=> extraction de parallélisme sur un processeur en train d ’exécuter un algorithme séquentiel

Hypothèses : deux algorithmes :

1 algo. séquentiel : SeqCompute

1 algo. parallèle : LastPartComputation => à tout moment, possibilité d’extraire du parallélisme du travail restant à faire dans l’algo. séquentiel.

Après extraction : le travail extrait peut être réalisé par l’algo.séquentiel.

SeqCompute

Extract_par LastPartComputation

(25)

2. Parallélisation à grain adaptatif

Principe : si un processeur devient inactif,

=> extraction de parallélisme sur un processeur en train d ’exécuter un algorithme séquentiel

Hypothèses : deux algorithmes :

1 algo. séquentiel : SeqCompute

1 algo. parallèle : LastPartComputation => à tout moment, possibilité d’extraire du parallélisme du travail restant à faire dans l’algo. séquentiel.

Après extraction : le travail extrait peut être réalisé par l’algo.séquentiel.

SeqCompute

Extract_par LastPartComputation

(26)

2. Parallélisation à grain adaptatif

Principe : si un processeur devient inactif,

=> extraction de parallélisme sur un processeur en train d ’exécuter un algorithme séquentiel

Hypothèses : deux algorithmes :

1 algo. séquentiel : SeqCompute

1 algo. parallèle : LastPartComputation => à tout moment, possibilité d’extraire du parallélisme du travail restant à faire dans l’algo. séquentiel.

Après extraction : le travail extrait peut être réalisé par l’algo.séquentiel.

SeqCompute

Extract_par LastPartComputation

(27)

2. Parallélisation à grain adaptatif

Principe : si un processeur devient inactif,

=> extraction de parallélisme sur un processeur en train d ’exécuter un algorithme séquentiel

Hypothèses : deux algorithmes :

1 algo. séquentiel : SeqCompute

1 algo. parallèle : LastPartComputation => à tout moment, possibilité d’extraire du parallélisme du travail restant à faire dans l’algo. séquentiel.

Après extraction : le travail extrait peut être réalisé par l’algo.séquentiel.

SeqCompute

Extract_par LastPartComputationSeqCompute

(28)

Algorithme générique à grain adaptatif

Programmation : suppose un ordo. des tâches par vol de travail :

LastPartComputation( work ) {

wpar = Extract_par( work ) ; // work est modifié fork SeqCompute ( wpar ) ;

fork LastPartComputation ( wpar ) ; fork LastPartComputation ( work ) ;

}

Sémantique séquentielle :

LastPartComputation n’est lancée que si un processeur est inactif

Sinon, LastPartComputation est exécutée avec wpar = Vide

(29)
(30)

E.g. Calcul parallèle f(i), i=1..100 LastPart(w)

W=2..100

SeqComp(w) sur CPU=A

f(1)

(31)

E.g. Calcul parallèle f(i), i=1..100 LastPart(w)

W=3..100

SeqComp(w) sur CPU=A

f(1); f(2)

(32)

E.g. Calcul parallèle f(i), i=1..100 LastPart(w)

on CPU=B

W=3..100

SeqComp(w) sur CPU=A

f(1); f(2)

(33)

E.g. Calcul parallèle f(i), i=1..100

SeqComp(w) sur CPU=A

f(1); f(2) LastPart(w)

on CPU=B

W=3.. 51

SeqComp(w’) LastPart(w’)

W’=53..100

LastPart(w)

(34)

E.g. Calcul parallèle f(i), i=1..100

SeqComp(w) sur CPU=A

f(1); f(2) W=3.. 51

SeqComp(w’) LastPart(w’)

W’=53..100

LastPart(w)

(35)

E.g. Calcul parallèle f(i), i=1..100

SeqComp(w) sur CPU=A

f(1); f(2) W=3.. 52

SeqComp(w’) sur CPU=B

f(53)

LastPart(w’)

W’=54..100

LastPart(w)

(36)

3. Application : parallélisation de gzip

• Gzip :

Utilisé (web) et coûteux bien que de complexité linéaire

Code source :10000 lignes C, structures de données complexes

Principe : LZ77 + arbre Huffman

• Pourquoi gzip ?

Problème P-complet, mais parallélisation pratique possible

Inconvénient: toute parallélisation (connue) entraîne un surcoût

(37)

Fichier

compressé Fichier en entrée

Compression à la volée

Algorithme

Comment paralléliser gzip ?

(38)

Fichier

compressé Fichier en entrée

Compression à la volée

Algorithme

Comment paralléliser gzip ?

Partition dynamique en blocs

(39)

Fichier

compressé Fichier en entrée

Compression à la volée

Algorithme

Comment paralléliser gzip ?

Partition dynamique en blocs

Blocs

compressés Compression

parallèle

Partition statique en blocs

Parallélisation

=>

=>

(40)

Fichier

compressé Fichier en entrée

Compression à la volée

Algorithme

Comment paralléliser gzip ?

Partition dynamique en blocs

Blocs

compressés Compression

parallèle

Partition statique en blocs

Parallélisation

=>

=>

ü Parallélisation « facile » ,100% compatible avec gzip/gunzip

ü Problèmes : perte de taux de compression, grain par robuste, surcoût

(41)

Output

compressed file

Input File

Compression à la volée

SeqComp LastPartComputation

Parallélisation gzip à grain adaptatif

(42)

Output

compressed file

Input File

Compression à la volée

SeqComp LastPartComputation

Parallélisation gzip à grain adaptatif

Dynamic partition in blocks

(43)

Output

compressed file

Input File

Compression à la volée

SeqComp LastPartComputation

Parallélisation gzip à grain adaptatif

Dynamic partition in blocks

(44)

Output

compressed file

Input File

Compression à la volée

SeqComp LastPartComputation

Parallélisation gzip à grain adaptatif

Dynamic partition in blocks

Output

compressed blocks

Parallel compression

Dynamic partition in blocks

(45)

Output

compressed file

Input File

Compression à la volée

SeqComp LastPartComputation

Parallélisation gzip à grain adaptatif

Dynamic partition in blocks

Output

compressed blocks

Parallel compression

Dynamic partition in blocks

cat

(46)

Conclusion Grain adaptatif

Couplage de 2 algos : 1 séquentiel, 1 parallèle “récursif”

Génération de parallélisme que sur inactivité de ressources Opérateur de base : ExtractPar de travail séquentiel en cours Programmation générique, originale ... et simple !

Intérêt

Réduction du surcoût lié au parallélisme : - création de tâche, ordonnancement

- surcoût arithmétique intrinsèque

- Gain pratique: code PL inférence probabiliste [Mazer, SHARP]

Perpsectives

- Expérimentations SMP et distribuées : gzip, préfixes, ....

- Extension au cas distribué et hétérogène : ajout/résilience - Extensions à d’autres algorithmes: Gauss, B&B, ...

(47)

Références

Documents relatifs

4 TABLE DES MATI ` ERES 6 Algorithmes d’exclusion mutuelle (m´ emoire partag´ ee) 59.. 6.1 Peut-on se passer de

Concevoir des algorithmes parallèles ecaces pour le résoudre Estimer le coût de l'exécution de ces algorithmes sur une machine parallèle en fonction de la taille des données et

3.2 Using DSM-PM2 to build a Java onsisteny protool.. This work has been supported by

a) les plans ont un point ommun et sont distints, alors ils sont séants suivant une droite passant par e point, (ainsi deux.. plans distints qui ont deux points ommuns sont

Deux droites et une sécante déterminent deux couples d’angles alternes-internes. Ainsi, sur la figure précédente, on peut trouver deux autres angles alternes- internes :.. Yvan

Deux droites et une sécante déterminent deux couples d’angles alternes-internes. Ainsi, sur la figure précédente, on peut trouver deux autres angles alternes- internes :.. 2..

Enfin, lorsqu’une matrice frontale ne tient pas en mémoire, nous avons proposé une tech- nique permettant de bénéficier de l’aide d’autres processeurs afin de traiter

Task completion (i.e. the end of the Time spent computing) is highly irregular because 24 different servers are in use for task completion and the time required to complete each