1 / 81

Algorithmes parallèles auto-adaptatifs et applications

Algorithmes parallèles auto-adaptatifs et applications. Daouda TRAORÉ Directeurs de thèse Jean-Louis ROCH & Denis TRYSTRAM Projet MOAIS Laboratoire d’Informatique de Grenoble (UMR 5217), France Vendredi 19 Décembre 2008. Motivations.

guthrie
Download Presentation

Algorithmes parallèles auto-adaptatifs et applications

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Algorithmes parallèles auto-adaptatifs et applications Daouda TRAORÉ Directeurs de thèse Jean-Louis ROCH & Denis TRYSTRAM Projet MOAIS Laboratoire d’Informatique de Grenoble (UMR 5217), France Vendredi 19 Décembre 2008

  2. Motivations • Evolution des machines parallèles:de machines avec processeurs identiques vers: • Grilles de calcul => ressources hétérogènes et dynamiques • Systèmes multi-processus (Processeurs multi-cœurs, SMP, MPsoc) • applications concurrentes sur une même unité => les cœurs apparaissent comme de vitesses variables • Processeurs graphiques : GPUs + CPUs => hétérogénéité, fréquences et opérations différentes Questions:Est-ce qu’un algorithme parallèle peut fonctionner dans ce contexte? Avec quelles garanties de performance ? Sous quelles hypothèses? 2/52

  3. Evolution de la programmation parallèle • Initialement: processeurs identiques (MPI) • Aujourd’hui: Interfaces de haut-niveau permettant d’abstraire l’architecture. Grille Multi-coeurs, SMP GPU Cuda Google MapReduce OpenMP, Cilk++, intel TBB Athapascan/Kaapi 3/52

  4. Définition (algorithme auto-adaptatif) Un algorithme auto-adaptatif est un algorithme qui est capable de changer automatiquement son comportement en fonction de son contexte d‘exécution (données manipulées, plate-forme d’exécution, occupation des processeurs, …). Objectif de la thèse Construction d’algorithmes parallèles adaptatifs • S’adaptent à la plate-forme d’exécution • Inconscients du nombre de processeurs (en anglais, processor oblivious) • Adaptation à la charge de la plate-forme • Avec des garanties d’efficacité • Temps d’exécution si possible optimal p/r aux ressources (dynamiquement) allouées • Contexte: LIG / EP INRIA Moais: Thème sur la conception d’algorithmes adaptatifs [Roch&al gzip2001, TSI2005,...] Master ROCO D. Traoré 2005 : un algorithme de préfixe adaptatif (mais clairvoyant…) 4/52

  5. Plan du mémoire et contributions • Introduction [objectifs et contributions, organisation] • Programmation parallèle[notions] • Algorithmes parallèles adaptatifs[définitions] • Un algorithme adaptatif pour le calcul parallèle des préfixes[EUROPAR’06, CARI’06] • Algorithmes adaptatifs de tri parallèle[RENPAR’08] • Schéma générique des algorithmes parallèles adaptatifs[PDP’08, EUROPAR’08] • Application du schéma à la librairie standard STL[EUROPAR’08, MSAS’08] • Conclusion et perspectives 5/52

  6. Plan de la présentation • Algorithmes pour processeurs identiques: illustration sur le calcul parallèle des préfixes • Ordonnancement par vol de travail • Schéma générique adaptatif • Algorithme adaptatif pour le calcul parallèle des Préfixes • Application du schéma à la STL • Conclusion et perspectives 6/52

  7. Algorithmes pour processeurs identiques: illustration sur le calcul parallèle des préfixes • Calcul des préfixes • Entrée : x0, x1, …, xn • Sortie : p0, p1, ..., pn avec • Applications : parallélisation de boucles, additions modulaires [Blelloch’89] • Algorithme séquentiel : for(p[0]=x[0], i=1; i <= n; i++) p[i]=p[i-1]*x[i]; // n opérations • Borne inférieure sur p processeurs identiques : • Parallélisation optimale sur p processeurs identiques [Snir’86, Nicolau-Wang’96] [Fich’83] 7/52

  8. p+1 blocs p-q+1 blocs q-1 blocs s+1 … s+1 s+2 s+2 s-p+1 … Algorithmes pour processeurs identiques: illustration sur le calcul parallèle des préfixes • Un nouvel algorithme optimal pour le calcul des préfixes [chap. 3, pages 27-36] • - Soit s et q le quotient et le reste de la division de n+1 par p+1: • n+1 = s(p+1) + q • Division du tableau initial en p+1 blocs de taille éventuellement différentes 8/52

  9. p-1 1 p-1 1 p-1 étapes p-1 1 s+1-p s+1-p s+2-p s+2-p s+1-p Algorithmes pour processeurs identiques: illustration sur le calcul parallèle des préfixes Algorithme statique en p+1 blocs s+1 … s+1 s+2 s+2 … … … 9/52

  10. Algorithmes pour processeurs identiques: illustration sur le calcul parallèle des préfixes • Analyse théorique du temps d’exécution de l’algorithme proposé et le nombre d’opérations vérifie : • Remarque: Une variante donne un temps toujours optimal, mais n’a pas été programmée Théorème[chap. 3, page 30] Si 0 ≤ q ≤ 1 et (p+3)/2 ≤ q ≤ p, alors le temps d’exécution de l’algorithme (optimal) sur p processeurs identiques vérifie Théorème[chap. 3, pages 31 et 32] Si 2 ≤ q ≤ (p+3)/2, alors le temps d’exécution de l’algorithme à 1 de l’optimal sur p processeurs identiques vérifie 10/52

  11. Algorithmes pour processeurs identiques: illustration sur le calcul parallèle des préfixes • Machine AMD Opteron 4 processeurs n grand, temps d’une opération très petit (temps d’addition de deux Doubles par exemple). Dans l’algorithme de Nicolau-Wang On a 2n/(p+1) synchronisations accélération 1 processeur taille temps n petit, temps d’une opération assez élevé taille 11/52

  12. Algorithmes pour processeurs identiques: illustration sur le calcul parallèle des préfixes • Inconvénients de la parallélisation sur des processeurs identiques • Nombre d’opérations : toujours le même si les p processeurs initialement prévus pour l’exécution ne sont pas disponibles. • Exemple : si on suppose que • Un seul processeur exécute l’algorithme parallèle • Les autres étant mobilisés pour d’autres calculs => le nombre d’opérations effectuées par un seul processeur est • L’algorithme optimal sur processeurs identiques n’est pas performant • Si les processeurs sont de vitesses différentes (temps d’exécution final = temps d’exécution du processeur le plus lent) • Si le temps de l’opération * est variable 12/52

  13. Plan de la présentation • Algorithmes pour processeurs identiques: illustration sur le calcul parallèle des préfixes • Ordonnancement par vol de travail • Schéma générique adaptatif • Algorithme adaptatif pour le calcul parallèle des Préfixes • Application du schéma à la STL • Conclusion et perspectives 13/52

  14. Ordonnancement par vol de travail Principe • Suit le principe glouton: à tout instant où il existe une tâche prête non encore ordonnancée, tous les processeurs sont actifs. • Algorithme distribué • Chaque processeur gère localement une pile des tâches qu’il a rendues prêtes (créées, ou débloquées). steal tâches P0 P1 P2 [Blelloch’90, ], [Leiserson & Kuszmaul 2001] • Lorsqu’un processeur devient inactif, il choisit (au hasard) un processeur dont la pile en cours d’exécution contient une tâche prête et lui vole une tâche (la plus ancienne, en haut de la pile (FIFO). 14/52

  15. Modèle de coût associé au vol de travail (1/2) Notations • W = travail = le nombre d’opérations de l’algorithme parallèle sur 1 processeur • Tp = la durée d’exécution de l’algorithme parallèle sur p processeurs • D = la profondeur de l’algorithme parallèle (le nombre d’opérations sur le chemin critique) • Pave = la vitesse moyenne des p processeurs : Théorème[Arora,Blumofe, Plaxton 02, Bender, Rabin 02] Avec une grande probabilité; • Le temps d’exécution Tp d’un programme utilisant l’ordonnancement par vol de travail est majoré par : • Le nombre de vols (réussis ou échoués) est inférieure à O(p.D) 15/52

  16. Modèle de coût associé au vol de travail (2/2) • Efficacité de la parallélisation • Wseq= travail de l’ algorithme séquentiel • Tseq= temps d’exécution de l’algorithme séquentiel : • Intérêt :Si W ≈ Wseq et D très petit, • En général W ≥ c1Wseq,c1 mesure le surcoût dû à l’ordonnancement et au parallélisme. • Surcoût de parallélisme • Gestion des tâches : tâches empilées dans une pile • Exemple : algorithme récursif, • Grain fin : surcoût arithmétique (récursivité) • Minimisation du surcoût d’ordonnancement • Principe du travail d’abord[Frigoet al98, Roch01] Ce principe consiste à minimiser le surcoût de création de tâches de l’ordonnancement par vol de travail. • Appels de création de tâches traduits en appel local de fonction séquentielle. 16/52

  17. cilk A () { x = spawn C(); y = spawn B(); sync; return (x+y); } A (Shared_w<int> res) { shared<int> x; shared<int> y; Fork<C>()(x); Fork<B>()(y); Fork<M>()(x, y, res); } Bibliothèques implémentant le vol de travail • Cilk[ Frigo et al 98] • Création de tâches : spawn • Synchronisation : sync • Architectures cibles : mémoires partagées • Athapascan/Kaapi • Athapascan [Roch et al, PACT 98] : interface applicative • Basé sur le graphe de flot de données • Création de tâches : Fork • Création de données : Shared • Architectures cibles : mémoires partagées et distribuées • Kaapi [Gautier et al 07] : moteur exécutif, qui supporte Athapascan 17/52

  18. pref(n/2) pref(n/2) … final(n/2) Ordonnancement par vol de travail : limite • Emulation séquentielle de l’algorithme parallèle • Nombre d’opérations arithmétiques supérieur à celui de l’algorithme séquentiel • Exemple : Calcul des préfixes, optimal avec n opérations ! - Entrée : x0, x1, …, xn - Sortie : p0, p1, ..., pn avec • Un algorithme parallèle récursif (Diviser Pour Régner) : W(n) = 2W(n/2) + n/2 = (1/2) n*log(n) => l’émulation séquentielle de l’algorithme parallèle fait plus d’opérations que l’algorithme séquentiel optimal ! 18/52

  19. Plan de la présentation • Algorithmes pour processeurs identiques: illustration sur le calcul parallèle des préfixes • Ordonnancement par vol de travail • Schéma générique adaptatif • Algorithme adaptatif pour le calcul parallèle des Préfixes • Application du schéma à la STL • Conclusion et perspectives 19/52

  20. Schéma générique adaptatif • Ordonnancement par vol de travail: amélioration • Principe de base [Roch&al TSI 2005]Remplacer l’émulation séquentielle de l’algorithme parallèle par un « vrai » algorithme séquentiel plus efficace. =>Utiliser le couplage de deux algorithmes : • Un séquentiel: qui minimise le travail (nombre d’opérations) W • Un parallèle: qui minimise la profondeur parallèle D • Points clefs: • À tout instant, chaque processus actif exécute un algorithme séquentiel, mais peut être volé par un processus inactif • Un processus « suit » l’algorithme séquentiel (optimal) 20/52

  21. Couplage adaptatif de deux algorithmes • Un processeur occupé a une tâche et l’exécute avec un algorithme séquentiel Ps T0.Run_seq() 21/52

  22. Couplage adaptatif de deux algorithmes • Un processeur devient libre et exécute une opération d’extraction de travail chez un processeur actif sans l’interrompre. Ps T0.Run_seq() steal Pv 21/52

  23. Couplage adaptatif de deux algorithmes • Un processeur devient libre et exécute une opération d’extraction de travail chez un processeur actif (victime) sans l’interrompre. Ps T0.Run_seq() Pv T’0.Run_seq() 21/52

  24. Couplage adaptatif de deux algorithmes • La victime a fini sa tâche et préempte son voleur Ps Prempts Pv T’0.Run_seq() 21/52

  25. Couplage adaptatif de deux algorithmes • La victime effectue un saut (jump) sur le travail déjà fait par le voleur, le voleur finalise éventuellement ses calculs grâce aux résultats de la victime. Ps Ps jump T0.Run_seq() gets Pv T’0.Finalize 21/52

  26. Côté victime Run_seq() { While((ws=extract_seq())≠Ø) { local_run(ws) // Nano-loop } } Couplage adaptatif : Amortissement des synchronisations (extraction séquentielle du travail) • A la fois les processeurs victime et voleur peuvent modifier les informations sur le travail en cours de traitement • Nécessité de se synchroniser ( pour la cohérence des données) Côté victime Côté voleur workextract_seq() { lock(); //verrouiller ws = NextWorkSeq(); unlock();//déverrouiller return ws; } workextract_par() { //Micro-loop lock(); //verrouiller wv = WorkToSteal(); unlock(); //déverrouiller return wv; } - Si taille(ws) est petite => surcoût élévé. - Choix de taille (ws) : taille (ws) = profondeur (wrest); => travail arithmétique ≈ Wseq 22/52

  27. Couplage adaptatif : Amortissement des synchronisations (extraction séquentielle du travail) Exemple : transform STL : boucle avec n calculs indépendants ni=l-fi l f2 f1 alog(n1) alog(n2) Machine utilisée : AMD Opteron Opteron 875 2,2 Ghz, Compilateur gcc, option –O2 Temps[s] taille 23/52

  28. P0 P1 P2 P3 position ou se trouve l’élément Schéma adaptatif : Amortissement du surcoût arithmétique • Pour Certains d’algorithmes: • Wseq n’est pas connu d’avance • W > Wseq • Exemple: algorithme find_if qui permet de trouver le premier élément d’une séquence vérifiant un predicat • Le temps séquentiel de l’algorithme est Tseq = 2 • Le temps final de l’algorithme parallèle est le temps final du processeur ayant terminé le dernier. Donc T4 = 6 24/52

  29. n_cur elts n_cur / log(n_cur) Schéma adaptatif : Amortissement du surcoût arithmétique • Pour s’adapter : division dynamique du travail global en des étapes (Macro-loop[Danjean, Gillard, Guelton, Roch, Roche, PASCO’07]),avec synchronisation après chaque pas schéma de type algorithme de Floyd • Exemple : find_if P0, P1, P2 P0, P1, P2 P0, P1, P2 B1 B2 B3 25/52

  30. Schéma adaptatif : Amortissement du surcoût arithmétique • Exemple :find_if STL • Comparaison avec find_if parallèle MPTL [Baertschiger 06] Machine utilisée : AMD Opteron (16 cœurs); Données : doubles; Taille tableau : 106; Position élément : 105; Temps STL : 3,60 s; Temps prédicat ≈ 36μ Accélération inférieure à 1 26/52

  31. Schéma adaptatif : Amortissement du surcoût arithmétique • Exemple :find_if STL • Accélération par rapport au temps STL en fonction de la position où se trouve l’élément Machine utilisée : AMD Opteron (16 cœurs); Données : doubles; Taille tableau : 106; Temps prédicat≈ 36μ accélération Nombre de processeurs 27/52

  32. Schéma adaptatif : Analyse théorique • Trois niveaux de boucles utilisés dans l’algorithme du du schéma • nano-loop => limite le surcoût de synchronisation • micro-loop => permet le vol de travail et la préemption • macro-loop => limite le surcoût arithmétique • Analyse de la complexité de l’algorithme du schéma Théorème[chap. 6, pages 89 et 90] Si le temps parallèle d’exécution d’un algorithme sur un nombre infini de processeurs fait (1+s)Wseq opérations avec s ≥ 0, alors avec une grande probabilité, 28/52

  33. Spécification et implantation du Schéma Interface C++ sur Kaapi • Suit le schéma de l’algorithme adaptatif • Classes à instancier : WorkAdapt, JumpWork, FinalizeWork • Les fonctions à instancier : 29/52

  34. Spécification et implantation du Schéma Interface C++ sur Kaapi • Pour construire un algorithme adaptatif, l’utilisateur remplit les fonctions nécessaires Class MyWorkAdapt : public WorkAdapt { … bool extract_seq() { …. } bool extract_par() { …. } void local_run() { } void join(const WorkAdapt stolenwork) { …. } … } • Lancement du moteur adaptatif sur le travail construit void MyalgoAdapt (… ) { MyWorkAdapt my_work = new MyWorkAdapt(….); adapt::run(my_work); } 30/52

  35. w v11 v12 v2 (b) après préemption de v1 v11 v3 v12 v31 v31 v12 v12 Spécification et implantation du schéma Gestion des vols • Implémentation « sans pile » du couplage séquentiel-parallèle • Mais le parallélisme récursif sans surcoût peut rester géré par Kaapi avec sa pile • Gestion des vols: • Remplacer la pile distribuée de tâches créées par une liste distribuée de tâches volées • Intérêt : peu de vols => peu de tâches insérées dans la liste; les surcoûts de création sont aussi limités. • Gestion lors de la préemption : w v1 v2 v3 (a) avant préemption de v1 31/52

  36. Plan de la présentation • Algorithmes pour processeurs identiques: illustration sur le calcul parallèle des préfixes • Ordonnancement par vol de travail • Schéma générique adaptatif • Algorithme adaptatif pour le calcul parallèle des Préfixes • Application du schéma à la STL • Conclusion et perspectives 32/52

  37. Algorithme adaptatif du calcul parallèle des préfixes (1/7) • Calcul des préfixes • Entrée : x0, x1, …, xn • Sortie : p0, p1, ..., pn avec • Algorithme séquentiel : for(p[0]=x[0], i=1; i <= n; i++) p[i]=p[i-1]*x[i]; // n opérations • Borne inférieure sur p processeurs identiques : • Parallélisation optimale sur p processeurs identiques[Snir’86, Nicolau-Wang’96] • Ne sont pas adaptés si le temps de l’opération * varie ou si les processeurs sont à vitesse variable • Parallélisation sur un nombre non borné de processeurs[Ladner-Fischer’80, Lin-Su’02] • Peuvent être émulés par vol de travail mais effectuent plus de 2n opérations • But : trouver un algorithme adaptatif qui se comporte optimalement[EUROPAR’2006, CARI’2006] [Fich’83] 33/52

  38. Pv Ps Algorithme adaptatif du calcul parallèle des préfixes (2/7) a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 Ps p1 p2 p3 pi=a0*…ai Steal request i=a4*…*ai a4 a5 a6 Pv a5 a6 pi=a0*…ai 1ère étape de la macro-loop 9 1 2 3 4 5 6 7 8 temps 34/52

  39. Pv Ps Algorithme adaptatif du calcul parallèle des préfixes (2/7) a1 a2 a3 a6 a7 a8 a9 a10 a11 a12 a13 Ps p1 p2 p3 pi=a0*…ai a6 preempt p3 i=a4*…*ai a4 a5 Pv a5 a6 pi=a0*…ai 1ère étape de la macro-loop 9 1 2 3 4 5 6 7 8 temps 34/52

  40. Pv Ps Algorithme adaptatif du calcul parallèle des préfixes (2/7) a1 a2 a3 a6 a7 a8 a9 a10 a11 a12 a13 Ps p1 p2 p3 jump p6 p7 p8 p9 pi=a0*…ai Steal request i=a10*…*ai i=a4*…*ai a4 a5 a10 a11 a12 Pv p4 a4 p5 a11 a12 pi=a0*…ai 1ère étape de la macro-loop 2ème étape de la macro-loop 9 1 2 3 4 5 6 7 8 temps 34/52

  41. Pv Ps Algorithme adaptatif du calcul parallèle des préfixes (2/7) a1 a2 a3 a6 a7 a8 a9 a13 Ps p1 p2 p3 jump p6 p7 p8 p9 pi=a0*…ai preempt a12 p9 i=a10*…*ai a4 a5 a10 a11 a12 Pv p4 p5 a11 a12 pi=a0*…ai 1ère étape de la macro-loop 2ème étape de la macro-loop 9 1 2 3 4 5 6 7 8 temps 34/52

  42. Pv Ps Algorithme adaptatif du calcul parallèle des préfixes (2/7) a1 a2 a3 a6 a7 a8 a9 a12 a13 Ps p1 p2 p3 jump p6 p7 p8 p9 jump p12 p13 pi=a0*…ai T2 = 9 temps optimal = 9 i=a10*…*ai a4 a5 a10 a11 Pv p4 p5 p10 p11 a11 pi=a0*…ai 1ère étape de la macro-loop 2ème étape de la macro-loop 3ème étape de la macro-loop 9 1 2 3 4 5 6 7 8 temps 34/52

  43. Algorithme adaptatif du calcul parallèle des préfixes (3/7) • Analyse théorique du temps d’exécution Théorème[chap. 4, pages 53 et 54] Le temps Tp sur p processeurs du calcul n+1 préfixes par l’algorithme adaptatif vérifie Avec une grande probabilité : 35/52

  44. Algorithme adaptatif du calcul parallèle des préfixes (4/7): validation expérimentale • Taille des données : n=3.105, temps d’une opération ≈ 1ms accélération Nombre de processeurs Nombre de processeurs Machine Itanium-2 (8 cœurs) Machine AMD Opteron (16 cœurs) 36/52

  45. Algorithme adaptatif du calcul parallèle des préfixes (5/7): validation expérimentale • Taille des données : n= 108, temps d’une opération = addition de deux doubles Temps d’exécution Nombre de processeurs Machine Itanium-2 (8 cœurs) Machine AMD Opteron (16 cœurs) 37/52

  46. Algorithme adaptatif du calcul parallèle des préfixes (6/7): validation expérimentale • Taille des données : n= 104, temps d’une opération ≈ 2ms Temps [s] Nombre de processeurs [Simulateur CpuBurning /Cérin] Dix Machines de fréquences différentes AMD Opteron 38/52

  47. accélération Nombre de processeurs Algorithme adaptatif du calcul parallèle des préfixes (7/7): validation expérimentale • Taille des données : n=5120000, temps d’une opération ≈ 1ms 8 Machines distribuées AMD Opteron [accès des données paginé via mmap] 39/52

  48. Plan de la présentation • Algorithmes pour processeurs identiques: illustration sur le calcul parallèle des préfixes • Ordonnancement par vol de travail • Schéma générique adaptatif • Algorithme adaptatif pour le calcul parallèle des Préfixes • Application du schéma à la STL • Conclusion et perspectives 40/52

  49. Applications du schéma à la librairie standard C++ • La librairie STL (Standard Template Library) : • Fournit : conteneurs, algorithmes, itérateurs • Avantage : généricité • Parallélisation de la STL • PSTL (Parallel Standard Template Library) [Johnson et al 97] • STAPL (Standard Adaptive Parallel Libary) [Thomas et al 88 ] • MPTL (Multi-Processing Template Library) [Baertschiger 06 ] • MCSTL (Multi-Core Standard Template Library) [Singler et al 07 ] • Intel TBB (Thread Building Blocks) [Reinders 07] • PaSTeL [Saule & Videau, RENPAR’08] • KASTL (Kaapi Adaptive Standard Template Library) • Implémenté sur le noyau exécutif kaapi • Basé le schéma adaptatif 41/52

  50. Applications du schéma à la librairie standard C++ • Classification des algorithmes de la STL 42/52

More Related