Title: Algorithmique parall
1Algorithmique parallèle
- Construction et analyse dalgorithmes B. Le Cun
- Synthèse par transformation S. Rajopadhye
- Synthèse par interprétation J.-L. Roch
2Un exemple
- void explore( nœud n, )
- if
- for (s n.first() s ltn.last() n)
- dopar explore( s, )
-
-
tâche
T1 tps séquentiel T? O(h) S1 O(h)
Texec(p) T1 /p (1e) Sexec(p) S1 O(1)
3De lalgorithme à la machine Synthèse par
interprétation
Programme parallèle T1, T?
Exécution efficace
Class f operating()( shared_r_wltintgt x ) x
sin(x-gtval ) BB(taq ( x ) ) void main(int
argc, char argv) Forkltfgt ( sharedltintgt (3) )
4Langages data flow
détection (dynamique) des dépendances
- Fonctionnel 70,
- Calcul par nécessité
- Haskell Arvind 70, MIT
- Sisal 90, Gaudiot USC
-
- mémoire
- Parallélisme 80,
- Ordonnancement efficace
- - fonctionnel
- Multilisp Halstead 86, MIT
- Prolog Chassin 88 Mars-ML Lecussan 88
- Sisal Sohn, 98 NJIT Nesl Blelloch 96
Cornell - - impératif Macro data flow
- Jade Rinard 95, Stanford Earth Gao 98 UD
- Cilk Leiserson 98, MITAthapascan-1 Roch 98
- temps mémoire
5Plan
- 1. Ordonnancement dun graphe calcul et contrôle
- Interprétation data flow techniques de base
- 3. Optimisation dynamique du grain
- 4. Optimisation dynamique des accès mémoire
- Contrôle de lexplosion mémoire
6Ordonnancement cadre théorique
- Entrée un graphe de précédence, pas un
programme - Sortie un placement des tâches et des données
- Analyse de lordonnancement comparaison à
loptimal - Coût de calcul et de gestion généralement ignorés
- Coût de calcul polynomial en le nombre de tâches
-gt T1O(1) -
7Exemples dordonnancements
8Surcoût pour réaliser lordonnancement
- Contrôle
- création/placement/entrelacement des tâches
- gestion de la mémoire, mouvements de données
- préemptivité, réactivité
- Exemple algorithme récursif dexploration
- Ordonnancement glouton théorique OK
- Mais réalisation ???
- Nombre de tâches T1
- Mémoire 2h en séquentiel h
9Contrôle ordonnancement sur grappe
- Surcoût
- local sur SMP
- détection locale des données disponibles fins
daccès locaux - gestion locale des tâches prêtes sur threads
dédiés - global entre nœuds SMP
- Calcul des synchronisations bilan des fins
daccès locaux - si inactivité envoi dune requête à un autre
nœud - Surcoût de réactivité
10Plan
- 1. Ordonnancement dun graphe calcul et contrôle
- Interprétation data flow techniques de base
- distribué, SMP, séquentiel
- 3. Optimisation dynamique du grain
- 4. Optimisation dynamique des accès mémoire
11Interprétation data-flow (1)
- Détecter dynamiquement les synchronisations
dépendance
écriture -gt lecture - Variables vues en assignation unique sisal
- Une tâche lit des valeurs en mémoire
- Leffet dune tâche est décrire des valeurs en
mémoire
- En cours dexécution dune tâche, une variable a
deux versions - version courante ce qui est lu valeur
précédente avant linstruction courante - version future ce qui sera écrit valeur
résultant de lexécution de linstruction sera
vue par les successeurs
12Interprétation data-flow (2)
- Lors de la création de tâches dopar f(x,)
- création dune nouvelle version pour les
variables modifiées par la tâche créée - courante côté appelant
future côté appelé
13Interprétation data-flow (3)
- Calculer si une version est prête
- fin écriture gt lecture possible
- fin lecture écriture en place/ramassage mémoire
possible - Implémentation de la gestion des versions
- dépend de la sémantique des accès mémoire
- Distribuée, SMP, Séquentielle
14Implémentation distribuée
- Une même version est distribuée sur plusieurs
sites - nommage site de création indice sur le site
x ltsite, indicegt - Calculer si une version est prête
- Terminaison distribuée
- Exemple
Versionx
Versionx
bilan cptr local
id site de ref cptr local
Version sur site de référence
Version sur autre site
15Implémentation SMP
- Compteur local sur chaque version
- nombre d accès en cours prêt ltgt cptr0
16Implémentation séquentielle (DF)
- ordonnancement dune tâche appel de fonction
- dopar f( x )
- version courante version future stockage en
place
implantation
f(x)
implantation
x
17Interprétation data flow
- Efficace à gros grain en distribué et smp mais
- Surcoût de contrôle dû à linterprétation
- Comment gérer de nombreuses synchronisations ?
- Analogie interprétation vs compilation
- Comment compiler (à la volée) lordonnancement ?
JIT
18Plan
- 1. Ordonnancement dun graphe calcul et contrôle
- 2. Interprétation data flow techniques de base
- 3. Optimisation dynamique du grain
- dégénération séquentielle
- 4. Optimisation dynamique des accès mémoire
19Tirer parti dun ordt séquentiel efficace
- Programme très parallèle
- beaucoup de tâches créées et exécutées
localement Blumhoffe - void prog()
- lti1gt
- spawn f1 (args )
- //autres spawn
- Sync
- ltfingt
-
- Mettre le surcoût dordt lors du vol
- éviter les créations de tâches, remplacées par
des appels de fonction
20Quand est-ce possible ?
- Lors dune création, il faut pouvoir dégénérer en
appel de fonction profondeur dabord - Sémantique séquentielle possible
- Être sûr que la tâche est prête à être exécutée
- Exemples multilisp 86, Prolog,, Cilk 98,
- Deux versions dune fonction
- Séquentielle -
Création/exécution dune tâche
21Dégénération séquentielle active
- Principe test si ? processeur inactif avant de
dégénérer
lti1gt
Si pas de requête de tâches dégénération
séquentielle f(args1)
f1(args)
fk(args)
Processeur actif Ordt compilé
22Dégénération séquentielle passive
- Principe si requête de vol, vol de la
continuation
// dégénération séquentielle lti1gt Préparation
continuation exportable f(args1) // version
rapide
lti1gt
f1(args)
fk(args)
sync
ltfingt
Processeur actif Ordt compilé
23Dégénération séquentielle - Conclusion
- Théorique sur SMP si programme parallèle strict
- Pratique contrôle automatique de granularité
Galilée98
O( p.T?)
SMP durée f( seuil ) temps séquentiel
pour 1 processeur pour 2 processeurs
24Plan
- 1. Ordonnancement dun graphe calcul et contrôle
- 2. Interprétation data flow techniques de base
- 3. Optimisation dynamique du grain
-
- 4. Optimisation dynamique des accès mémoire
- dégénération distribuée
25Optimiser les accès mémoire
- Si beaucoup de synchronisations
- efficacité si localité
- Analyse data flow gt Les accès distants sont
prévisibles - Pré-calcul de sites pour tâches et données
(écriture locale) ETF - Accès mémoire compilé pointeur
local ou communication uni-directionnelle
- Dégénération distribuée
- Surcoût mis lors de non respect de la localité
26Exemple
- Pré-affectation tâches/versions aux processeurs
Accèsmémoire
F(a)
G(b)
comm
b
a
send
a
H(a)
recv
I(a,b)
Processeur 1
Processeur 2
27Algorithme dinterprétation
- Hypothèse graphe calculé dynamiquement
(partiellement) - Version ptrressource de communication (ex tag
mpi) - En fin décriture, diffusion à tous les sites
lecteurs - Regroupement des communications / contrôle
scrutation - Côté lecteur
- pré-allocations pour les réceptions
- Ordonnancement dynamique des tâches prêtes
- NB le pré-placement peut être modifié
dynamiquement
28Dégénération distribuée - Conclusion
- Théorique sur modèle délai latence t
Doreille99
29Plan
- 1. Ordonnancement dun graphe calcul et contrôle
- 2. Interprétation data flow techniques de base
- 3. Optimisation dynamique du grain
-
- 4. Optimisation dynamique des accès mémoire
-
30Conclusion (1)
- Langages macro data flow
- JIT Analyse (implicite) des dépendances
- Calcul dordonnancement
- Contrôle de lordonnancement
- Techniques pour optimiser le surcoût de contrôle
- Dégénération séquentielle
Dégénération distribuée - Intégration dans dautres langages
- Dégénération séquentielle dans Open-MP ?
- Spécialisation automatique
- Les techniques peuvent être couplées entre elles
- Vers un ordt générique avec auto-spécialisation
31dtrporf grappe de 64 processeurs
- 16 quadri-processeurs Univ. Delaware
- Grappe SUNsSolaris Myrinet
- bande passante 30Mo/s , latence 60µs
- 1560 Mflops par nœuds 25000 Mflops.
Athapascan-1 60000 tâches
- Dégénération distribuée entre nœuds
- Ordt glouton optimisé SMP sur chaque noeud
Bloc bidim/MPI
- Exploitation mémoire partagée
- Ordonnancement plus dynamique
32Conclusion (2)
- Construction dun algorithme parallèle efficace
- À la main algorithmique parallèle
- Automatiquement par transformation dun programme
séquentiel - Exécution dun programme parallèle
- Automatiquement par interprétation dun programme
parallèle - Intérêt dun ordonnancement séquentiel efficace
Prédiction dépendances - À la main écriture dun programme spécifique
- La synthèse automatique permet, sous certaines
restrictions, la portabilité avec performances
33Comment paralléliser gzip ?
Parallélisation
?
?