Phd Thesis
Transcription
Phd Thesis
N d'ordre : THESE presentee a L'UNIVERSITE PARIS VI { Pierre et Marie Curie pour obtenir le titre de DOCTEUR DE L'UNIVERSITE PARIS VI specialite : INFORMATIQUE par Bertrand LE CUN Sujet de la these : Des structures de donnees paralleles soutenance prevue le 16 janvier 1996 devant le jury compose de : MM. Michel COSNARD Rapporteurs Jean-Marc Arie Claude Gerard Ivan Nelson Gautam Catherine GEIB de BRUIN GIRAULT KINDERVATER LAVALLE E MACULAN MITRA ROUCAIROL Examinateurs Directeur a mes parents, a Laurence, et Gregoire. Remerciements Je tiens avant tout a exprimer ma plus sincere gratitude a Catherine Roucairol, Professeur a l'Universite de Versailles-Saint Quentin et conseiller scientique a l'INRIA. L'inter^et qu'elle a accorde a la direction de mes recherches, les conseils avises qu'elle m'a apportes et les encouragements amicaux qu'elle m'a sans cesse prodigues se sont montres determinants. J'aimerais aussi adresser de chaleureux remerciements a Jean-Marc Geib, Professeur au Laboratoire d'Informatique fondamentale de Lille pour avoir accepte d'^etre rapporteur de ma these et pour l'inter^et qu'il a bien voulu porter a mon travail. normale superieure de Lyon, Que soit remercie le Professeur Michel Cosnard de l'Ecole qui a largement contribue a l'avancee de la recherche en algorithmique parallele, et qui fait l'honneur d'^etre rapporteur de ce travail. Que Ivan Lavallee, Professeur a l'Universite Paris 8 et conseiller scientique a l'INRIA, au sein de l'Action Paradis, trouve ici l'expression de ma plus profonde sympathie. Je suis egalement tres heureux de la presence, parmi ce jury, des Professeurs Gerard Kindervater et Arie De Bruin de l'Universite Erasmus de Rotterdam (Pays-Bas). Qu'ils en soient tres sincerement remercies. Que Gautam Mitra, Professeur a l'universte de Brunel de Londres trouve ici mes sinceres remerciements pour l'inter^et qu'il a porte a cette these. Je suis tres reconnaissant envers Claude Girault Professeur a l'Universite Paris VI et Nelson Maculan, Professeur a l'Universte Federale de Rio (Bresil) d'avoir accepte de faire partie de ce jury, qu'ils en soient ici remercies. Enn, en dehors de ce jury, je voudrais d'abord remercier l'ensemble de l'equipe qui m'a accueilli a l'INRIA: la defunte Action ParaDis ou la bonne humeur et la joie de vivre ont su rencontrer la rigueur de la science, puis l'equipe PNN du PRiSM Versailles qui a contribue a l'elaboration de BOB. Un grand merci a Laurence pour sa patience et son aide morale et a Gregoire, qui pendant la periode de redaction n'a pas oublie qu'il avait un pere. i Table des matieres Table des matieres Table des gures Introduction 1 Structures de donnees paralleles 1.1 Introduction du parallelisme dans les structures de donnees : : : : : 1.1.1 Parallelisme interne : Structures de donnees paralleles accelerees 1.1.2 Parallelisme "externe" : : : : : : : : : : : : : : : : : : : : : : 1.1.3 Les structures de donnees a execution sequentielle : : : : : : 1.1.4 Les structures de donnees a capacite parallele : : : : : : : : : 1.2 Structures de donnees a donnees paralleles : : : : : : : : : : : : : : : 1.2.1 Exemple : la liste cha^nee a donnees paralleles : : : : : : : : : 1.2.2 Proprietes et co^uts de la methode : : : : : : : : : : : : : : : 1.2.3 File d'attente de Cheng : : : : : : : : : : : : : : : : : : : : : 1.2.4 Les les de priorite : : : : : : : : : : : : : : : : : : : : : : : : 1.2.5 Les structures de recherche : : : : : : : : : : : : : : : : : : : 1.3 Structures de donnees a operations paralleles : : : : : : : : : : : : : 1.3.1 Exemple : la liste cha^nee : : : : : : : : : : : : : : : : : : : : 1.3.2 Capacite et surco^ut de la methode synchrone : : : : : : : : : 1.3.3 Capacite et surco^ut de la methode asynchrone : : : : : : : : 1.3.4 Memoire partagee : : : : : : : : : : : : : : : : : : : : : : : : 1.3.5 Memoire distribuee : : : : : : : : : : : : : : : : : : : : : : : : 1.4 Structures de donnees a operations et a donnees paralleles : : : : : : 1.4.1 Exemple : la liste cha^nee : : : : : : : : : : : : : : : : : : : : 1.4.2 Limitation et co^ut de la methode : : : : : : : : : : : : : : : : 1.4.3 Files de priorite : : : : : : : : : : : : : : : : : : : : : : : : : : 1.4.4 Les structures de recherche : : : : : : : : : : : : : : : : : : : 1.5 Conclusion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 2 Les structures a donnees paralleles 2.1 Files de priorite synchrones : : : : : : : : : : : : : : : : : : : : 2.1.1 Le 2-heap parallele : : : : : : : : : : : : : : : : : : : : : 2.1.2 La methode Fusion&Recopie : : : : : : : : : : : : : : : 2.1.3 Le 2-Heap : : : : : : : : : : : : : : : : : : : : : : : : : : 2.1.4 Le Skew-Heap parallele : : : : : : : : : : : : : : : : : : 2.1.5 Le Pairing-Heap parallele : : : : : : : : : : : : : : : : : 2.1.6 Conclusion : : : : : : : : : : : : : : : : : : : : : : : : : 2.2 Files de priorite asynchrones : : : : : : : : : : : : : : : : : : : : 2.2.1 E quilibrage de charge et machine a memoire distribuees : : : : : : : : : : : : : : : : : : : : : : : : : : : i iv 1 4 6 6 7 8 9 11 11 11 13 14 18 19 20 21 21 22 24 27 27 28 29 30 30 33 33 33 38 41 42 45 46 47 47 These Paris VI, Janvier 1996 Table des matieres ii 2.2.2 Une le de priorite "virtuelle" ou systeme : : : : : : : : : : : 49 2.3 Conclusion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 49 3 Structures de donnees a operations paralleles 3.1 Verrouillage partiel : : : : : : : : : : : : : : : : : : : : : : : : : : 3.2 Verrouillage partiel pour les structures de donnees arborescentes 3.2.1 Protocole avec verrou : : : : : : : : : : : : : : : : : : : : 3.2.2 Protocole avec marquage : : : : : : : : : : : : : : : : : : 3.3 Extension de la methode aux machines a memoire distribuee : : 3.3.1 Simulation de l'espace global, et modes operatoires : : : : 3.3.2 Gestion de la coherence : : : : : : : : : : : : : : : : : : : 3.3.3 Exemple : le Skew-Heap : : : : : : : : : : : : : : : : : : : 3.3.4 Performances de la methode : : : : : : : : : : : : : : : : : 3.4 Conclusion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 4 Les structures a donnees et operations paralleles 4.1 Performances : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 4.1.1 La capacite : : : : : : : : : : : : : : : : : : : : : : : : : : : : 4.1.2 Les co^uts : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 4.2 Quels algorithmes SDODP ? : : : : : : : : : : : : : : : : : : : : : : : 4.3 Quelles valeur de D pour un nombre d'elements xe ? : : : : : : : : 4.3.1 Inuence de l'application : : : : : : : : : : : : : : : : : : : : 4.3.2 Inuence de l'architecture de la machine : : : : : : : : : : : : 4.4 Structures SDODP ou SDOP a deux niveaux : : : : : : : : : : : : : 4.4.1 Algorithme SDDP : : : : : : : : : : : : : : : : : : : : : : : : 4.4.2 Algorithme SDODP : : : : : : : : : : : : : : : : : : : : : : : 4.5 Un algorithme SDODP dynamique pour un nombre d'elements variables : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 4.5.1 Consequence de la modication de D : : : : : : : : : : : : : : 4.5.2 Valeur de D initiale et nale, regime susant : : : : : : : : : 4.6 Conclusion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 51 52 52 52 58 59 60 61 62 67 70 71 71 71 73 74 75 75 75 76 76 76 77 77 79 80 5 E tude de structures de donnees pour l'exploration d'espace de recherche en RO/IA 82 5.1 L'algorithme de Branch and Bound : : : : : : : : : : : : : : : : : : : 5.1.1 Algorithme general de Branch and Bound : : : : : : : : : : : 5.1.2 Les les de priorites sequentielles : : : : : : : : : : : : : : : : 5.1.3 Files de priorites SDOP : : : : : : : : : : : : : : : : : : : : : 5.1.4 Experimentations : Simulation de Branch and Bound : : : : : 5.1.5 Experimentations : Le probleme de l'aectation quadratique : 5.2 L'algorithme A* : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 5.2.1 Structures de donnees pour l'algorithme : : : : : : : : : : : : 5.2.2 Experimentations : : : : : : : : : : : : : : : : : : : : : : : : : 82 82 85 86 89 92 95 96 99 6 BOB : une bibliotheque d'aide au developpement d'applications utilisant la methode Branch and Bound 103 6.1 Motivations : : : : : : : : : : : : : : : : : : : : : : : 6.2 Principe de fonctionnement de la bibliotheque : : : : 6.2.1 Programme Branch and Bound : : : : : : : : 6.2.2 Le parallelisme : : : : : : : : : : : : : : : : : 6.2.3 Les composantes critiques d'une application : 6.3 Structure conceptuelle de la bibliotheque : : : : : : : 6.4 Types et fonctions des applications : : : : : : : : : : 6.4.1 Les types et fonctions denis par l'utilisateur : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 103 105 105 106 106 108 109 109 These Paris VI, Janvier 1996 Table des matieres iii 6.4.2 Les types, variables et fonctions fournis par la bibliotheque : 110 6.5 Moniteur : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 111 6.5.1 Activite des processus : : : : : : : : : : : : : : : : : : : : : : 112 6.5.2 Etat des les de priorite locales ou partagees : : : : : : : : : 113 6.6 Architecture de la Librairie : : : : : : : : : : : : : : : : : : : : : : : 113 6.6.1 Organisation des repertoires : : : : : : : : : : : : : : : : : : : 113 6.6.2 Le repertoire Bob : : : : : : : : : : : : : : : : : : : : : : : : : 113 6.6.3 Les repertoires d'architecture : ArchSEQ, ArchSHARED, ArchDISTRIB 114 6.6.4 La portabilite de la bibliotheque : : : : : : : : : : : : : : : : 114 6.6.5 La compilation et l'execution : : : : : : : : : : : : : : : : : : 115 6.7 Le developpement d'une application : : : : : : : : : : : : : : : : : : 116 6.7.1 Le chier d'ent^ete typedef.h : : : : : : : : : : : : : : : : : : 116 6.7.2 Le(s) chier(s) source(s) : : : : : : : : : : : : : : : : : : : : : 117 6.7.3 Le chier makefile : : : : : : : : : : : : : : : : : : : : : : : 118 6.8 Conclusion et perspectives : : : : : : : : : : : : : : : : : : : : : : : : 118 6.8.1 Developpements a venir : : : : : : : : : : : : : : : : : : : : : 118 6.8.2 Fusion avec une bibliotheque de metaheuristiques : : : : : : : 118 6.8.3 Bibliotheque pour parcours d'espace de recherche : : : : : : : 119 6.8.4 Diusion : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 120 7 Conclusion A Des structures de donnees sequentielles A.1 Les structures de recherche : : : : : : : : : : A.1.1 Les listes : : : : : : : : : : : : : : : : A.1.2 Les arbres binaires : : : : : : : : : : : A.1.3 Les arbres n-aires : : : : : : : : : : : : A.2 Les les de priorite : : : : : : : : : : : : : : : A.2.1 Les tas : : : : : : : : : : : : : : : : : : A.2.2 Les structures speciques : : : : : : : A.2.3 Les structures de recherche modiees : Bibliographie : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 121 124 125 125 125 129 131 131 140 142 146 These Paris VI, Janvier 1996 iv Table des gures 1.1 Interpretation de la parallelisation d'une application du point de vue de la structure de donnees : : : : : : : : : : : : : : : : : : : : : : : : 1.2 Parallelisation par l'approche SDDP : : : : : : : : : : : : : : : : : : 1.3 Exemple d'execution pour une le d'attente parallele. : : : : : : : : 1.4 Parallelisation par l'approche SDOP : : : : : : : : : : : : : : : : : : 1.5 Repartition de l'arbre de recherche : : : : : : : : : : : : : : : : : : : 1.6 Parallelisation par l'approche SDODP : : : : : : : : : : : : : : : : : 1.7 File de priorite de Fan et Cheng : : : : : : : : : : : : : : : : : : : : 7 11 13 20 25 27 29 2.1 2.2 2.3 2.4 2.5 2.6 Exemple de tas parallele : : : : : : : : : : : : : : : : : : : : : : : : : Exemple de deux oe d'insertion dans le tas parallele : : : : : : : : : Exemple d'une oe de parcours d'une suppression : : : : : : : : : : : Exemple d'une oe d'insertion : : : : : : : : : : : : : : : : : : : : : : Exemple d'une oe de suppression : : : : : : : : : : : : : : : : : : : : Exemple d'une operation elementaire de fusion de deux Skew-Heaps en parallele : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 34 35 37 42 43 44 3.1 3.2 3.3 3.4 3.5 Exemple de fen^etre pour le schema 1. : : : : : : : : : : : : : : : : : Exemple de fen^etre pour le schema 2 : : : : : : : : : : : : : : : : : Exemple de repartition de la structure : : : : : : : : : : : : : : : : Exemple d'insertion dans un Skew-Heap en mode Gestion de cache Exemple d'insertion sur un Skew-Heap en mode acces a distance : : : : : : 54 57 60 64 66 4.1 4.2 4.3 4.4 Parallelisation par l'approche SDODP : : : : : : : : Structure SDODP par deux SDOP : : : : : : : : : : Structure SDODP par deux SDOP : : : : : : : : : : Passage de D a 2D sous-structures, puis de 2D a D. : : : : 73 77 78 79 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 5.1 Exemple d'arbre de GBB : : : : : : : : : : : : : : : : : : : : : : : : 84 5.2 Test de les de priorite sequentielles sur un Sparc. BInf= 100 et MaxIncr= 150. : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 90 5.3 SIM : Comparaison verrou-marquage sur une Sequent Balance : : : : 91 5.4 SIM : Comparaison verrou-marquage-priorite sur une Ksr1 : : : : : : 91 5.5 SIM : Comparaison de toutes les fp SDOP, sur Sequent Balance : : : 91 5.6 SIM : Comparaison de toutes les fp SDOP, sur la KSR1 : : : : : : : 92 5.7 SIM : Comparaison de fp SDDP, sur la KSR1 : : : : : : : : : : : : : 92 5.8 QAP: Test de plusieurs les de priorite SDOP (KSR1, Nugent15). : 94 5.9 QAP: Test des strategies d'equilibrage de charge (Skew-Heap,Ksr1,Nugent12). 94 5.10 La structure combinee le de priorite+structure de recherche. : : : : 97 5.11 Taquin: Resultats en secondes de l'algorithme SDOP sur une Sequent Balance 8000. : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 100 5.12 Taquin: Resultats en secondes de l'algorithme SDOP sur une KSR1. 101 These Paris VI, Janvier 1996 Table des gures v 5.13 Taquin: Accelerations sur la KSR1. : : : : : : : : : : : : : : : : : : : 101 6.1 6.2 6.3 6.4 Vue d'un B&B parallele. : : : : : : Structure fonctionnelle de BOB. : Synoptique des fonctions de BOB. Schema des repertoires. : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : A.1 Les dierentes rotations (a) ZIG, (b) ZIG-ZIG, (c) ZIG-ZAG. Les cas symetriques ont ete omis. : : : : : : : : : : : : : : : : : : : : : : : : A.2 La construction nale de l'arbre dans l'operation de Splay. Le nud x contient la valeur recherchee. : : : : : : : : : : : : : : : : : : : : : A.3 ZIG-ZIG modie du Semi-Splay. Le cas symetrique est omis. : : : : : A.4 (a)!(b) Insertion (7,2) : : : : : : : : : : : : : : : : : : : : : : : : : : A.5 D-Heap 2 Fils : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : A.6 D-Heap 3 Fils : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : A.7 D-Heap 4 Fils : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : A.8 Leftist Heap : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : A.9 Skew-Heap : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : A.10 Pairing Heap : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : A.11 Semi-Splay Tree : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : A.12 Simple-Semi-Splay Tree : : : : : : : : : : : : : : : : : : : : : : : : : A.13 Single-Semi-Splay Tree : : : : : : : : : : : : : : : : : : : : : : : : : : A.14 Single-Simple-Semi-Splay Tree : : : : : : : : : : : : : : : : : : : : : : 107 109 112 113 126 126 127 128 134 134 135 136 138 140 143 143 144 145 These Paris VI, Janvier 1996 1 Introduction Pour faire face a la demande toujours accrue en puissance de calcul d'applications traitant des problemes de plus en plus grands et complexes, le parallelisme s'est revele un outil puissant. Son introduction, si elle a deja ete etudiee dans des methodes et algorithmes, de traitement des applications, n'a souvent ete consideree que comme un sujet de second plan dans les structures de donnees. Or, une application n'est qu'un traitement particulier sur des donnees, et au cur de la parallelisation de l'application, se trouve l'etude de structures de donnees adaptees a l'environnement parallele. Les performances de la parallelisation vont largement dependre des algorithmes gerant l'acces aux donnees, assurant la coherence de la structure. C'est pourquoi, nous avons choisi de nous interesser a l'introduction du parallelisme dans les structures de donnees. Nous proposons une conception unitaire de la structure de donnees utilisee par la parallelisation d'une application. Elle ne prend pas en compte directement l'architecture de la machine parallele utilisee. Une application utilisant en sequentiel une structure de donnees utilise en parallele, une structure de donnees parallele, qui en est une version parallelisee. Les dierences entre structures de donnees paralleles vont donc provenir de la facon dont est envisagee leur parallelisation. Trois grandes familles de structures peuvent ^etre denies. Les structures accelerees correspondent a une parallelisation "interne", chaque operation est acceleree par l'utilisation de plusieurs processeurs. Les structures a execution sequentielle orent la possibilite a plusieurs processeurs d'eectuer des operations, mais a un instant donne une seule operation est executee par un processeur. Les structures a capacite parallele: acceptent l'execution simultanee de plusieurs operations, eectuees par plusieurs processeurs. Cette derniere famille de structures la plus souvent utilisee peut a son tour, ^etre classee en dierentes approches suivant la facon dont sont realisees les executions simultanees. Les structures a donnees paralleles denotent des structures paralleles composees de plusieurs sous-structures sur chacune desquelles seront eectuees les operations. Les structures a operations paralleles acceptent des operations concurrentes sur une unique representation de la structure, Les structures a donnees et operations paralleles sont les structures qui combinent les deux approches precedentes, These Paris VI, Janvier 1996 Introduction 2 Un autre avantage de cette vision uniee de la structure de donnees parallele, quelle que soit l'architecture de la machine ou sera implante l'algorithme, est d'en proposer une interface identique en sequentiel ou en parallele. Les operations, ou methodes, auront les m^emes noms pour gerer l'objet "structure de donnees". Seules en fait vont changer les implantations des operations et des donnees. Les fonctions de la "structure de donnees parallele globale" peuvent donc ^etre identiees et ont servi a constituer une bibliotheque dont l'emploidegagera l'utilisateur, de la gestion du parallelisme. C'est la une retombee importante de cette vision globale de "structure de donnees paralleles". La notion de "structure de donnees globale" qui a preside a nos travaux, induit egalement le plan de leur presentation. Le chapitre 1 commence par une denition de la notion de structure de donnees parallele, et indique les dierentes facons de faire entrer du parallelisme dans une structure de donnees. Les trois familles, les structures de donnees accelerees, celles a execution sequentielle, et celles a capacite parallele, sont illustrees et analysees. Les structures a capacite parallele regroupant les trois approches, les structures a donnees paralleles, celles a operations paralleles, et enn celles a operations et donnees paralleles, sont illustrees par des exemples de structures de listes, et evaluees par rapport aux co^uts mis en jeu et a un nouveau parametre introduit, "la capacite". Les trois chapitres suivants (2, 3, 4) sont consacres a chacune des trois approches de parallelisme pour les les de priorite. Les les de priorite sont les structures les plus employees dans les methodes utilisees pour notre champ d'applications privilegie, celui des problemes d'optimisation. En eet, la plupart des algorithmes de parcours d'espace de recherche comme le Branch and Bound ou A* se servent de telles structures. Le chapitre 2 etudie plus particulierement l'approche a donnees paralleles. Nous y proposons une methode originale dite de fusion&recopie dans le cas des les de priorite representees par des tas. Cette methode impliquant une execution synchrone des operations, resout strictement les problemes d'equilibrage de charge et de semantique de l'operation de suppression. Puis, nous discutons brievement de l'inuence de notre conception de structure de donnees globale sur les strategies d'equilibrage de charge sur machine a memoire distribuee. Le chapitre 3 s'interesse aux structures de donnees a operations paralleles. Il elabore une methode d'acces aux les de priorite arborescentes, reduisant les co^uts dus aux primitives d'exclusion mutuelle ou aux envois de messages, suivant qu'il s'agit d'une machine a memoire partagee ou distribuee. Au chapitre 4, l'inter^et de l'approche a donnees et operations paralleles pour les les de priorite est discute. Le chapitre 5 teste experimentalement sur machine a memoire physiquement ou virtuellement partagee, plusieurs de ces structures de donnees paralleles, dans le cadre de la resolution de problemes d'optimisation combinatoire diciles par des methodes Branch and Bound ou A*. Au chapitre 6, la notion de structure de donnees parallele globale est la notion cle utilisee pour la construction d'une bibliotheque d'aide au developpement de B&B : BOB. Elle permet d'avoir une gestion uniee de la structure de donnees au travers de l'utilisation de fonctions en sequentiel et en parallele. La gestion du parallelisme These Paris VI, Janvier 1996 Introduction 3 n'est ainsi plus prise en compte par l'utilisateur. Le parallelisme devient en quelque sorte "transparent" pour l'utilisateur. Ce dernier peut benecier de ses avantages sans avoir a se soucier de ses "contraintes", en se contentant de faire appel aux fonctions de la bibliotheque. Le chapitre 7, enn, degage les extensions possibles de la bibliotheque et les autres travaux que peuvent susciter notre vision et notre classement des structures de donnees paralleles. These Paris VI, Janvier 1996 4 1 Structures de donnees paralleles Chapitre Ce chapitre presente, classe et compare les dierentes approches de parallelisation des structures de donnees de la litterature. Ce classement repose sur une conception de la parallelisation d'une application du point de vue des structures qu'elle utilise. Cette approche permet de reporter tous les problemes de gestion du parallelisme dans la gestion de la structure de donnees dite parallele. Ainsi, nous proposons trois grandes familles de structures de donnees paralleles : celles a execution sequentielle, les "accelerees", et enn celles a capacite parallele. Cette derniere famille represente la plus grande partie des structures proposees dans la litterature. Elle peut ^etre subdivisee en structures a donnees paralleles, a operations paralleles et enn a operations et donnees paralleles. Nous comparons et illustrons ces types de structures de donnees paralleles, en degageant les problemes generes. En sequentiel, une application utilise une ou plusieurs structures de donnees pour stocker et acceder aux informations. Ces structures de donnees peuvent ^etre simples, comme les variables, les tableaux, les enregistrements, mais aussi tres complexes comme les structures de recherches, les les de priorites, etc. Convention: Dans le terme de structure de donnees (SD), nous englobons la representation memoire des donnees et les operations qui peuvent ^etre eectuees sur cette representation. Pour une simple variable, une operation peut donc ^etre la lecture, l'ecriture ou le test sur un petit bloc memoire. Ces operations sont simples a mettre en uvre et a utiliser. Leur complexite est constante en temps et en espace. En revanche, si la SD est complexe, sa representation est une composition de structures simples appelees elements. Une operation sur une structure complexe engendre donc un parcours de la memoire selon la representation, avec eventuellement des modications de cette representation. La complexite des operations depend alors de la taille et de la forme de la representation. Il existe beaucoup de categories de SD complexes en sequentiel. Elles peuvent ^etre classees selon les types d'operations qu'elles supportent; un sous-classement These Paris VI, Janvier 1996 1 : Structures de donnees paralleles 5 peut ^etre obtenu selon leur representation en memoire. Nous citons ci-dessous quelques exemples de telles structures. Les structures de recherche gerent des elements composes d'une clef et d'une information. { les operations portent sur la clef pour : 1. rechercher un element, 2. inserer un element, 3. supprimer un element. { les representations classiques sont : 1. les listes (simplement cha^nees [AhHU74], doublement cha^nees [AhHU74], les Skip-list [Pugh90], ...), 2. les arbres binaires (AVL [AhHU74], Red-Black [SlTa83], Splay [TaSl85], Random search tree ou Treap [Crei85, ArSe89], ...), 3. les arbres n-aires (les arbres 2-3-, les B-arbres, les B+-arbres, ...), 4. les tables de hachage, etc. Les les de priorites gerent des elements composes d'une priorite et d'une information. { les operations sont les suivantes : 1. insertion d'un element de priorite quelconque, 2. suppression de l'element ayant la plus forte priorite, 3. suppression de tous les elements de priorite inferieure a une valeur (operation specique a certaines applications). { les representations possibles sont : 1. les tas (d-Heap ou implicit-Heap[Will64, AhHU74], leftist-Heap [AhHU74], Skew-Heap [SlTa86], Pairing-Heap [StVi87], binomial-queue [Brow78, Vuil78], etc), 2. toutes les structures de recherche detournees de leurs fonctions initiales, 3. les structures speciques (Funnel-Tree [MaRo90], Funnel-Table [MaRo90], Calendar-queue [Brow88]), etc. Nous avons reporte en annexe A, la presentation d'un certain nombre de structures de donnees complexes. Si on considere une application comme un traitement iteratif sur des donnees, la procedure de traitement obtient des donnees par des demandes d'operations a la structure, puis les modie ou les combine. Les donnees nouvellement creees peuvent ^etre reinserees dans la SD. Une structure de donnees complexe n'a de raison d'^etre que par l'application qui l'utilise. Elle ne represente pas une application a elle seule, mais elle est au service d'une application. Le contexte d'execution de la SD (valeur possible de clefs pour les structures de recherche, valeurs possibles des priorites pour les les de priorite, nombre et ordres des dierentes operations, nombre d'elements) est donc deni par le comportement du traitement. Ce dernier est tres important car il va orienter le choix vers telle ou telle SD orant les operations les mieux adaptees. Dans la suite, nous ne nous interessons qu'aux structures de donnees complexes. Par simplication, nous employons donc le terme de structures de donnees (SD) pour des structures de donnees complexes. These Paris VI, Janvier 1996 1.1. Introduction du parallelisme dans les structures de donnees 6 1.1 Introduction du parallelisme dans les structures de donnees Deux types de parallelisations du couple traitement+structure sont envisageables. Une premiere consiste a paralleliser le traitement et la structure en "interne". Chaque traitement et chaque operation sont executes par plusieurs processus cooperants. Une deuxieme dite "externe" consiste a modier le couple (traitement, structure) en (P traitements, structure). Plusieurs procedures de traitement sont executees par plusieurs processus, chacune d'elles travaille sur des donnees dierentes provenant d'une structure de donnees globales. 1.1.1 Parallelisme interne : Structures de donnees paralleles accelerees Du point de vue de la structure, ce modele entra^ne une acceleration de chacune des operations. Il conduit a la denition de : structures de donnees paralleles dites accelerees (SDPA). Denition 1 Une structure de donnees parallele acceleree est une structure de donnees (representation + operations) dont chaque operation est acceleree par l'utilisation de plusieurs processus. Ce type de parallelisation denit generalement une parallelisation a grain n. Les processus executent une procedure tres courte entre deux synchronisations ou communications. Pinotti et Pucci [PiPu92] ont presente une le de priorite parallele de ce type, le Min-Path-heap. Cette structure est une version modiee de la plus classique des les de priorite, le d-heap [Will64] (voir le paragrapheA.2). Le Min-Path-Heap a pour objet d'assurer la connaissance a priori du chemin que doivent prendre les operations d'insertion et de suppression d'un element dans une representation de d-Heap. L'algorithme des operations se reduit a l'insertion d'un element dans un "tableau" de longueur logn ou n est le nombre d'elements stockes. Cette insertion peut ^etre faite par un algorithme ecace (complexite en log logn avec log n processus) ou optimal (complexite en loglog n avec logloglogn n processus). Chaque operation doit maintenir la connaissance a priori du chemin que doit prendre l'operation suivante. La complexite d'une operation devient donc O( logp n + log logn) [PiPu92]. Cette complexite a des performances inferieures a celles des SDP que nous presentons dans la suite. D'autres parallelisations de ce type ont ete proposees pour le HeapSort [Will64]. Les travaux de Olariu et Wen [OlWe91], Rao et Zhang [RaZh91], Pinotti et Pucci [PiPu92] et Dietz [Diet92] concernent alors la construction du d-heap en parallele. L'approche SDPA n'est applicable qu'a tres peu de SD, car, bien souvent, la suite d'operations elementaires composant une operation doit ^etre executee sequentiellement . Pour une structure de recherche sous forme d'arbre par exemple, le chemin n'est pas connu a l'avance mais est construit tout au long du parcours. hh ii En revanche, plusieurs parallelisations d'application ont ete proposees sur ce modele. Par exemple, Pekny et Miller [PeMi92], Dehne Ferreira et Rau-Chaplin [DeFR90], Kindervater et Trienekens [KiTr88] en ont propose pour le Branch and Bound. Trienekens et de Bruin [TrBr92] ont qualie ce modele de parallelisation d'algorithme de Branch and Bound, de parallelisme de bas niveau. These Paris VI, Janvier 1996 1.1. Introduction du parallelisme dans les structures de donnees 7 1.1.2 Parallelisme "externe" Une seconde approche consiste a executer P procedures de traitement de l'application sur P processus, chacun d'eux accedant a une SD "globale". Cela signie que chacun des P processus executant la procedure de traitement, realise ses operations sur une seule SD (gure 1.1). Cette approche est actuellement la plus utilisee. La raison majeure reside dans le modele de parallelisme sur lequel sont fondees les machines paralleles commerciales actuelles. Ce modele etant dit a gros grain, cette seconde approche y est plus adaptee. Cette approche conduit a la denition suivante, du point de vue de la SD. Denition 2 Une structure de donnees parallele (SDP) est une structure de donnees (representation + operations) supportant des operations pouvant ^etre demandees par plusieurs processus qui auront potentiellement acces a tout element de la structure. Structure de données (SD) Demandes et retours d’opérations Procédure de traitement PARALLELISATION Structure de données GLOBALE PARALLELE (SDP) Demandes et retours d’opérations Procédure de traitement Procédure de traitement ... Procédure de traitement Figure 1.1 : Interpretation de la parallelisation d'une application du point de vue de la structure de donnees Le parallelisme n'a souvent ete inclus dans les SD qu'indirectement. Paralleliser une application, revient a introduire du parallelisme dans les SD qu'elle utilise. Par exemple, l'etude de la parallelisation d'un systeme de gestion de base de donnees (SGBD) a ete a l'origine de celle des structures de recherche. La parallelisation des algorithmes de recherche arborescente et de simulation d'evenements discrets a conduit a l'introduction du parallelisme dans les les de priorite. De m^eme qu'en sequentiel, ou le choix d'une SD est deni par le contexte d'execution, en parallele, le comportement de l'application denit un contexte d'execution de la SDP, et donc denit aussi des choix de parallelisation. These Paris VI, Janvier 1996 1.1. Introduction du parallelisme dans les structures de donnees 8 La performance d'une parallelisation est generalement exprimee en terme d'acceleration (temps sequentiel divise par le temps parallele avec P processeurs [CoTr93]). Pour eectuer cette etude du point de vue de la SD, nous exprimons le temps pris par l'execution d'une application par le temps pris par l'execution des procedures de traitement, plus le temps pris par l'execution des dierentes operations sur la SD. Soit Tseq le temps d'execution de l'application sequentielle : t + Ts ; Tseq = Tseq seq t est le temps d'execution des traitements et ou T s est le temps d'execution ou Tseq seq des nop operations sur la SD executees par l'application. Le temps Tpara d'execution de l'application parallelisee sur P processeurs est t + Ts : Tpara = Tpara para Dans la mesure ou notre etude porte sur les SDP, nous nous placons dans le cas le plus favorable pour la parallelisation de la procedure de traitement: t t = Tseq : Tpara P 1.1.3 Les structures de donnees a execution sequentielle Rendre parallele une structure est chose aisee sur les machines MIMD actuelles. Si la memoire de la machine parallele est distribuee, il sut de specialiser un processus dans la gestion de la structure. Les P processus executant les traitements demandent au processus specialise d'executer leurs operations pour eux. En revanche, si la machine dispose d'une memoire partagee, la SDP reside en memoire commune; chacun des P processus realise ses operations en section critique en utilisant une primitive d'exclusion mutuelle. Cette forme de parallelisation peut ^etre vue comme un serveur d'operations sur une SD sequentielle. Nous appelons le resultat de cette forme de parallelisation, structure de donnees paralleles a execution sequentielle (SDPES), Denition 3 Une structure de donnees parallele a execution sequentielle est une structure de donnees (representation + operations) dont une seule operation peut ^etre executee a la fois sur la representation, par un seul processeur. Les operations des SDPES sont donc executees sequentiellement. Il n'y a donc s est aucun parallelisme possible du point de vue de la structure. Dans ce cas, Tpara exprime par : s = Ts + Ts ; Tpara seq gp s ou Tgp represente le temps d'execution de l'algorithme de gestion du parallelisme de la structure. Nous pouvons remarquer que Tgps est une fonction dependante du nombre d'operations executes (nop ). En distribue, le co^ut Tgps represente le temps pris par tous les envois de message; en memoire partagee, il represente le temps d'execution des primitives d'exclusion mutuelle. Si le comportement de l'application parallele denit un faible taux d'utilisation de la SD par rapport aux calculs locaux, le temps total pris par les operations sur la SDP est negligeable par rapport a la somme des calculs locaux : a >> T s Tseq seq These Paris VI, Janvier 1996 1.1. Introduction du parallelisme dans les structures de donnees 9 et donc, cet etat de fait est aussi vrai en parallele: a >> T s : Tpara para D'ou l'expression du temps d'execution en parallele: Ta Tpara ' Pseq ; et donc Tpara ' TPseq : Cette forme de SDP sut donc, pour ce comportement, a obtenir une acceleration lineaire. Dans le cadre des les de priorite, l'inter^et de cette methode est d'assurer que chaque processus obtienne l'element de plus forte priorite lors des operations de suppression. Ainsi, Roucairol [Rouc87a, Rouc87b], Plateau and Roucairol [PlRo89], Quinn [Quin90], McKeown [McKe91], et Gendron et Crainic [GeCr93], Kindervater [KiTr88, Kind94], Eckstein [Eck94a, Eck94b], Authie [AGFR+95] ont propose des gestions de SDP sur ce modele, dans le contexte d'algorithmes de Branch and Bound. Malheureusement, les SDPES ne repondent pas aux comportements de la plupart des applications paralleles. Car si le temps d'execution des operations de la structure n'est plus negligeable par rapport a la somme des calculs locaux, les processus demandeur sont la plupart de temps arr^etes dans l'attente d'elements. Authie [AGFR+95] a propose une solution pour reduire le surco^ut. Lors d'une suppression, la structure n'envoie pas qu'un seul element au processus demandeur (client) mais plusieurs. Le nombre de communications s'en trouve donc reduit. Un probleme appara^t alors : les elements etant envoyes en groupe, a un instant donne un processus client travaille sur des elements qui ne sont s^urement plus ceux de plus forte priorite. Cette solution bien que creant un plus faible surco^ut n'assure plus la semantique de l'operation de suppression des les de priorite (voir le paragraphe A.2). En distribue, la SDPES etant geree par un seul processeur, sa taille est limitee par les m^emes contraintes qu'en sequentiel. Elle ne prote pas de l'ensemble des memoires disponibles sur chacun des processeurs de la machine. Sa taille peut ^etre augmentee, si la SDP est distribuee sur tous les processeurs. Des que l'application necessite un grand nombre d'operations, ou des que le nombre de processus clients est trop important, les operations sur la SDP doivent pouvoir ^etre executees en parallele. 1.1.4 Les structures de donnees a capacite parallele Les SDPES ne pouvant pas supporter toutes les demandes d'operations en un temps raisonnable, les operations peuvent ^etre parallelisees entre elles. A un instant donne, plusieurs operations sont realisees par plusieurs processus sur la SDP. Ce nombre d'operations simultanees denit la capacite de la SDP. Denition 4 La capacite C d'une structure de donnees parallele designe le nombre maximal d'operations pouvant ^etre en cours de realisation a un instant donne. L'acceleration du point de vue de la structure est exprimee par : s s = Tseq : Tpara C These Paris VI, Janvier 1996 1.1. Introduction du parallelisme dans les structures de donnees 10 s doit ^etre : Or, pour obtenir une acceleration optimale, Tpara s s = Tseq : Tpara P Nous introduisons donc la notion de capacite optimale. Denition 5 La capacite C d'une structure est dite optimale, lorsque C processus sont utilises pour l'obtenir. Pour pouvoir comparer les dierentes structures de donnees, nous exprimons s sous la forme: Tpara s s = Tops + T s Tpara gp C s est le temps pris par l'execution de la partie sequentielle des nop operations ou Tops s et ou Tgp est le surco^ut engendre par la gestion du parallelisme. Dans la suite, nous distinguons les parallelisations de SDCP par leur capacite C, par le co^ut qu'elles entra^nent en gerant le parallelisme (Tgps ), et par la complexite des operations qu'elles supportent. Nous nous proposons de caracteriser les dierentes SDCP suivant la facon dont le parallelisme y est introduit. Nous pouvons ainsi classer plus clairement les dierentes SDP proposees dans la litterature. Une structure de donnees etant denie d'une part par sa representation et d'autre part par les operations qu'il est possible d'y eectuer, le parallelisme peut ^etre introduit dans ses deux composantes : sa representation memoire et ses operations. La premiere approche consiste a paralleliser la representation. La SDP est composee de plusieurs representations. Chacune d'elles a une capacite de un. Denition 6 Les structures de donnees a donnees paralleles (SDDP), designent les structures de donnees, pour lesquelles la parallelisation porte sur la representation de la structure. La deuxieme approche consiste a paralleliser les operations et donc le parcours de la structure, la representation restant conceptuellement la m^eme qu'en sequentiel. Denition 7 Les structures de donnees a operations paralleles (SDOP) designent les structures pour lesquelles la parallelisation porte sur les operations. Ces deux approches ne sont pas incompatibles entre elles. Comme nous le verrons par la suite, certaines parallelisations combinent les deux, d'ou leur nom. Denition 8 Les structures de donnees a operations et a donnees paralleles (SDODP) designent les structures pour lesquelles la parallelisation porte sur les operations et sur la representation de la structure. Dans les algorithmes realisant les operations, ces trois approches donnent lieu a des algorithmes speciques de gestion de l'environnement parallele. Le temps d'execution de ces algorithmes sera pris en compte dans le terme Tgps . Les trois paragraphes suivants expliquent en detail les trois approches que nous venons de denir. Nous illustrons chacune d'elles en presentant les parallelisations d'une structure de recherche representee par une liste cha^nee. Nous degageons les problemes speciques aux methodes de parallelisation, que devraient gerer les algorithmes paralleles sur les operations. Finalement, nous illustrons ce classement par des exemples de SDP tirees de la litterature. These Paris VI, Janvier 1996 1.2. Structures de donnees a donnees paralleles 11 1.2 Structures de donnees a donnees paralleles Considerons une SD sequentielle notee S, de representation Rs. Paralleliser S par l'approche SDDP, consiste a creer D representations Rs distinctes. Les n elements de la structure sequentielle originelle sont repartis sur les D representations Rs. Structure séquentielle. S Parallélisation SDDP 1 2 D D structures S Figure 1.2 : Parallelisation par l'approche SDDP 1.2.1 Exemple : la liste cha^nee a donnees paralleles Dans le contexte d'une structure de recherche sous forme de liste cha^nee, cette approche consiste a decouper l'intervalle de recherche en D sous-intervalles. Une liste cha^nee est associee a chacun d'eux. Les D listes sont notees Li , i 2 0::D ? 1. Un processus qui desire realiser une operation d'insertion, de suppression ou de recherche d'un element de clef v, accede a la liste Li susceptible de contenir v. 1.2.2 Proprietes et co^uts de la methode Theoriquement, la capacite C de la structure parallele est egale a D, car D operations peuvent ^etre executees en parallele (1 operation par Rs). Toutefois, si n est inferieur a D et si, par hypothese, les n elements sont idealement repartis, la capacite de la structure ne pourra ^etre que de n. Propriete 1 La capacite d'une SDDP est telle que C = min(n; D): Chacune des D Rs doit contenir le m^eme nombre d'elements, pour assurer : un nombre minimal de structures vides si n D, un equilibre du temps necessaire a la realisation d'une operation, un equilibre du nombre d'operations par representation. These Paris VI, Janvier 1996 1.2. Structures de donnees a donnees paralleles 12 En eet, dans le cas ideal, chaque Rs contient Dn elements. Si la complexite d'une des operations depend du nombre d'elements contenus dans la structure, les operations sur une des sous-structures ont un temps d'execution reduit par rapport au cas sequentiel. Propriete 2 Si la complexite d'une operation sur une structure sequentielle S est O(f(n)), la complexite d'une operation sur la structure S parallelisee par l'approche SDDP sera egale a O(f( Dn )). Si les Rs sont parfaitement bien equilibrees, il s'en suit que : s Ts : Tops seq Ce qui tendrait a prouver que cette forme de parallelisation aboutit a une acceleration surlineaire. Le probleme est que toute cette etude se fonde sur le fait que chacune des Rs contient le m^eme nombre d'elements. Or les operations de modication tendent a desequilibrer la quantite d'elements entre les D Rs . L'algorithme de gestion du parallelisme doit donc inclure une strategie d'equilibrage de charge, pour assurer ce bon equilibre. Dowaji dans [Dowa95] a exprime la necessite d'une strategie d'equilibrage de charge en introduisant la notion de "puissance de calcul perdu". Si le travail detenu par chacun de processus vient a se desequilibrer, il en resulte une perte de puissance de calcul. En eet du point de vue de la SD, si un processus a une structure tres chargee par rapport aux autres, il perdra de la puissance de calcul dans la realisation des operations sur sa structure locale. L'approche SDDP implique aussi une gestion specique pour assurer la m^eme semantique des operations en parallele et en sequentiel. En eet, dans l'exemple de parallelisation des listes cha^nees presente ci-dessus, l'equilibrage de charge entra^ne des modications de la taille des intervalles. Les frontieres entre chaque liste bougent donc au cours du temps. Une strategie permettant d'informer les processus clients d'operations, des mises a jours de ces frontieres est alors necessaire. En ce qui concerne les les de priorite, si l'operation de suppression concerne une seule des Rs representations, on ne peut ^etre s^ur que l'element obtenu soit celui ayant la plus forte priorite de la le de priorite globale. La semantique de l'operation de suppression sequentielle n'est plus respectee. Si le comportement d'une application demande la m^eme semantique sur l'operation de suppression en parallele et en sequentiel, il faut donc utiliser une strategie permettant de garder la connaissance globale de la le contenant l'element de plus forte priorite. Il est a noter ici que, m^eme si la FP respecte la semantique de l'operation de suppression, l'execution de l'application ne sera pas la m^eme qu'en sequentiel. Le modele de parallelisation entra^ne un sequencement dierent des elements supprimes, si l'algorithme de l'application consiste a generer des elements a partir d'un element supprime de la le de priorite. Lorsque nous parlons de semantique stricte de l'operation de suppression, cela ne concerne que les elements stockes dans la le de priorite globale a un instant donne. Maintenir un equilibrage parfait et assurer pour les operations paralleles la m^eme semantique qu'en sequentiel revient donc a maintenir une connaissance globale. Or, la complexite d'un algorithme maintenant une connaissance globale est une fonction dependante de D et des caracteristiques de la machine. Soit l'expression du temps parallele d'execution d'une application: s s = Tops + T s : Tpara gp C These Paris VI, Janvier 1996 1.2. Structures de donnees a donnees paralleles 13 s doit ^etre petit, plus T s doit ^etre grand Deux termes sont contradictoires. Plus Tops gp et vice versa. Il faut donc trouver le juste milieu . Beaucoup de strategies ont ete proposees dans la litterature pour resoudre les problemes d'equilibrage de charge et de connaissance globale. Nous les exposons dans la suite en dissociant celles utilisees pour les les de priorite de celles utilisees pour les structures de recherche. Pour illustrer la diculte entra^nee par la gestion de la semantique d'une operation, nous commencons par exposer la parallelisation d'une le d'attente proposee par Cheng [Chen90]. hh ii 1.2.3 File d'attente de Cheng Cette parallelisation donne un tres bon exemple de ce qu'il faut mettre en uvre pour assurer la semantique des operations. Car bien qu'en sequentiel la complexite des operations d'insertion et de suppression dans une le d'attente soit O(1), en parallele il n'en est pas de m^eme. Dans la description de Cheng [Chen90], D processus peuvent acceder a D les d'attente sequentielles simultanement par l'utilisation d'un reseau multi-couches d'interconnexion. Le reseau est compose de logD couches, chaque couche etant geree par D processus specialises. Les processus specialises sont donc au nombre de D log D. 0 0 0 0 x x x x 1 x x x x 1 x x x x x x 2 x 1 1 x 2 2 2 3 3 3 3 File avec une Valeur File sans Valeur Figure 1.3 : Exemple d'execution pour une le d'attente parallele. L'algorithme consiste a trouver un chemin dans le reseau d'un point d'acces d'un processus vers une des les sequentielles, en prenant en compte le nombre de valeurs restantes dans les les, le nombre d'insertions et le nombre de suppressions pour un ensemble donne de demandes. Le calcul est eectue par vagues successives. Les processus d'une couche travaillent sur un ensemble d'operations de facon synchrone, ils aiguillent leur demande vers un processus particulier du niveau superieur en fonction des resultats du niveau inferieur. An de garder la propriete des les d'attente, les les sont remplies et videes a tour de r^ole. Sur l'exemple de la gure 1.3, il ne reste qu'une valeur dans chacune des cinq premieres les. Nous avons ici quatre valeurs a inserer, trois d'entre elles sont These Paris VI, Janvier 1996 1.2. Structures de donnees a donnees paralleles 14 inserees dans les trois les vides du bas, la quatrieme est inseree dans la premiere le. La complexite de cette structure pour l'insertion et la suppression est O(1) avec D log D processus specialises. La structure parallele etant representee par D les d'attente, elle correspond donc tout a fait a notre modele de parallelisation SDDP. L'inter^et de cette structure est d'illustrer la problematique posee par la semantique des operations et donc celle de la connaissance globale. Si en sequentiel, la complexite des operations sur une le d'attente est O(1), en parallele, elle peut executer D operations en O(1) mais avec D log D processus. 1.2.4 Les les de priorite Comme nous l'avons dit precedemment, paralleliser une le de priorite par l'approche SDDP pose deux problemes: 1. l'equilibrage de charge, 2. la semantique de l'operation de suppression. Nous exposons les SDP en commencant par celles qui assurent en parallele une semantique stricte, puis celles assurant une semantique de plus en plus rel^achee. 1.2.4.a Structures de donnees a operations synchrones Si les sous-structures doivent ^etre parfaitement equilibrees, il est indispensable que chaque operation de modication realise un equilibrage a chacune de ses executions. Il devient donc legitime dans ce cas de considerer que les D operations sur les D sous-structures sont realisees en m^eme temps, et qu'elles cooperent de facon a garder un equilibre parfait des sous-structures. Il en decoule une execution synchrone des D operations, d'ou le nom de structures de donnees a operations synchrones. Bien souvent, m^eme s'il n'y a que D ? j (1 < j < D) operations, D processus doivent ^etre presents. Deo et Prasad [DePr92], ont presente une le de priorite parallele a operations synchrones fondee sur la structure de 2-Heap ou implicit-Heap (voir annexe A). Leur proposition est d'utiliser une structure de 2-Heap, ou chaque nud de l'arbre peut contenir D elements. Dans chacun des nuds du tas, les elements sont maintenus tries dans l'ordre decroissant des priorites. Ils ont etendu l'invariant du tas sequentiel a leur tas parallele. Denition 9 L'invariant du tas parallele est : les D elements d'un nud i ont une priorite inferieure aux D elements du nud j , pere de i. Une operation parallele est constituee de D operations synchrones, eectuees par D processus. Les D operations parcourent la structure en empruntant le m^eme chemin. A chaque etape de l'algorithme (en chacun des nuds du parcours), il y a un echange d'information entre les processus, pour garder l'invariant du tas parallele. Le chemin choisi par tous les processus permet de garder le tas parallele parfaitement equilibre. De plus, si parmi les D operations constituant une operation parallele, il y a s operations de suppression, ces s operations retournent les s elements de plus forte priorite. La semantique sequentielle de l'operation de suppression des les de priorite est donc respectee dans son sens le plus strict. L'algorithme de gestion du parallelisme realisant l'equilibrage de charge et assurant la connaissance globale est donc interne aux operations sur la structure, il est intimement lie a la representation des D sous-structures. hh ii These Paris VI, Janvier 1996 1.2. Structures de donnees a donnees paralleles 15 Cette structure est detaillee dans le chapitre 2, ou nous proposons une generalisation de la methode a toutes les les de priorite de la litterature representees par des tas. Elle correspond a notre denition de SDDP, car elle peut ^etre representee par une for^et de D 2-Heaps. La capacite de la SDP est donc de D. Le co^ut s'exprime non seulement en fonction de D mais aussi en fonction du nombre d'elements contenus dans la structure. A chaque pas de l'algorithme, chaque processus eectue un algorithme de fusion. Cet algorithme a une complexite de O(log D). Le co^ut genere pour chaque groupe de D operations est donc de : n logD: D Le maintien de la connaissance globale et de l'equilibrage parfait co^ute donc ici tres cher. 1.2.4.b Structures de donnees a operations macro-synchrones Certaines applications comme le Branch and Bound, ont un comportement particulier, qui permet de proposer une solution moins chere que le 2-Heap parallele de Deo et Prasad. En eet, les priorites des elements generes par ces applications ont des proprietes interessantes comme: beaucoup d'elements ont une priorite egale, si tout les elements de priorite v ont ete supprimes, la priorite des elements qui seront inseres par la suite, ne peut ^etre que superieure a v. Ce comportement assure une connaissance de l'evolution des valeurs de priorites des elements qui sont supprimes dans un groupe de D suppressions. hh ii Diderich et Gengler [DiGe94] ont presente une le de priorite protant de ce comportement. La cooperation n'existe que pour l'operation de suppression et que pour une valeur donnee de priorite. Un groupe de D suppressions retire D elements de priorite egale en log D avec D processeurs. La valeur de priorite choisie pour un groupe de D suppressions est deduite des valeurs precedentes de priorite. Les operations d'insertion sont asynchrones, c'est-a-dire que chaque processus insere ses elements dans sa le locale. Si strategie d'equilibrage il y a, elle ne concerne que la qualite des elements. Les elements ne sont repartis que lors d'un groupe d'operations de suppression. Le critere est la valeur de priorite des elements et non pas le nombre d'elements contenus dans chacune des les locales. Cette structure parallele respecte strictement la semantique de l'operation de suppression parallele mais neglige l'equilibrage de charge en terme de nombre d'elements. Les auteurs ont montre sur des experimentations que cette methode est adaptee au comportement d'applications telles que le Branch and Bound, car le fait d'assurer la semantique de l'operation de suppression, sut a garder un bon equilibrage. Le probleme resolu est le voyageur de commerce. 1.2.4.c Structures de donnees a operations asynchrones Dans les deux solutions precedentes, la semantique stricte de l'operation de suppression est assuree soit au prix d'un co^ut eleve soit en utilisant un comportement specique et connu de l'application. De plus, ces deux solutions necessitent une execution synchrone de groupes de D operations de suppression. Si l'application accepte un rel^achement de la semantique de l'operation de suppression, les operations peuvent s'executer de maniere asynchrone. Une strategie d'equilibrage de charge est alors mise en uvre pour equilibrer le travail entre les dierentes les. These Paris VI, Janvier 1996 1.2. Structures de donnees a donnees paralleles 16 Il faut repondre a plusieurs questions pour concevoir une strategie d'equilibrage de charge. Quelle est l'unite de charge associee a une SD locale? Quand faut-il eectuer un equilibrage de charge ? ou autrement dit quel est le critere de declenchement de la procedure d'equilibrage ? Quelle region concerne l'equilibrage? Toutes les les sans exception ou un sous-ensemble de les ? Dans une region, existe-t-il un ma^tre ? Quel est l'algorithme de repartition ? Est-il exact ou approche sur la region ? S'execute-t-il en synchrone ou en asynchrone ? Unite de charge L'unite de charge est sans nul doute le parametre le plus important dans l'elaboration d'une strategie d'equilibrage. Si la charge rattachee a une le locale n'est representee que par la quantite d'elements qu'elle contient, la semantique de l'operation de suppression n'est pas du tout respectee. En revanche, si la charge n'est representee que par la qualite des elements, la semantique de l'operation de suppression est mieux respectee mais il n'y a aucun contr^ole sur le nombre d'elements contenus dans chacune des les de priorite. L'unite de charge doit tenir compte de ces deux aspects pour s'approcher de la semantique sequentielle et pour assurer un bon equilibre de la charge. Remarquons que ces deux aspects n'impliquent qu'un calcul instantane de la charge. Dans les applications qui utilisent une le de priorite, les elements supprimes servent bien souvent a generer de nouveaux elements. La charge attachee a un element doit donc aussi contenir un travail qui pourra ^etre potentiellement eectue plus tard. Dowaji [Dowa95] a introduit la notion de potentialite de travail dans le cas particulier de l'algorithme de Branch and Bound. Les resultats de ses experimentations montrent, que d'une part les D les sont mieux equilibrees, et que d'autre part l'unite de charge etant plus precise, la procedure d'equilibrage est appelee moins souvent. Critere de declenchement Il en existe plusieurs. Un premier est de realiser un equilibrage lorsqu'une des les devient vide. Un deuxieme consiste a utiliser une strategie a double seuil : un seuil minimal et un seuil maximal. Si la charge devient inferieure (respectivement superieure) au seuil minimal (respectivement maximal), il faut soit declencher la procedure d'EC soit remettre a jour la valeur des seuils qui etait erronee. Selon le critere utilise, la procedure d'equilibrage peut ^etre debutee a l'initiative d'un processus sous-charge, ou a celle d'un processus sur-charge ou des deux. Region Si la procedure d'EC doit repartir la charge sur F les, sa complexite depend tres fortement de ce nombre F. En eet, la procedure d'EC est composee de deux phases : 1. calculer la charge moyenne sur les F les, 2. repartir les dierentes charges sur les F les. Chacune de ces deux phases impliquent des communications entre les F processus associes aux F les. Or si F est tres grand, ces deux phases representent un coup qui peut-^etre trop eleve. Le gain apporte par l'equilibrage de charge est eace par le temps d'execution de l'equilibrage de charge. Une solution est de n'executer la procedure d'EC que sur une partie de l'ensemble de D les que nous appelons region. Une region peut ^etre : These Paris VI, Janvier 1996 1.2. Structures de donnees a donnees paralleles 17 les D les, une grappe (cluster) de les, un ensemble de les connectees par des liens directs selon la topologie du reseaux d'interconnexion, Sur certaines strategies, un ma^tre est utilise pour recolter toutes les informations relatives a la charge de processus appartenant a sa region, et donc calculer la charge moyenne (phase 1). Ce ma^tre peut aussi prendre les decisions concernant l'equilibrage (phase 2). Algorithme de repartition Selon l'eloignement des dierentes les dans la region choisie, il est interessant de prendre des algorithmes de repartition exacts ou approches. En eet, si la taille et la topologie de region font que les temps de communication sont grands, l'utilisation d'un algorithme exact entra^nerait un co^ut trop important s ) serait eace par le temps pris pour realiser (Tgps ). Le gain d^u a l'equilibrage (Tops un equilibrage parfait. En revanche, si le voisinage denit des les tres rapprochees, les temps de communication sont moins importants. Le temps perdu par l'utilisation d'un algorithme exact de repartition, est compense par le gain obtenu en puissance de calcul. Benachouche dans [Bena95a, Bena95b] denit ainsi une structure hierarchique pour realiser un equilibrage ecace. Un equilibrage fort est realise dans les grappes de les, alors que l'equilibrage entre les grappes est tres rel^ache. Ceci permet une extensibilite du systeme. L'algorithme peut s'executer de facon synchrone ou asynchrone. Dans la strategie synchrone, si l'algorithme de repartition est declenche, tout les processus de la region consideree sont arr^etes en attente d'ordre de repartitions. Si la strategie est asynchrone, les processus recoivent les ordres ou decident de realiser l'equilibrage independamment des autres processus. Ils ne sont pas arr^etes tous en m^eme temps pour realiser l'algorithme de repartition. Par exemple, la structure de donnees de Authie [AGFR+95] dans sa premiere version est une SDPES. L'evolution proposee permettant de reduire les surco^uts des messages en nombre trop important, fait glisser la structure de donnees vers la classe des SDDP. Chaque esclave possedant une representation locale, les communications ma^tre-esclaves peuvent ^etre assimilees a une execution d'un equilibrage de charge tres stricte utilisant un ma^tre. Beaucoup de propositions ont ete faites, sur machine a memoire distribuee. Elles dierent par la strategie d'equilibrage de charge qui est concue Luling et Monien [LuM89, LuMR91, LuMo95], Mans [Mans92], Hajian, Hai et Mitra [HHM94], Gendron et Crainic [GeCr93], Dowaji et Roucairol [DoRo95b]. Bien que cette approche ait la plupart du temps ete utilisee dans un contexte de machines distribuees, il existe des parallelisations de cette forme sur des machines a memoire partagee. Pardalos [Pard94] a propose une parallelisation sur ce modele pour un Branch and Bound parallele. Rao et Kumar [RaKu88] ont aussi parallelise le d-Heap sous cette forme. Chacun des P processus maintient la le qui leur est associee. L'equilibrage de charge et la semantique de l'operation de suppression sont assures par un mecanisme de tableau noir (BlackBoard). A chaque operation de suppression, chacun des processus met dans le tableau noir, un element qu'il a supprime. De cette facon, les autres processus peuvent puiser dans le tableau, des elements qui sont meilleurs que ceux These Paris VI, Janvier 1996 1.2. Structures de donnees a donnees paralleles 18 contenus dans leur le. Huang [Huan91b] propose une Binomial Queue SDDP. Pour eviter les problemes de serialisation d'acces a une le de priorite n-aire (la Binomial Queue), Huang propose d'avoir une structure sans racine. Les processus accedent aleatoirement a l'un des ls de la racine virtuelle . La strategie d'equilibrage de charge utilisee est donc aleatoire. Proposer un equilibrage de charge ecace demande une connaissance approfondie de son contexte d'execution. Il faut precisement degager le comportement caracteristique de l'application qui utilise la SDP. hh ii 1.2.5 Les structures de recherche Deux domaines utilisent des structures de recherche paralleles : celui des BD avec les structures utilisees pour stocker les index ou les relations, et celui des machines dictionnaires. M^eme si le but recherche est le m^eme dans ces deux domaines c'est-a-dire paralleliser des structures de recherche, les hypotheses posees et par suite les contraintes retenues ne sont pas les m^emes. Le parallelisme dans les structures utilisees en Bases de Donnees pose des problemes lies aux transactions, aux reprises sur erreurs et a la tolerance aux pannes. La consistance ne concerne pas une seule SD mais un ensemble de structures de donnees. En revanche, une machine dictionnaire, se compose d'une seule structure. Le but est de construire sur une machine parallele un algorithme de structures de recherche orant des temps de reponse et une capacite interessants. La specication y est quelque fois exprimee en terme de VLSI, plut^ot qu'en terme d'algorithme. 1.2.5.a Les Bases de Donnees Dans le contexte des Bases de Donnees, la parallelisation des SD dans un environnement distribue utilise beaucoup l'approche SDDP. Elle est alors appelee, partitionnement des donnees. L'inter^et d'une SDDP est d'accro^tre la quantite d'information stockee, tout en repartissant la charge sur dierents processus. L'introduction du parallelisme dans les SD pose des problemes lies aux transactions. En eet, une transaction est une composition de plusieurs operations sur plusieurs (ou une seule) SD. Or si une des operations echoue, il faut pouvoir rendre inoperantes les operations deja eectuees. L'eet de toute operation doit donc pouvoir ^etre annule, pour recuperer l'ancienne version de la SD. Deux methodes resolvent ce probleme. La premiere consiste a introduire de nouvelles operations : abort, commit. Elles ont pour eet de rendre valide ou de faire echouer une operation. La deuxieme est de considerer des SD multi-versions. Une SD stocke un historique de ces versions. La structure etant representee par plusieurs sous-representations distinctes, chaque valeur de clef doit avoir une sous-representation associee. Si le comportement de l'application est susamment connu une association peut ^etre decidee a priori. Les donnees sont placees statiquement. Si aucune hypothese sur les valeurs des clefs ne peut ^etre posee, la mise en uvre d'equilibrage de charge dynamique est necessaire. Placement statique De bonnes informations statistiques sur les valeurs des clefs les plus accedees sont parfois disponibles. Le placement des elements peut donc ^etre fait a priori (placement statique de la structure sur D processus). Cette methode est appelee dans ce contexte "Declustering" [KiTM84]. hh ii These Paris VI, Janvier 1996 1.3. Structures de donnees a operations paralleles 19 Le placement statique des donnees est aussi possible lorsque plusieurs structures de donnees (tables ou index) sont utilisees. Lors d'une interrogation, plusieurs structures sont accedees en m^eme temps, donnant lieu a des transferts de donnees entre le processus ayant demande la requ^ete et les processus stockant les donnees. Le meilleur placement d'un ensemble de structures de donnees est celui qui minimise les temps de communications entre les dierents processus (voir Li, Srivastava et Rotem [LiSR92]. Placement dynamique Lorsque ces informations statistiques ne sont pas connues, un placement dynamique devient obligatoire. Un partitionnement des valeurs de clefs est xe initialement. Puis, en fonction du nombre d'acces, du nombre de donnees sur chacun des processus, les donnees sont aectees a d'autres processus. Dans certains cas, l'unite de charge est un seul element, dans d'autres, le nombre d'elements est trop important. L'ensemble des valeurs de clefs est partitionne en d ensembles, avec d >> D. L'algorithme de repartition s'occupe maintenant d'un nombre plus restreint d'unites a equilibrer. Cette methode a l'inter^et de reduire la taille du probleme. 1.2.5.b Les machines dictionnaires Gastaldo par exemple dans [Gast93] utilise l'approche SDDP pour l'implementation d'une machine dictionnaire sur machine parallele SIMD. L'espace des clefs est decoupe en D intervalles. La sous-representation utilisee est celle des arbres binaires bicolores, pouvant supporter les operations des arbres 2-3-4. Dans une premiere version, une seule instruction (operation) etait envoyee a la machine dictionnaire. La capacite n'etait donc que de un. La seconde version propose d'envoyer des groupes d'instructions. Le fait que l'execution des operations soit synchrone est plus lie a l'architecture de la machine (SIMD) qu'a des problemes algorithmiques dus au parallelisme. L'auteur ne faisant aucune hypothese sur les valeurs des clefs, il devient donc obligatoire de mettre en place un algorithme d'equilibrage de charge entre les dierentes sous-representations. L'algorithme d'EC considere comme region, les voisins immediats (gauche et droit) de la sous-representation consideree. La charge locale est denie en terme de nombre d'elements. Une fonction de repartition assure l'equilibrage des sous-representations au bout d'un certain nombre de groupes d'operations synchrones. Une autre machine dictionnaire reprenant les m^emes principes a ete denie sur machine MIMD par Duboux et Ferreira [DuFe94]. L'architecture de la machine (Volvox) ne permet pas la diusion des instructions. Une seule structure recoit les instructions, puis les renvoie a son voisin. Les instructions sont donc envoyees de facon pipelinee sur les D sous-representations. Encore une fois, les auteurs ne font aucune hypothese sur les valeurs des clefs. Ils utilisent le m^eme algorithme de repartition de la charge que pour la machine dictionnaire precedente. 1.3 Structures de donnees a operations paralleles Paralleliser une structure par l'approche \operations paralleles" consiste a utiliser une seule representation de la structure, et a eectuer les operations en parallele. Deux solutions peuvent ^etre envisagees pour paralleliser les operations. 1. P operations synchrones. Toutes les operations parcourent des parties communes de la representation. Il devient donc legitime de considerer qu'un groupe These Paris VI, Janvier 1996 1.3. Structures de donnees a operations paralleles 20 d'operations peut ^etre execute de facon synchrone. Les parties de parcours communes sont realisees par un seul processus. Puis lorsque les parcours divergent, le groupe d'operations est separe en deux sous-groupes. Chacun d'eux est execute par un processus. 2. Operations asynchrones. Cette solution propose d'executer les operations en pipeline sur la representation. Une operation est composee d'une suite d'operations elementaires sur des parties distinctes de la representation. Plusieurs operations peuvent donc ^etre executees en m^eme temps sur la representation. Sur une machine a memoire partagee, une operation est realisee par un processus. Sur une machine a memoire distribuee, une operation est realisee par plusieurs processus. Cette technique est issue de la theorie de la serialisation (Calhoun et Ford [CaFo84]), ou d'un point de vue exterieur a la structure de donnees, les operations sont executees sequentiellement. hh ii Structure séquentielle S Parallélisation SDOP Opérations parallèles sur une seule représentation Figure 1.4 : Parallelisation par l'approche SDOP Dans la suite, nous presentons la parallelisation synchrone et puis asynchrone d'une liste cha^nee. Nous discutons ensuite des co^uts et des limitations de la methode synchrone, en les illustrant par des exemples de parallelisation de la litterature. Finalement, nous classons les parallelisations asynchrones, en fonction de la classe de structure, et de l'architecture de la machine. 1.3.1 Exemple : la liste cha^nee L'approche operation parallele consiste a n'utiliser qu'une seule liste L. hh ii 1.3.1.a Operations synchrones Soient D operations sur la liste L portant sur D elements (insertion, suppression, recherche). Les D elements sont tries dans un tableau t par ordre croissant (respectivement decroissant) si L est triee par ordre croissant (respectivement decroissant). Ils sont notes ti . Les D processus notes Pi eectuent les D operations synchrones. These Paris VI, Janvier 1996 1.3. Structures de donnees a operations paralleles 21 P0 eectue l'operation sur t0 . Il parcourt alors L jusqu'a atteindre la position de t0 dans L. Puis P1 continue le parcours pour atteindre la position de t1 et realise l'operation sur t1. Ainsi de suite, tous les Pi realisent leurs operations sur leur element ti . Les D operations synchrones sont donc realisees en un seul parcours. 1.3.1.b Operations asynchrones Une operation etant une suite d'operations elementaires sur deux ou trois nuds de la structure, plusieurs operations peuvent ^etre realisees en pipeline. Dans un environnement distribue, la liste L est distribuee sur P processus, idealement en nombre egal a celui des elements. L'operation se propage de processus en processus. Si une operation est a un instant donne sur le processus i (0 < i < n), le processus i ? 1 peut travailler a la realisation d'une autre operation. Dans un environnement a memoire partagee, la liste reside en memoire commune, les processus voulant realiser une operation, accedent a chacun des elements en utilisant des primitives d'exclusion mutuelle, pour realiser les modications en section critique. 1.3.2 Capacite et surco^ut de la methode synchrone Si la parallelisation est synchrone, la capacite est aussi grande que le permet la structure. Il est possible d'acceder aux n elements simultanement. Cette technique est tres interessante car elle permet d'obtenir une grande capacite. Toutefois, cette methode entra^ne une execution synchrone des operations ce qui dans beaucoup d'applications, n'est pas souhaitable. Plusieurs structures ont ete proposees sur ce modele de parallelisation. Ferreira presente dans [AFRV+94] une methode generale pouvant ^etre appliquees aux structures representees par des graphes orientes sans cycle monotone sur machine SIMD organisee en Hypercube. Cette methode est appelee cascade en hypercube . Les exemples presentes sont le probleme des coups de sabres multiples et la manipulation parallele de quadtree. Dixon [Dixo94] a presente une le de priorite sur ce modele. La le de priorite sequentielle originelle est derivee de la structure de Van Emde Boas [BoKZ77]. Un autre exemple de parallelisation eectuee sur ce modele est celle des arbres 23 proposee par Paul, Vishkin et Wagner [PaVW83]. La multi-recherche ne pose pas de probleme particulier. En revanche, si la multi-insertion (D insertions simultanees) donne lieu a des operations elementaires de "split" et "join" (voir l'annexe A), un processus doit modier des parties qu'il pourrait avoir en commun avec un autre processus. Deux operations voulant eectuer un Split ou un Join sur un m^eme nud doivent donc ^etre pipelinees. Une limite de la methode appara^t lorsque la SD a des operations qui modient la representation. Dans l'exemple precedent de listes cha^nees, considerons deux operations de suppression portant sur deux nuds x et y de la liste. Si x et y ne sont pas consecutifs, cela ne pose pas de problemes : ils peuvent ^etre supprimes en m^eme temps. En revanche, si ils sont consecutifs dans la liste, les deux suppressions eectives des nuds doivent ^etre serialisees. Les modications se retrouvent donc pipelinees. En fait, si les operations doivent modier des parties de la representation, qui sont communes a deux ou plusieurs d'entre elles, les modications doivent ^etre serialisees ou pipelinees, pour garder la consistance de la structure. hh ii 1.3.3 Capacite et surco^ut de la methode asynchrone Si les operations s'executent de facon asynchrone, elles accedent a la structure "en pipeline". La capacite de la SDP depend alors du nombre d'operations elementaires, These Paris VI, Janvier 1996 1.3. Structures de donnees a operations paralleles 22 du nombre d'elements utilises a chaque pas, et de la possibilite d'executer plusieurs operations sur une m^eme partie de la structure. Si par exemple, chaque operation se decompose en h operations elementaires necessitant deux elements consecutifs, la capacite de la structure ne pourra ^etre que de h2 . Il est bien evident que si la structure en question est un arbre binaire, la capacite dependra de la hauteur de l'arbre et sera donc limitee par le logarithme a base deux du nombre de nuds. Notons que les SDPES peuvent ^etre prises comme un cas particulier de SDOP. Elles peuvent ^etre accedees par plusieurs processus, avec une capacite limitee a un. Nous dissocions dans la suite les algorithmes de ce type suivant qu'ils sont proposes sur MMP sur MMD, car bien que l'approche de parallelisation soit la m^eme, les contraintes dues a l'environnement impliquent de grandes dierences quant aux resultats obtenus. 1.3.4 Memoire partagee Comme nous l'avons dit precedemment, la SDP reside en memoire partagee. Nous dissocions maintenant les structures de recherche des les de priorite. 1.3.4.a Les les de priorite Une operation etant composee d'une suite d'operations elementaires, un processus n'a besoin que d'une petite partie de la structure a un instant donne. L'utilisation de primitives d'exclusion mutuelle pour chaque entite modiable de la SDP, rend possible des operations concurrentes sur la structure. Les primitives d'exclusion mutuelle sont plus communement appelees verrous ou semaphores. La technique introduite dite de verrouillage partiel (Jones [Jone89], Deo [Deo89], Mans et Roucairol [MaRo90], Le cun, Mans et Roucairol [LeMR92]), a ete utilisee pour plusieurs les de priorite comme le Skew-Heap [Jone89, MaRo90], le d-Heap [QuYo84, RaKu88, BiBr87], le Funnel-Tree [MaRo90]. L'utilisation de primitives d'exclusion mutuelle, necessite un schema de verrouillage interdisant tout interblocage. Le chapitre 3 decrit en detail des schemas de verrouillage pour des structures de donnees arborescentes lorsque toutes les operations parcourent la structure dans le m^eme sens (Racine-Feuille, ou Feuille-Racine). Dans le cas du d-Heap, les operations de suppression et d'insertion parcourent l'arbre dans deux sens dierents. Il faut donc gerer le risque d'interblocage. Bitwas et Browne, [BiBr87], resolvent ce probleme en colorant les nuds par lesquels un processus passe, an de savoir si le nud qu'un processus veut verrouiller, est deja detenu par un processus qui parcourt la structure dans un sens dierent du sien. Dans une seconde version, Bitwas and Browne utilisent des processus specialises pour eectuer la phase de restructuration. Les processus voulant realiser une operation, demandent aux processus specialises de l'eectuer pour eux. Cela permet aux processus clients de se decharger d'une partie du travail, le nombre de processus specialises etant independant de la taille de la structure. Rao et Kumar [RaKu88] resolvent le probleme dans le cas d'un tas, en modiant l'operation d'insertion pour qu'elle se realise dans le sens Racine-Feuille, et non plus dans le sens Feuille-Racine. Un autre exemple est le d-Heap de Rao et Kumar [RaKu88] utilisant le blackboard. La formulation est au depart clairement une formulation de SDDP. Puis, l'algorithme d'equilibrage qui est utilise implique que tous les acces aux D les passent par le blackboard. Si les tests ou les operations sur le blackboard sont executes en section critique, les acces a la structure globale sont serialises de ce These Paris VI, Janvier 1996 1.3. Structures de donnees a operations paralleles 23 fait. Le blackboard est en fait une racine virtuelle a un tas particulier. La strategie d'equilibrage de charge qui en utilisee transforme une SDDP en une SDOP. Pour toutes ces FP, les algorithmes des operations de base travaillent sur deux nuds consecutifs (un nud et son ls). Si la hauteur de l'arbre est h, la capacite est : C = h2 : Les tas ayant une hauteur de logn ou n est le nombre de nuds, la capacite est de : C = logn 2 : Un surco^ut de l'algorithme est d^u aux appels de primitives d'exclusion mutuelle. Or, comme il en existe une par nud de l'arbre, le nombre d'appels depend aussi de la hauteur de l'arbre. Les primitives presentes sur les machines commerciales, proposent des solutions materielles ou logicielles aux problemes de l'exclusion mutuelle, mais elles prennent un temps non negligeable. Si le temps d'execution d'une primitive d'exclusion mutuelle est de Texc, le surco^ut de la methode est : Texc h: Un autre surco^ut est genere lorsque la memoire de la machine n'est pas physiquement partagee mais virtuellement partagee. Si un processus demande l'acces a un nud de l'arbre qui n'est pas dans sa memoire locale, il doit d'abord le transferer de la memoire d'un autre processus pour pouvoir travailler dessus. Ceci est fait automatiquement, mais il ne faut pas oublier ce parametre dans le calcul du surco^ut. Si le temps de transfert d'une donnee est de Ttr le surco^ut pour une operation est donc de : Ttr h: Finalement le co^ut total engendre par la methode pour une operation est de : Tgps = (Ttr + Texc ) h: Il faut aussi remarquer que les valeurs Ttr et Texc sont non seulement des caracteristiques de la machine utilisee, mais qu'elles ne sont generalement pas des constantes, elles dependent du nombre de processus mis en jeu. Nous proposons dans le chapitre 3 des solutions permettant de reduire les surco^uts dus au nombre d'appels aux primitives d'exclusion mutuelle, et/ou au nombre de processus par les de priorite. 1.3.4.b Les arbres de recherche Dans le cas de structures de recherche (B-Arbre, Ellis [Elli80], Kung et Lehman [KuLe80], Lehman et Yao [LeYa81], Kwong et Wood [KwWo83], Paul Vishkin et Wagener [PaVW83], Ishak [Isha92], Johnson et Shasha [JoSh93], B+Arbre, ou les arbres binaires de recherche arbre AVL [Elli81]), les operations les plus utilisees sont les operations de lecture. Elles ne modient pas la representation de la structure. Il est donc legitime d'utiliser plusieurs niveaux de verrous. Les protocoles de verrouillage sont appeles Verrouillage d'arbre (Tree-Locking). Une operation est constituee de phase de lecture seulement, ou de phase de lecture et ecriture. Sont ainsi utilises: un verrou en lecture pour la recherche de valeur dans l'arbre, These Paris VI, Janvier 1996 1.3. Structures de donnees a operations paralleles 24 un verrou en ecriture pour la phase de recherche dans les operations de suppression ou d'insertion, un verrou exclusif pour la phase de modication de la structure lors de ces m^emes operations. Les dependances de verrous sont les suivantes: compatibilites de verrous { N Lecteurs () N Lecteurs { 1 Ecrivain () N Lecteurs incompatibilites de verrous { Ecrivain () = Ecrivain { Exclusif () = Exclusif { Ecrivain () = Exclusif { Lecteur () = Exclusif transition possible { Ecrivain =) Exclusif. Lorsqu'un ecrivain veut realiser une operation, il verrouille la partie de l'arbre qu'il veut modier avec des verrous en ecriture, puis il doit les changer en verrou exclusif une fois le nud trouve. Ceci produit des parcours redondants de la structure, et donc un surco^ut d^u a la gestion du parallelisme. Le probleme est ici d'avoir le minimum de nuds verrouilles a un instant donne, an d'obtenir le maximum de processus travaillant en m^eme temps dans la structure, et donc assurer un maximum de concurrence. La capacite depend de la nature des operations, il est tres dicile de l'evaluer. En eet, si toutes les operations sont des operations de lecture, la capacite est innie. En revanche si une operation dans un B-Arbre necessite des separations (split) de tous les nuds du parcours, la capacite est de un. De plus, les m^emes surco^uts que precedemment subsistent. Il y a ceux dus aux verrous, et ceux dus aux transferts de donnees sur une machine a memoire virtuellement partagee. Il en existe encore d'autres : comme nous l'avons dit certaines modications de l'arbre donnent lieu a des parcours redondants de la structure pour retirer les verrous exclusifs qui assurent la consistance de la structure. Il est tres dicile de calculer le surco^ut engendre car encore une fois, il depend aussi de la nature des operations. 1.3.5 Memoire distribuee Sur une machine a memoire distribuee, paralleliser une structure de donnees selon l'approche SDOP consiste a placer la SD sur un nombre xe ou variable de processus. Comme nous le verrons par la suite, le nombre de processus utilises peut varier entre log n et n (n etant le nombre d'elements contenu dans la structure). These Paris VI, Janvier 1996 1.3. Structures de donnees a operations paralleles 25 1.3.5.a Structures de recherche Ottman, Rosenberg et Stockmeyer [OtRS82] ont propose une structure de recherche pour VLSI. Dans ce cas, la structure est appelee machine dictionnaire, et les operations sont appelees instructions. La SDP est composee d'un vecteur de N processeurs. Au dessus de ce vecteur, la machine dictionnaire dispose d'un arbre de processeurs, les feuilles de l'arbre etant les processeurs du vecteur precedemment cite. Les instructions (les operations) arrivent sur la machine par la racine de l'arbre et les reponses sont envoyees par cette m^eme racine. Le principe est simplement de diffuser les instructions de facon pipelinee sur toutes les feuilles de l'arbre. Les elements sont stockes tries dans le vecteur (un element par case du vecteur). Lorsqu'une instruction d'insertion d'un element arrive, les elements superieurs sont decales d'une case vers la droite. Dans le cas d'une instruction de suppression, l'element est simplement marque comme etant supprime. Pour obtenir de bonnes performances, des "trous" sont gardes dans le vecteur. Un "trou" est d^u a la suppression et a l'insertion d'elements deja existants. Une instruction appelee compress, permet de reduire le nombre de trous. Colbrook, Brewer, Dellarocas et Weihl [CBDW91] ont propose un algorithme d'arbre n-aire de recherche sur MMD. Un nud de l'arbre contient entre 2b?1 et 2b elements avec b xe. Leur solution consiste a associer un processus par niveau de l'arbre. Demandes Ph Racine Ph−1 Ph−2 P1 Feuilles Reponses Figure 1.5 : Repartition de l'arbre de recherche Une operation commence son parcours par le processus detenant le nud racine puis le continue en passant de processus en processus. Les operations de modication peuvent donner lieu a des join et des split des nuds de l'arbre. Ces operations elementaires sont gerees par des envois de messages entre les processus. Le nombre de processus etant egal a la hauteur de l'arbre, le nombre d'operations paralleles ne peut depasser ce nombre. La capacite est donc egale a la hauteur h de l'arbre. Le surco^ut genere par la methode est aussi proportionnel a la hauteur de l'arbre, car des envois de messages ont lieu entre les processus gerant la structure. Le surco^ut pour une operation est donc proportionnel au temps d'envoi d'un message Tmsg et a la hauteur de l'arbre h : h Tmsg : hh ii hh ii These Paris VI, Janvier 1996 1.3. Structures de donnees a operations paralleles 26 Peleg [Pele90] propose un placement non pas pour permettre une capacite maximale de la structure, mais plut^ot pour minimiser les temps d'acces d'un processus client demandeur d'operations. Les hypotheses prises concernent le temps d'envoi et la taille des messages. La structure est une structure de recherche sous forme d'arbre. Dans une premiere proposition, la structure est placee dans un seul processus (approche SDPES). Dans une deuxieme, la structure est placee de la facon suivante : un processus detient la racine de l'arbre, les autres detiennent les sous-arbres issus de la racine. Puis dans une derniere version, la racine est dupliquee pour ^etre ainsi atteignable plus rapidement par les processus clients. Ce placement entra^ne dans ces conditions une capacite de deux. Peleg a neglige le cote parallelisation de la structure, pour ne s'occuper que d'un placement minimisant en fait, les surco^uts. 1.3.5.b Files de priorite Les les de priorite parallelisees par cette approche dans un environnement distribue, sont representees la plupart du temps par des arbres. La diculte est de placer les dierents elements de la structure sur les processus. Meybodyi [Meyb92] propose trois versions de les de priorite concurrentes sur un reseau distribue de machines organise en hypercube. La premiere consiste a placer l'arbre sur une cha^ne de processus. Chacun des processus est responsable d'un niveau de l'arbre. L'auteur propose d'autres les de priorite distribuees, car, dit-il, l'operation de suppression a une complexie O(logn). La structure a placer n'est plus un d-Heap classique, mais un Banyan-Heap. La representation d'un banyan-heap n'est pas un arbre mais un graphe banyan. Un graphe banyan est un graphe oriente sans-cycle, comportant L niveaux, de K nuds. Les arcs sont construits de telle facon qu'il existe un chemin unique d'un nud du niveau 0 a un nud du niveau L-1. L'auteur propose un algorithme de le de priorite, en organisant les valeurs sur chaque nud en tas. La dierence entre ces deux dernieres parallelisations reside dans le placement du Banyan-Heap sur l'hypercube. Dans l'une la representation est placee par niveau, dans l'autre par colonne. Mans [Mans95] a propose des parallelisations de la binomial queue et d'un dheap, fondees sur cette approche dans un environnement distribue. L'idee est d'utiliser une structure de tas pour organiser l'ensemble des processus. Un nud du tas correspond a un processus. Pour stocker plus d'elements qu'il n'y a de processus, chacun de ces derniers stocke une liste d'elements l sous forme de Splay-Tree. L'invariant est respecte entre les listes. An de repartir la charge sur les dierents processus, le processus devant contenir l'element a inserer est choisi par l'utilisation d'une fonction f. Les proprietes de la fonction assurent que deux insertions consecutives ne prennent pas le m^eme chemin. Pourquoi toutes ces structures paralleles sont-elles placees dieremment ? En fait, les objectifs vises sont dierents : maximiser la capacite de la structure, repartir l'occupation memoire, minimiser les temps de communications entre la structure et les processus clients. En nous fondant sur la theorie de la serialisation, quel que soit le placement envisage, il n'y a qu'un seul point d'entree. Les acces a la structure sont serialises. La capacite obtenue est proportionnelle au nombre de processus places sur les dierents These Paris VI, Janvier 1996 1.4. Structures de donnees a operations et a donnees paralleles 27 chemins que peuvent prendre les operations. Ainsi, le placement propose par Mans implique une capacite de logP et une bonne repartition de l'occupation memoire. Au contraire, la premiere approche de Meybodi, implique une capacite de P mais avec une mauvaise repartition memoire. Ces dierences peuvent ^etre retrouvees entre la structure de recherche de Peleg et celle de Colbrook, Brewer Dellarocas et Weihl. En fait, la diculte provient du placement d'une representation sous forme d'arbre. Obtenir une bonne capacite conduit a associer un processus par niveau de l'arbre, impliquant obligatoirement une mauvaise repartition de la memoire. Alors qu'obtenir une bonne repartition memoire oblige a grouper un m^eme nombre d'elements par processus, degradant ainsi la capacite de la structure vis a vis du nombre de processus utilises. Dans tout ce que nous venons de voir, la representation de l'arbre est placee statiquement sur les processus. La racine de l'arbre est associee a un processus. Un niveau ou un element de l'arbre est aecte a un processus particulier. Nous proposons dans le paragraphe3.3 une unication de toutes ces methodes de parallelisation sur machine a memoire partagee et a memoire distribuee en simulant une memoire partagee, l'acces aux donnees etant realise par des appels de procedure a distance. 1.4 Structures de donnees a operations et a donnees paralleles Les deux approches citees precedemment, ne sont pas incompatibles. Ce paragraphe montre comment elles peuvent ^etre conjuguees. Structure séquentielle. S Parallélisation SDODP Opérations parallèles sur chacunes des D représentations Figure 1.6 : Parallelisation par l'approche SDODP 1.4.1 Exemple : la liste cha^nee La SDP est representee par D listes. Les operations sur chacune de celles-ci, sont parallelisees selon l'approche SDOP. Sur une MMD, l'approche SDDP consistait a specialiser D processus dans la gestion de chacune des listes. Dans cette approche, une liste ne va plus ^etre geree These Paris VI, Janvier 1996 1.4. Structures de donnees a operations et a donnees paralleles 28 par un seul processus mais par autant de processus qu'il y a de nuds dans la le. Cette forme de structure necessite donc n processus specialises, n representant le nombre de nuds dans la liste globale. Sur une MMP, les D listes resident en memoire partagee, les P processus accedent aux D listes en utilisant l'algorithme concurrent de l'approche SDOP. 1.4.2 Limitation et co^ut de la methode L'approche SDDP avait l'inter^et de proposer une capacite "a la carte". En eet, il etait possible de choisir un nombre D de sous-representations. Le probleme etait le surco^ut engendre. Comme nous l'avons dit precedemment, le surco^ut est represente par une fonction dependante de D. Si D est trop grand, le surco^ut devient trop prohibitif par rapport au gain obtenu par la representation de la SD globale. D'autre part, la representation implique aussi des problemes de semantique sur les operations et donc de connaissance globale. Cette derniere, si elle doit ^etre assuree dans son sens le plus strict, doit ^etre geree par un algorithme dont la complexite depend aussi du nombre D de sous-representations. Par contre, l'approche SDOP ne pose pas de problemes d'equilibrage de charge ou de connaissance globale, mais les SD etant souvent representees par des arbres, leur capacite s'en trouve limitee. L'approche SDODP, combinant les deux approches precedentes, a pour buts d'augmenter la capacite et de reduire le surco^ut. Soient D le nombre de sous-structures et h la capacite de chacune d'entre elles. Dans le cas ou h depend du nombre d'elements, et ou le nombre d'elements contenus dans chacune des D sous-representations est de Dn , la capacite d'une structure est egale a h( Dn ). La capacite C de la structure globale est : C = D h( Dn ): Si h est une fonction lineaire de n, la capacite obtenue est la m^eme que pour l'approche SDOP. Dans le chapitre 4, nous montrons les performances de cette approche lorsque la fonction h n'est pas lineaire et depend ou non du nombre d'elements de la structure. Le gain s'exprime en terme de temps pour executer une operation. Le nombre d'elements geres par une operation n'est plus en eet en O(n) mais en O( Dn ). De plus, pour reduire le nombre d'elements par sous-representations, il faut aussi reduire le surco^ut de parallelisation des operations. Si le surco^ut s'exprime en fonction de h, le surco^ut global s'en trouve donc reduit. Dans l'approche SDDP, si la capacite est de P (le nombre de processus susceptibles d'acceder a la SDP), D doit ^etre egal a P. Or, maintenant il sut de choisir D tel que : P = D h( Dn ): Comme nous le verrons dans le chapitre 4, le nombre D obtenu est plus petit que P. Or les surco^uts sont dans ce cas fonction du nombre D de sous-representations Cette methode reduit donc aussi le surco^ut genere par une representation de la structure en SDDP. Nous presentons dans la suite des SDODP tirees de la litterature. Nous en proposons egalement dans le contexte des les de priorite au chapitre 4. These Paris VI, Janvier 1996 1.4. Structures de donnees a operations et a donnees paralleles 29 1.4.3 Files de priorite Si l'on considere les SDPES comme un cas particulier de SDOP, Trienekens et de Bruin [TrBr92], ansi que Kindervater [Kind94] ont propose une SDODP, qui pourrait ^etre appelee SDESDP structures de donnees a execution sequentielle et donnees paralleles. La le de priorite globale est representee par D sous-structures a execution sequentielle. Chacune d'entre elles peut ^etre accedee par un groupe de processus. Un processus particulier, le ma^tre, de chaque groupe realise l'algorithme SDDP. 1.4.3.a File de priorite de Fan et Cheng Fan et Cheng [FaCh89] presentent une le de priorite parallele, qui dans notre classement peut ^etre vue comme une le de priorite representee par une liste cha^nee, parallelisee par l'approche SDODP. La description originale est la suivante. Les processus accedent a la le par l'intermediaire d'un vecteur de demande, de taille D. La structure est composee de couches, chaque couche etant de taille D. Si n valeurs doivent ^etre stockees, la structure sera constituee de ( Dn ) + 1 couches. Plus la couche est basse, plus les valeurs contenues sont de faible priorite. Le vecteur de demande est considere comme la couche 0. Vecteur de demande r0 r1 r2 r3 r4 r5 r6 r7 Sorting Netwok B0 b00 b01 b02 b03 b04 b05 b06 b07 A0 a00 a01 a02 a03 a04 a05 a06 a07 Bm bm0 bm1 bm2 bm3 bm4 bm5 bm6 bm7 Am am0 am1 am2 am3 am4 am5 am6 am7 Figure 1.7 : File de priorite de Fan et Cheng L'algorithme maintient les valeurs triees sur une couche, de facon a ce que tous les elements d'une couche i soient de plus forte priorite que ceux de la couche i + 1. L'algorithme consiste a echanger les valeurs entre les couches en fonction de celles demandees ou donnees a la structure. Ces echanges utilisent un algorithme de fusion parallele. Alternativement les couches impaires puis paires travaillent. Cette parallelisation correspond a notre modele SDODP ou la representation est une liste cha^nee, ou plus exactement un 1-Heap. La FP est representee par D 1Heap ce qui correspond a notre modele SDDP. Chacun des D 1-Heap est parallelise par l'approche SDOP. Les operations, bien que paralleles, sont executees de facon synchrone pour assurer un equilibrage parfait et une semantique stricte des operations. Cette le de priorite peut ^etre vue comme la combinaison de la FP parallele de Deo et Prasad avec comme representation non plus un 2-Heap mais un 1-Heap en SDDP, et de la parallelisation des operations en SDOP de Rao et Kumar. These Paris VI, Janvier 1996 1.5. Conclusion 30 1.4.3.b File de priorite de Horn et Das Das et Horn [DaHo91] ont presente une le de priorite SDODP fondee sur la le de Deo et Prasad [DePr92]. L'algorithme de Deo et Prasad est une parallelisation par approche SDDP du 2-Heap. Or cette m^eme structure a ete parallelisee en SDOP par Bistwas et Brown [BiBr87] puis par Rao et Kumar [RaKu88]. Il est donc naturel qu'une parallelisation alliant les deux approches ait ete proposee! 1.4.4 Les structures de recherche Dans le cadre de l'etude d'une machine dictionnaire speciee en terme de VLSI, Duboux, Ferreira et Gastaldo [DuFG94] ont presente une structure de recherche parallelisee selon l'approche SDODP. Leur structure emploie comme sous-structure concurrente la machine dictionnaire de Ottman, Rosenberg et Stockmeyer [OtRS82] (voir paragraphe 1.3.5). Les D sous-machines dictionnaires sont chacune connectees a un processeur elementaire (pe). Chacun des D pe peut communiquer avec ses voisins immediats, et est connecte a un processeurs particulier appele driver d'entree/sortie par l'intermediaire d'un reseau diusant. Les instructions arrivent par le driver et sont envoyees a tous les pe. Pour resoudre les problemes d'equilibrage de charge entre les dierentes sousstructures, les PE sont aussi connectes par un arbre de calcul de prexe, permettant de calculer la somme partielle du nombre d'elements contenus dans les sousstructures et donc d'equilibrer la charge entre les D sous-structures. Comme note par les auteurs, cette approche de parallelisation permet de choisir le nombre de sous-structures pour stocker les elements. L'approche combinee SDODP entra^ne une reduction du nombre de sous-structures et donc du surco^ut d^u a l'equilibrage de charge. Elle permet egalement de reduire le temps pris pour l'execution d'une instruction dans chacune des sous-representations. hh ii 1.5 Conclusion Nous avons propose dans ce chapitre, un classement des structures de donnees paralleles existantes. Ce classement est fonde sur un concept englobant la representation des donnees en memoire et les operations qui sont susceptibles d'y ^etre eectuees. Le parallelisme introduit dans ces deux composantes permet de distinguer les structures. Il est possible d'etablir un parallele entre ce classement et celui des ordinateurs propose par Flynn. SISD Single Instruction Single Data SIMD Single Instruction Multiple Data MISD Multiple Instruction Single Data MIMD Multiple Instruction Multiple Data SOSD (SDPES) Single Operation Single Data structure SOMD (SDDP) Single Operation Multiple Data structures MOSD (SDOP) Multiple Operations Single Data structure MOMD (SDODP) Multiple Operations Multiple Data structures Ce classement nous a permis de caracteriser les performances en terme de capacite, de surco^ut et de limitation de chacune des grandes classes de SDP. These Paris VI, Janvier 1996 1.5. Conclusion 31 Nous avons volontairement omis de discuter de la localisation des l'algorithmes de traitement. Pour chacune des structures de donnees, nous avons considere que la structure devait executer une ou plusieurs operations, mais nous n'avons pas precise d'ou venaient les demandes d'operations. Deux cas sont possibles. 1. Les processus executant l'algorithme de traitement sont les m^emes que ceux eectuant les operations. Dans ce cas, la structure est consideree comme passive. Les processus qui eectuent les operations, executent aussi l'algorithme de traitement. 2. Des processus sont specialises dans la gestion de la structure. Les codes de l'application sont executes par un autre groupe de processus. La SDP est consideree comme active. Elle se place comme un serveur d'operations sur la structure. Le choix entre une structure passive et une structure active depend : du type de machine parallele utilisee, du type de parallelisation de la structure de donnees, du comportement de l'application. Par exemple, une SDPES sur machine a memoire distribuee est par denition active. En revanche, sur machine a memoire partagee, une structure active ou passive peut ^etre envisagee. Une structure passive reside en memoire partagee; les processus y realisent leurs operations en section critique. Si la structure doit ^etre active, un seul processus eectue les operations. Les communications avec les processus clients peuvent ^etre faites par l'intermediaire d'une bibliotheque de simulation de passage de messages au dessus de la memoire partagee. L'inter^et des structures passives est qu'un processus client n'attendra jamais la n d'une operation tout en restant inactif (attente de la reponse de l'execution de l'operation). Il aura toujours soit son operation, soit celle d'un autre processus, a executer. En revanche, dans le cas de structures actives, certaines operations donnent lieu a un resultat qui ne peut ^etre fourni qu'a la n de leur execution (recherche, suppression dans une structure de recherche). La demande de ce style d'operations s'apparente a un appel synchrone de procedure a distance. Les processus clients restent donc inactifs jusqu'a reception du resultat de l'operation. Cependant, lors d'une insertion, il n'est pas necessaire que les processus demandeurs attendent la n de l'execution de l'operation, car celle-ci n'a pas de retour. Cette operation s'apparente donc a un appel asynchrone de procedure a distance. Le comportement d'une application peut aiguiller vers un choix de structure active ou passive. Si par exemple, la plupart des operations utilisees par l'application sont asynchrones, il est avantageux de choisir une structure active. Ceci permet d'introduire du parallelisme entre l'application et la structure. En revanche, si la plupart des operations sont synchrones, les processus sont souvent bloques, l'introduction du parallelisme entre l'application et la structure est inutile. Toutefois certaines operations dites synchrones peuvent retourner le resultat au debut de leur execution. Par exemple, les les de priorite representees par des tas et parallelisees en SDOP ont une operation de suppression qui par denition est synchrone. Mais, le resultat peut ^etre envoye immediatement, il n'est pas necessaire These Paris VI, Janvier 1996 1.5. Conclusion 32 d'eectuer la phase de restructuration pour obtenir et retourner l'element contenu dans le nud racine. Si ce chapitre nous a permis de classer les approches de parallelisations des structures de donnees et de degager leur performances et leur limites, les chapitres suivants de la these apportent des contributions a chacune de ces approches, dans le cadre des les de priorite. These Paris VI, Janvier 1996 33 2 Les structures a donnees paralleles Chapitre Nous presentons des methodes de parallelisations de structures dite a donnees paralleles. Dans une premiere partie, nous presentons une methode generale de parallelisation SDDP synchrone de les de priorite representees par des tas, l'algorithme de Deo et Prasad n'en etant qu'un cas particulier. La seconde partie propose une reexion sur l'equilibrage de charge sur machine a memoire distribuee. Notre conception d'une le de priorite SDDP s'est reetee dans celle proposee pour resoudre le probleme d'equilibrage de charge, qui a ete sous-jacent aux etudes menees dans le cadre du projet STRATAGEME sur des applications irregulieres. 2.1 Files de priorite synchrones De l'etude faite au chapitre 1 de la parallelisation du 2-heap propose par Deo et Prasad [DePr92], nous degageons une methode generale de parallelisation pouvant ^etre appliquee aux autres tas de la litterature (Leftist-Heap, Skew-Heap, PairingHeap Binomial Queue, etc...). L'inter^et du 2-heap parallele etait de proposer une parallelisation de le de priorite sous l'approche SDDP, ou la semantique de l'operation de suppression est respectee dans son sens le plus strict. Nous montrons en fait que l'idee sous-jacente est la consideration d'un invariant de tas en parallele. Une approche generale de la gestion du parallelisme dans les tas consiste alors a maintenir cette propriete d'invariant. Apres avoir detaille l'algorithme de Deo et Prasad, nous donnons une methode generale de parallelisation des tas appelee fusion&recopie, nalement nous illustrons la methode sur deux exemples, le Skew-Heap et le Pairing Heap. 2.1.1 Le 2-heap parallele Ce paragraphe comporte deux parties distinctes. La premiere donne la representation du 2-heap parallele, et la seconde expose les operations en insistant sur les operations elementaires (oe) speciques a ce genre de structure. These Paris VI, Janvier 1996 2.1. Files de priorite synchrones 34 2.1.1.a La representation Le 2-Heap sequentiel est un arbre binaire ou chacun des nuds de l'arbre contient un element (voir l'annexe A). Initialement, Deo et Prasad ont donne la representation du tas parallele comme un 2-Heap ou chaque nud contient D elements. L'invariant du tas parallele doit donc prendre en compte cette nouvelle forme de representation (cf denition 9). Le but des operations va donc ^etre de conserver cet invariant. Celui-ci peut ^etre vu comme le maintient d'une connaissance globale : l'algorithme de gestion du parallelisme integre aux operations doit maintenir l'invariant ou autrement dit doit garder la coherence de la structure. 1 6 10 10 11 13 7 8 9 10 11 11 14 2 3 5 5 6 9 12 13 15 17 10 10 11 Figure 2.1 : Exemple de tas parallele Cette representation est completement equivalente a la representation en SDDP du chapitre 1. Seule la formulationest dierente. Dans le chapitre 1, la representation parallele est un ensemble de representations de 2-Heaps. Deo et Prasad considere la parallelisation des nuds de la representation. La formulation de Deo et Prasad simplie l'identication des elements, et donc l'expression des algorithmes des operations. C'est dans cette optique de simplication que nous gardons leur formulation. En machine, l'arbre binaire est implemente par un tableau T. Le nud racine est repere par l'indice 1 dans le tableau. Les deux nuds ls d'un nud i sont reperes respectivement par les indices 2i et 2i + 1. En sequentiel, un nud i ne stocke qu'un element, ce dernier est note T[i]:e. En parallele, un nud i stocke une liste de D elements tries par ordre decroissant de priorites. La liste d'un nud T[i] est notee T[i]:l. L'element j de cette derniere est T[i]:l[j]. Comme nous le verrons par la suite, une liste ainsi que le nud qui la stocke peuvent contenir moins de D elements, ils seront denis dans ce cas comme etant non pleins. Le nombre d'elements contenus dans la liste l est note l:D. Dans tous les cas, l'element le moins prioritaire de T[i] est appele T[i]:l[D]. Dans la suite, nous emploierons les sigles <, > pour comparer la priorite des elements. Soient les elements e1 et e2. Si e1 < e2 (respectivement e1 > e2), l'element e1 est moins (respectivement plus) prioritaire que l'element e2. Ces signes comparatifs sont aussi employes pour les listes d'elements. Soient l1 et l2 deux listes comprenant au plus D elements : si l1 < l2 (respectivement l1 > l2), tous les elements de l1 sont moins (respectivement plus) prioritaires que tous les elements contenus dans l2. Si deux elements peuvent toujours ^etre compares, il existe beaucoup de cas ou deux listes ne peuvent l'^etre; nous emploierons alors l'expression l1 6< l2. Nous notons n le nombre de nuds contenus dans le 2-Heap. En sequentiel, le nombre d'elements est egal a n, alors qu'en parallele, il est egal a D n. Le paragraphe suivant donne les algorithmes des operations sur le 2-heap parallele. Une description complete des algorithmes des operations sequentiels, peut ^etre trouvee dans l'annexe A. These Paris VI, Janvier 1996 2.1. Files de priorite synchrones 35 2.1.1.b Les operations Paralleles La structure de 2-Heap est une le de priorite a information externe, c'est-a-dire que si une operation viole l'invariant, les modications ne portent non pas sur la representation de la structure mais sur l'association nud$element. L'invariant est donc respecte une fois les elements deplaces. L'insertion Nous supposons dans un premier temps que les n nuds sont "pleins". Puis, nous expliquons le cas ou le dernier nud T[n] est "non plein". Cas nuds pleins L'insertion concerne D elements. Le parcours de l'operation parallele est le m^eme qu'en sequentiel : de T[1] a T[n + 1]. Les D elements a inserer sont places dans l'ordre decroissant des priorites dans une liste notee l. Pour chaque nud i du parcours, l'oe suivante est executee : la liste l est fusionnee a la liste T[i]:l. Les D plus petits elements de la liste resultat, sont replaces dans T[i]:l, les D plus grands sont remis dans l pour l'operation elementaire suivante. Finalement, si i est egal a n + 1, les D elements de l sont aectes a T[n + 1]:l, et n est incremente de 1. La gure 2.2 montre l'execution d'une oe. 2 5 8 12 D éléments à insérer Fusion T[i] 3 4 6 7 T[2i+1] 9 10 14 15 2 3 6 4 5 9 10 14 15 7 8 12 D éléments à insérer Fusion T[i] Chemin suivit par l’insertion de la racine vers le noeud T[n+1]. Noeud concerné par la fusion Figure 2.2 : Exemple de deux oe d'insertion dans le tas parallele Propriete 3 La complexite en parallele d'une operation de D insertions avec D processus est de : O(log n logD): En eet, une operation necessite logn operations elementaires. Chaque operation elementaire est une fusion de deux listes triees de D elements. En parallele avec D processus, la complexite d'une fusion ecace est de O(log D). La complexite pour l'operation parallele d'insertion de D elements est de O(log n log D). These Paris VI, Janvier 1996 2.1. Files de priorite synchrones 36 Remarque: n represente le nombre de nuds et non pas le nombre d'elements. Si N est le nombre d'elements (N etant un multiple de D), la complexite d'une operation parallele equivalente a D operations sequentielles devient : O(log N D log D): Cas T[n] non plein Deo et Prasad ont propose un algorithme permettant d'inserer non pas D elements mais E, (1 < E < D). Le probleme n'est pas d'inserer moins de D elements mais plut^ot de savoir comment gerer le nud non plein alors cree. En eet, inserer moins de D elements dans un tas parallele ou les n nuds sont pleins, ne pose pas de probleme majeur. En revanche, l'eet de cette insertion est que le nouveau nud T[n] contient E elements. La prochaine insertion doit savoir gerer ce "trou". Si l'insertion suivante concerne plus de D ? E elements, l'operation concerne alors deux nuds terminaux T[n] et T[n + 1]. Elle doit donc emprunter deux chemins dierents. La solution proposee par les auteurs consiste a eectuer deux operations "pipelinees"1 . Soit D le nombre d'elements contenus dans le nud T[n], si l'insertion suivante concerne D elements, l'operation est decoupee en deux sous-operations. La premiere insere D ? E elements dans T[n], en suivant donc le chemin de T[1] vers T[n]. La seconde insere les E elements restants en suivant le chemin de la racine vers le nud T[n + 1]. Les deux operations etant pipelinees, le surco^ut n'est pas signicatif. Propriete 4 L'algorithme d'insertion de E elements (1 E < D) dans un tas parallele a une complexite de : O(log n logD): En eet, dans le cas nud plein, il n'etait employe qu'une version ecace de la fusion parallele. Or, si une version optimale est utilisee, la complexite de la fusion reste en O(logD) avec non plus D processus mais logDD processus. Deux groupes de logDD processus peuvent donc ^etre aectes a chacune des deux sous-operations. De m^eme que precedemment, n represente le nombre de nuds et non pas le nombre d'elements. Si N est le nombre d'elements, la complexite d'une operation parallele (D operations sequentielles) est : O(logd N D e log D): La Suppression Cas nuds pleins Nous supposons encore dans un premier temps que les n nuds sont pleins et que l'operation supprime D nuds. Les D elements a supprimer se trouvent dans la liste de la racine (T[1]:l). An de reorganiser le tas parallele, les D elements contenus dans T[n]:l sont places dans T[1]:l. Puis n est decremente de 1, car T[n]:l est alors vide. L'algorithme reprend le m^eme principe de parcours qu'en sequentiel. Pour chaque nud i du parcours, l'oe suivante est executee : 1 suite d'operations se succedant comme dans un pipeline These Paris VI, Janvier 1996 2.1. Files de priorite synchrones 37 Les listes T[i]:l, T[2i]:l, T[2i + 1]:l, sont fusionnees en une liste l. Les D premiers elements de l (les D plus prioritaires) sont places dans T[i]:l. Les D suivants sont places dans le nud ls qui contenait l'element le moins prioritaire (sur la gure 2.3, ce ls est T[2i+1]). De cette facon, le sous-arbre a partir de ce ls respecte l'invariant. Les D derniers elements sont places dans l'autre ls. Le parcours continue a partir de ce ls. L'operation se termine lorsque i devient superieur a n. T[i] 3 6 8 13 T[2i] 4 T[2i+1] 5 11 12 10 14 15 9 3 4 5 6 8 9 10 11 12 13 14 15 T[i] 3 4 5 6 T[2i] T[2i+1] 12 13 14 15 8 9 10 11 Chemin suivit par la suppression. Noeud concerné par la fusion Figure 2.3 : Exemple d'une oe de parcours d'une suppression Propriete 5 La complexite de l'operation de suppression parallele dans un tas parallele composee de n nuds est de : O(log n logD): En eet, l'algorithme parcourt une branche de l'arbre. Or, cette derniere ne peut exceder une longueur de logn, car l'arbre est exactement equilibre. A chaque oe, en chaque nud, une fusion de trois listes de longueur D est effectuee. Avec un algorithme parallele ecace, la complexite de la fusion est O(logD) avec D processus. L'algorithme d'une operation parallele de suppression a donc une complexite de O(log n logD). La remarque enoncee precedemment est aussi valable ici. n represente le nombre de nuds et non pas le nombre d'elements. Si N est le nombre d'elements contenus dans le tas parallele, la complexite d'une operation parallele est de O(log ND logD). Cas T[n] non plein Deo et Prasad ont propose une modication de l'algorithme pour supprimer E elements (1 < E < D). These Paris VI, Janvier 1996 2.1. Files de priorite synchrones 38 Si la suppression concerne E elements, il sut de retourner les E premiers elements de la racine. Puis, an d'eectuer la phase de restructuration, le nud racine est complete avec E elements du nud T[n]. n est decremente de 1 si T[n] devient vide. L'eet de cette version de l'operation est encore une fois de rendre le nud T[n] non plein, car il ne contient plus que D ? E elements. Si l'operation suivante a pour but de supprimer D elements, le nud T[n] ne sura pas a remplir la racine pour eectuer la phase de restructuration. Il faudra donc dans ce cas prendre les E elements manquants dans le nud T[n ? 1]. Cette modication ne change pas la complexite initiale. L'Insertion-Suppression Bien souvent une application utilise une boucle de sequence xee d'operations sur la le de priorite. Par exemple, dans un Branch and Bound, avec une strategie de separation dichotomique, la sequence est composee d'une suppression puis deux insertions. Pour une simulation d'evenements discrets, la sequence est une suppression, puis une insertion. Deo et Prasad groupent une sequence d'operations en une seule. La nouvelle operation parallele eectue 2D insertions et D suppressions avec la m^eme complexite que pour une operation parallele (insertion ou suppression). 2.1.2 La methode Fusion&Recopie Le parallele Heap est fonde sur la notion d'invariant parallele. Or l'invariant etant une propriete valable sur tous les tas, l'invariant parallele peut ^etre enonce sur tous les tas. Il est donc possible de donner une methode generale pouvant ^etre appliquee a tous les tas de la litterature. L'idee de la methode est de considerer une nouvelle fonction TestPriForList. Son but est d'etablir un ordre entre deux listes d'elements a partir d'une operation de fusion&recopie. D'ou le nom que nous avons donne a notre methode. Le paragraphe suivant detaille et discute son fonctionnement. Puis, nous expliquons comment cette fonction permet d'exprimer tres simplement les algorithmes paralleles des operations sur un tas parallele. 2.1.2.a La fonction TestPriForList Le but de la fonction TestPriForList(l1,l2) est de comparer les deux listes l1 et l2 passees en parametre. La fonction rend toujours les deux listes comparables par redistribution des elements. Puis, elle retourne : vrai dans le cas ou l1 < l2, faux si l1 > l2. La redistribution doit conserver les deux proprietes suivantes : l'invariant, l'etat des nuds (pleins ou non pleins). Pour ce faire, l'algorithme de redistribution appele fusion&recopie est utilise. 1. l1 et l2 sont fusionnees en parallele dans l. 2. si les deux listes sont toutes les deux pleines ou non pleines, si l1[D] > l2[D], les D premiers elements de l sont places dans l1 et les D suivants dans l2, sinon les D premiers elements de l sont places dans l2 et les D suivants dans l1, These Paris VI, Janvier 1996 2.1. Files de priorite synchrones 39 3. si l1 est pleine et l2 non pleine, les D premiers elements de l sont places dans l1 et les suivants dans l2. 4. si l1 est non pleine et l2 pleine, le cas est le symetrique du cas precedent. Les listes l1 et l2 sont donc maintenant comparables, permettant ainsi a la fonction TestPriForList de retourner vrai si l1 < l2, faux sinon. Si une liste est au depart pleine, elle reste pleine. Si elle est non pleine, elle peut devenir pleine ou m^eme vide. Ces proprietes nous seront tres utiles dans la suite. Nous devons maintenant prouver que la fusion&recopie ne modie pas l'invariant. Soient x et y deux racines de tas paralleles qui respectent l'invariant. Theoreme 1 La fusion&recopie executee sur x:l et y:l, ne modie pas l'invariant en x ni en y. Preuve: Nous notons x:l (resp. y:l) la liste de x (resp. y) avant l'execution de la fonction et x:L (resp. y:L) la liste de x (resp. y) modiee par l'execution de la fonction. Seul le cas des listes pleines nous interesse. Car par hypothese si un nud est non plein, c'est une feuille. Or l'invariant est toujours respecte en une feuille. Donc, quelles que soient les valeurs obtenues apres l'execution de la fusion&recopie, un nud non plein respecte l'invariant. Si l'invariant n'est plus respecte en x ou en y, apres l'execution de la fusion&recopie alors pour x ou pour y, le nouvel element d'indice D est moins prioritaire que le precedent. En d'autres termes, l'invariant n'est plus respecte si : x:l[D] > x:L[D] ou y:l[D] > y:L[D]. Deux cas se presentent. Cas x et y pleins Dans le cas ou x:l[D] > y:l[D] (le cas symetrique se demontre de m^eme), x:L recevra les d elements les plus prioritaires de l. Or, si x:l est trie par ordre decroissant, il existe au moins D elements dont la priorite est superieure a x:l[D]. Donc x:L[D] sera forcement plus prioritaire que x:l[D]. L'invariant est respecte en x. Les 2D elements de l etant plus prioritaires que y:l[D], il est certain que y:L[D] = y:l[D]. Donc l'invariant est aussi respecte pour y. Cas x plein et y non plein x:L contient les D elements les plus prioritaires de l. Or, si x:l est trie par ordre decroissant, il existe au moins D elements dont la priorite est superieure a x:l[D]. Tous les elements de x:L sont donc plus prioritaires que ceux de x:l[D]. L'invariant est respecte en x. le nud y etant non plein, il respecte toujours l'invariant. 2 Propriete 6 La fusion&recopie avec D processus a une complexite de O(logD): These Paris VI, Janvier 1996 2.1. Files de priorite synchrones 40 En eet, cette operation se compose d'une fusion de deux listes de D elements, d'un test et nalement d'une recopie. La complexite de la fusion par un algorithme parallele ecace est O(logD) avec D processus, celle du test est O(1) sur une CREW-PRAM et en O(logD) sur une EREW-PRAM, et nalement, celle de la recopie est O(1). La complexite totale de la fusion&recopie est donc O(log D). Propriete 7 La fonction TestPriForList avec D processus a une complexite de O(logD): Cette fonction execute la fusion&recopie sur deux les listes, puis les compare. La comparaison etant en O(1), la complexite totale de la fonction TestPriForList est donc O(logD). 2.1.2.b Application de TestPriForList Notre methode pour paralleliser un tas comporte deux etapes distinctes. La premiere consiste a exprimer la representation parallele du tas, la seconde a paralleliser le code des operations. Parallelisation de la representation Chaque nud du tas contient une liste de D elements. Cela peut ^etre realise pour chacun des tas de la litterature. Parallelisation des operations Dans une premiere partie, nous exposons la methode dans le cas d'un tas parallele dont tous les nuds sont pleins. Puis dans une seconde, nous donnons les modications a apporter dans le cas contraire. Cas d'un tas parallele plein Pour obtenir l'expression de l'algorithme parallele sur un tas, a partir de celle du code sequentiel, il sut de remplacer : 1. toutes les references a un element par une reference a une liste, 2. tous les tests sur les priorites des elements par la fonction TestPriForList. En fait, l'application de la methode est tres simple. Il sut de considerer une liste d'elements comme un seul element parallele, une bo^te noire, ou un objet. La fonction TestPriForList (ou methode de l'objet) en comparant deux elements paralleles x et y, "cache" le parallelisme et gere la possibilite que x et y ne soient pas comparables. De cette facon, les algorithmes paralleles et sequentielles sont les m^emes. La seule dierence reside dans l'objet qui est considere comme priorite. Cas d'un tas parallele non plein Si certains nuds sont non pleins, l'operation d'insertion dans un 2-Heap doit ^etre separee en deux sous-operations (voir paragraphe precedent). Cette division peut ^etre automatique, toutes les informations sont disponibles. Si le nud T[n+1] peut contenir les E elements a inserer, une seule operation sut. Dans le cas contraire, deux sous-operations sont utilisees. L'algorithme de l'operation de suppression pour moins de D elements, correspond a l'application de la methode a l'algorithme de suppression sequentiel en faisant toutefois attention aux nombre d'elements a prendre dans T[n]. Si la suppression concerne E elements avec 1 < E < D, il sut de transferer E elements du nud T[n] vers le nud racine T[1]. Dans le cas ou T[n] contient moins de E elements, le transfert concerne aussi le nud T[n ? 1]. These Paris VI, Janvier 1996 2.1. Files de priorite synchrones 41 Application aux tas a information interne Le d-Heap est une le de priorite a information externe, c'est a dire que la structure de l'arbre n'est a aucun moment modiee. Toutes les autres FP sous forme de tas sont a information interne. L'element a stocker est associe a un nud de l'arbre et il n'en sera jamais dissocie tout au long de son existence. L'invariant et l'equilibrage du tas vont ^etre respectes par modication de la representation. E tant donnees ces dierences, la methode est-elle adaptable aux tas a informa- tion interne ? Nous allons montrer que cette association nud$element et les modications de la representation ne sont pas une entrave a la methode. Association nud element Un nud ne contient plus un seul element mais une liste de D elements. L'eet de la fonction TestPriForList deplacant des elements d'un nud vers un autre nud, contrarie la propriete des tas a information interne. En fait, la fonction TestPriForList ne modie pas l'invariant (voir le theoreme 1). Elle ne change pas la priorite d'un nud vis a vis de ces ls. Modications de la representation Les parcours eectues par les algorithmes sur des tas a information interne empruntent toujours la m^eme branche de l'arbre. Dans les cas du Skew-Heap et du Leftist-Heap, les operations parcourent toujours la branche droite de l'arbre. Pour le Pairing-Heap, le chemin emprunte ne concerne que les ls de la racine (voir le paragraphe A.2.1.d). L'arbre garde son equilibre par des modications eectuees sur la branche parcourue. Pour le Skew-Heap, pour chaque nud du parcours les pointeurs ls droit et ls gauche sont echanges. Dans le Leftist-Heap, les pointeurs sur deux nuds ls ne sont echanges que si le sous-arbre droit est plus profond que le sous-arbre gauche. L'algorithme du Pairing-Heap, quant a lui, reduit le nombre de ls de la racine a chaque suppression (pairing). La methode presentee ci-dessus n'inue en rien sur l'algorithme sequentiel de re-equilibrage. Partant du principe que chaque nud contient non plus un seul element mais D elements, la representation reste la m^eme en sequentiel et en parallele, si on assimile une liste d'elements a un seul element parallele. Les trois paragraphes suivants presentent l'application de notre methode aux 2-Heap, Skew-Heap et Pairing-Heap. 2.1.3 Le 2-Heap L'Insertion Pour exprimer l'algorithme parallele de 2-Heap a partir de l'algorithme sequentiel, il sut de remplacer dans le code sequentiel toutes les references a un element (e) par une reference a une liste (l), et de remplacer la fonction TestPri par une fonction parallele appelee TestPriforList. Le pseudo-code suivant presente ces substitutions pour l'oe de l'insertion. procedure ParaInsOE(i,l) begin if ( TestPriForList(T[i].l,l) ) then T[i].l$l endif end InsOE These Paris VI, Janvier 1996 2.1. Files de priorite synchrones 42 OE i : TestPriForList 3 OE i : résultat de la TestPriForList 4 6 7 Liste l 2 3 4 Liste l 5 TestPriForList T[i] 2 T[i] 5 8 12 T[2i+1] 9 10 14 15 OE i : échange 6 7 8 12 T[2i+1] 9 10 14 15 OE suivante 6 7 8 12 Liste l échange T[i] 2 3 4 5 T[2i+1] 9 10 14 15 Liste l 2 3 4 5 T[i] 9 10 14 15 6 7 8 12 Chemin suivit par l’opération d’insertion Liste concernée par l’OE. Figure 2.4 : Exemple d'une oe d'insertion La suppression Les m^emes substitutions sont realisees. function InsOE(i) begin if ( TestPriForList(T[2i].l,T[2i+1].l) ) then s=2i+1 else s=2i endif if ( TestPriForList(T[i].l,T[s].l) ) then T[i].l$T[s].l endif return s end InsOE Cet algorithme change legerement celui de Deo et Prasad. En eet, ces derniers presentent l'oe de la suppression, comme une fusion de trois listes. Notre algorithme consiste en fait, a decomposer la fusion sur les trois listes en deux fusions successives. Notre methode peut ^etre appliquee au d-heap. Il sut, en chaque nud T[i], de rechercher l'element le plus prioritaire parmi les d ls de T[i], en utilisant TestPriForList comme fonction de test. 2.1.4 Le Skew-Heap parallele L'algorithme de Skew-Heap est particulierement adapte a notre methode. En eet, comme decrit dans le paragraphe A.2.1.c, l'algorithme de base du Skew-Heap est la fusion (Meld) de deux Skew-Heaps. A partir de cette operation, les operations These Paris VI, Janvier 1996 2.1. Files de priorite synchrones 43 1 Test entre les deux fils. 2 Test entre le fils séléctionné et le père T[i] 3 6 8 T[i] T[2i+1] T[2i] 4 3 13 5 11 12 9 10 14 15 6 T[2i+1] 4 5 9 10 11 12 14 15 TestPriForList 3 Si 2 vrai échange 4 Résultat de l’OE T[i] T[i] 9 3 3 10 13 T[2i+1] T[2i] 4 5 6 13 T[2i] TestPriForList 8 8 11 12 14 15 4 8 5 6 T[2i+1] T[2i] 9 10 13 11 12 14 15 échange Chemin suivit par la suppression. Noeud concerné par une OE. Figure 2.5 : Exemple d'une oe de suppression d'insertion et de suppression peuvent facilement ^etre implementees. Dans la suite, nous gardons le terme anglais Meld pour ne pas creer d'ambigute avec la fusion de notre operation fusion&recopie. 2.1.4.a Operations paralleles sur D elements L'application de la methode presentee precedemment sut a obtenir un Skew-Heap parallele. Le theoreme 1 assure que la structure resultante respecte l'invariant. Le pseudo-code suivant presente la procedure oe modiee. La version sequentielle est presentee dans l'annexe A. procedure oe(p,h1,h2) if (TestPriForList(h1.l,h2.l) then h1$h2 endif left(p):=h1 p:=h1 h1:=right(p) right(p):=left(p) end oe Propriete 8 Le nombre d'oe (au sens de la complexite amortie) pour un nombre n de nuds est de : O(logn): En eet, le parcours est exactement le m^eme qu'en sequentiel, il n'y a ni parcours redondant ni parcours supplementaire. Or, Tarjan [SlTa86] montre que le nombre d'operations elementaires a une complexite amortie en O(logn). These Paris VI, Janvier 1996 2.1. Files de priorite synchrones 44 t 3 4 8 6 Sous−Racine insérée par la précédente opération élémentaire Opération élémentaire x 9 y TestPriForList 10 12 15 11 13 14 17 z w 17 19 23 25 16 20 21 24 t 3 4 6 8 x 9 10 11 12 z w Prochaine opération élémentaire 16 20 21 24 17 19 23 25 y 13 14 15 17 Figure 2.6 : Exemple d'une operation elementaire de fusion de deux Skew-Heaps en parallele Propriete 9 La complexite amortie de l'operation de Meld avec un nombre n de O(log n logD): nuds est de : Le nombre d'oe est log n. Or, chacune d'elles execute une fois la fonction TestPriForList, la complexite d'une operation de Meld est donc O(logn log D). 2.1.4.b Operations paralleles sur E elements L'Insertion L'operation d'insertion est eectuee en fusionnant le Skew-Heap avec le nud a inserer. Si le nud a inserer contient E elements (1 < E < D), cela ne pose pas de probleme particulier. En eet, pour chaque oe, le resultat de la fonction TestPriForList fait que le nud insere est plein, le nud restant a inserer non plein. Le seul nud non plein sera la feuille de la branche construite par l'operation de Meld. En decoule immediatement que seules les feuilles du Skew-Heap pourront ^etre non pleines. Il peut se faire qu'une operation d'insertion n'ajoute pas de nud dans l'arbre. Car si la feuille de la branche parcourue par l'operation contient moins de D ? E elements, il ne sera pas necessaire d'ajouter un nud qui, de toute facon, est vide. La Suppression La suppression est aussi implementee a partir de l'algorithme de Meld. These Paris VI, Janvier 1996 2.1. Files de priorite synchrones 45 Si D elements doivent ^etre supprimes, le nouveau Skew-Heap est obtenu en fusionnant les sous-arbres droit et gauche de la racine. Si la suppression ne concerne que E elements, il reste D ? E elements dans le nud racine. Il faut proceder a un traitement specique pour ces elements. L'operation peut ^etre decoupee en deux sous-operations s'executant en pipeline. 1. Eectuer l'operation de Meld sur les deux Skew-Heap ls de la racine. 2. Inserer les D ? E elements de l'ancienne racine dans le nouveau Skew-Heap. Ces deux sous-operations sont commutatives. 2.1.5 Le Pairing-Heap parallele Le Pairing-Heap est aussi une le de priorite fondee sur la notion de complexite amortie [FSST86]. Une description complete peut ^etre trouvee dans l'annexe A. Nous commencons par exposer les algorithmes des operations pour D elements, puis pour un nombre plus petit E elements. 2.1.5.a Operations sur D elements Comme presente dans le paragraphe precedent, la methode peut ^etre appliquee telle quelle a partir du code sequentiel. Les pseudo-codes des operations d'insertion et de suppression sont : procedure Insertion(x,h) begin if (h=null) then h:=x else FirstBrother(x):=FirstSon(h) FirstSon(h):=x if TestPriForList(x.e,h.e) then x.e$h.e endif endif end Insertion function pairing(h) begin if (h=null) then return null endif if (FirstBrother(h)=null) then return h endif n:=FirstBrother(h) FirstBrother(h):=null reste:=FirstBrother(n) if TestPriForList(h.l,n.l) then h$n endif FirstBrother(n):=FisrtSon(h) FisrtSon(h):=n FirstBrother(h):=pairing(reste) if TestPriForList(FirstBrother(h).l,h.l) then tmp:=FirstBrother(h) FirstBrother(h):=FirstBrother(tmp) These Paris VI, Janvier 1996 2.1. Files de priorite synchrones 46 FirstBrother(tmp):=h return tmp endif return h end pairing 2.1.5.b Operations sur E elements Comme pour les autres tas, la methode peut ^etre appliquee telle quelle. Mais la representation du Pairing-Heap etant un arbre n-aire, la place memoire occupee n'est pas optimisee. Beaucoup de nuds peuvent ^etre non pleins. Nous presentons des modications de l'algorithme permettant de ne garder qu'un nombre reduit de nuds non pleins. L'Insertion Si un nud est insere, il devient le premier ls de la racine. Donc, si k nuds non pleins sont inseres a la suite, il existe k nuds non pleins dans l'ensemble des ls de la racine. Il est possible de ne garder qu'un seul nud non plein, au bout de k insertions. En eet, une insertion place le nud insere en tant que premier ls de la racine. Il est donc simple de maintenir, le premier ls comme seul nud non plein, avec une complexite de O(log D). Nous notons le premier ls de la racine y. L'insertion du nud x debute par eectuer le test sur x et la racine. Puis, x est "vide" pour remplir y. Ensuite si x est non vide, il est insere en tant que premier ls de la racine. La Suppression La suppression ne pose pas de reel probleme. Si moins de E elements sont supprimes, la racine ne contient plus que D ? E elements. Or l'algorithme de Pairing consistant a trouver une racine, a partir d'une liste de nuds, l'ancienne racine peut ^etre consideree comme faisant partie integrante de la liste de nuds. An de montrer que la structure optimise les ressources memoires, nous devons demontrer que si un element est non plein, il est une feuille du tas. L'insertion d'un nud x, consiste a placer x comme ls de la racine. Or x est une feuille, donc l'insertion ne genere pas de nuds non pleins qui ne soient pas une feuille. Il reste donc a demontrer que les modications de la representation engendrees par l'operation de suppression ne generent pas de nuds non pleins en dehors des feuilles. L'operation de Pairing utilise la fonction TestPriForList pour grouper deux nuds consecutifs. Cette operation ne peut pas transformer un nud plein en un nud non plein. La seule facon de generer un nud non plein qui n'est pas une feuille, est donc de grouper deux nuds tel que le nud non plein devienne le pere du nud plein. Cette operation ne peut generer une telle conguration, car si il existe un nud x qui est plein parmi les deux, x recevra les elements les plus prioritaires. Il deviendra donc obligatoirement le pere de l'autre nud. Il est donc clair que seule une feuille du tas peut ^etre non pleine. 2.1.6 Conclusion Nous avons propose une methode appelee fusion&recopie, applicable a tous les tas de la litterature. These Paris VI, Janvier 1996 2.2. Files de priorite asynchrones 47 Nous avons montre son application a trois d'entre eux, le d-Heap, le Skew-Heap et le Pairing-Heap. Il est vrai que le surco^ut engendre est consequent (voir le chapitre 1). Mais il represente le prix a payer si on veut une une structure SDDP assurant un equilibrage parfait et une semantique stricte de l'operation de suppression. D'autres les de priorite SDDP comme celle de Diderich et Gengler [DiGe94] assurent aussi une semantique stricte de l'operation de suppression avec un surco^ut moins important. Mais leur fonctionnement est fondee sur un comportement de l'application bien specique (voir le paragraphe 1.2.4.b). De plus, dans un environnement distribue, elle n'assure pas un equilibrage parfait en terme de place memoire occupee. Comme nous l'avons vu et comme nous le verrons plus precisement par la suite, une SDOP engendre un moindre surco^ut. Ce modele s'avererait donc plus interessant. En fait, d'autres facteurs vont entrer en ligne de compte. Par exemple, la capacite des structures SDOP asynchrones depend du nombre d'elements stockes. Si le nombre de processus disponibles est superieur a la capacite limite, des processus risquent de perdre beaucoup de leur temps dans l'acces a la structure. Ensuite, dans un environnement distribue, pour des raisons d'optimalite de la capacite d'une SDOP asynchrone, le placement de la structure n'equilibre pas la place memoire occupee. Si les elements stockes sont tres volumineux, un tel placement peut s'averer impossible suite a la capacite memoire de chacune des machines. Les SDOP synchrones (voir le paragraphe 1.3.2) ne sont pas limitees en capacite comme leurs analogues asynchrones. Toutefois, la complexite de leurs operations dependent du nombre d'elements n, alors que la complexite des operations d'une SDDP depend de Dn . Si l'application accepte des operations synchrones, le choix entre une le de priorite parallelisee par notre methode fusion&recopie et une SDOP synchrone, est donc guide par les valeur de n et de D. Ces structures sont tres interessantes si les elements a stocker sont tres volumineux, si peu d'operations sont eectuees, si le rapport nombre d'elements sur le nombre de processus est trop petit pour utiliser une SDOP, et si nalement l'operation de suppression doit avoir une semantique stricte. 2.2 Files de priorite asynchrones Nous revenons sur le modele SDDP asynchrone. La structure etant composee de D sous-structures, ce modele rel^ache la semantique de l'operation de suppression et necessite une strategie d'equilibrage de charge. 2.2.1 E quilibrage de charge et machine a memoire distribuees Il est clair que l'equilibrage de charge est LE probleme a resoudre dans ce modele. La litterature orissante sur le sujet est justiee d'ailleurs par sa diculte. Comme nous l'avons dit au chapitre precedent, dans le cas des les de priorite, l'equilibrage de charge doit prendre en compte les deux notions suivantes : 1. la "qualite" des elements, 2. la quantite d'elements. These Paris VI, Janvier 1996 2.2. Files de priorite asynchrones 48 Tous les travaux ont montre l'importance qu'il y avait a combiner ces deux notions, pour obtenir une strategie d'equilibrage de charge ecace. Plus la charge locale prend en compte la qualite des elements, plus la semantique de l'operation de suppression est respectee. A partir du moment ou l'on accepte de rel^acher la contrainte de semantique sur l'operation de suppression, on essaie de minimiser le nombre d'executions de la procedure d'equilibrage de charge, pour reduire le co^ut global de la gestion de la structure en parallele. Pour vouloir minimiser le nombre d'execution de la procedure d'equilibrage de charge, il faut conna^tre precisement la charge de travail qui sera generee a partir de chaque element. Dans beaucoup d'applications, cette charge est dicile a calculer. Car comme le montre Roch, Villard et Roucairol [AGFR+95], si le graphe de precedence caracteristique de l'application est semi-previsible ou non previsible (exemple: algorithme de parcours d'espace de recherche), cette charge n'est pas connue a l'avance. Dowaji propose une fonction heuristique appelee potentialite qui attache a un element x (un sommet de graphe de precedence) l'evaluation de la charge dont il est l'initiateur, c'est-a-dire une evaluation de la charge representee par le sous-graphe de racine x. Il demontre l'ecacite de cette notion pour les algorithmes de Branch and Bound. Toutefois, cette notion est aussi utilisee comme nouvelle priorite vis-a-vis de l'application. Un processus qui demande un sous-probleme a explorer, n'obtient pas celui de meilleure evaluation mais celui de plus grande potentialite. Il n'est pas impossible que cette nouvelle forme de priorite pour un algorithme de recherche soit meilleure que la classique valeur de la fonction d'evaluation. Mais en tous cas, la strategie de recherche n'est plus meilleure evaluation d'abord, mais meilleure potentialite d'abord. La notion de priorite utilisee pour les operations sur la le de priorite globale est confondue a celle utilisee pour minimiser le co^ut de l'equilibrage de charge. Deux criteres de priorites 1. pour l'application, 2. pour l'equilibrage, sont donc distincts voir antagonistes. Le premier peut ^etre qualie d'externe. Il est utilise par les operations sur la le de priorite globale qui sont demandees par la procedure de traitement. Le second est utilise en interne de la le globale, pour choisir les elements qui seront transferes lors de l'equilibrage de charge. La notion de priorite pour l'equilibrage peut integrer celle utilisee pour l'application. Le calcul de la potentialite d'un element x, introduite par Dowaji, utilise dans ce contexte, l'evaluation de x au sens Branch and Bound. Or, cette valeur est consideree comme la priorite de x, dans un Branch and Bound meilleur d'abord. La notion de potentialite inclut donc non seulement une charge de travail mais aussi la priorite du nud. Plus elle l'integrera, plus la semantique de l'operation de suppression sera respectee. Cette separation des deux notions, permet d'exprimer, ce que doit ou peut faire l'equilibrage de charge, tout en laissant la notion de priorite pour le cote applicatif inchangee. Chaque sous-structure de la structure globale SDDP doit donc supporter les operations sur ces deux criteres. These Paris VI, Janvier 1996 2.3. Conclusion 49 Gendron et Crainic [GeCr95], ont appele cette seconde priorite, une priorite de deuxieme ordre, proposant ainsi une graduation de ces deux criteres, l'un etant plus important que l'autre. Ceci ne nous parait pas justie, un element peut ^etre le plus prioritaire pour l'application et pour l'equilibrage de charge. Pour renforcer cette reexion, un parallele peut ^etre fait avec les travaux d'ordonnancements, ou de placements, dans un systeme distribue. Dans ce contexte, une t^ache peut avoir une certaine duree, un certain co^ut d'utilisation des ressources du site (CPU, memoire, disque, etc), mais aussi une certaine priorite. Les t^aches les plus longues ou les plus courtes, ne sont pas forcement les plus prioritaires. Nous retrouvons encore les deux notions distinctes. 2.2.2 Une le de priorite "virtuelle" ou systeme Dans le cadre du projet STRATAGE ME, des travaux ont ete realises pour utiliser des regulateurs de charge dynamique, dans des applications paralleles en Optimisation (Branch and Bound), et en Algebre lineaire (factorisation de Choleski sur des grandes matrices creuses). Nous avons contribue au travail realise pour les applications Branch and Bound. En considerant la procedure d'exploration d'un element ou d'un sous-arbre eectuee par la methode Branch and Bound comme une t^ache systeme d'un systeme distribue (un thread dans un environnement multi-threade), nous avons etudie le comportement de regulateur de charge propose par les deux equipes de STRATAGE ME; Lille- LIFL et Grenoble - LMC-IMAG. Le regulateur dynamique de charge integre au systeme joue en fait le r^ole de la procedure d'equilibrage de charge d'une structure SDDP, et le "scheduler" sur chaque processeur, integrant une le de priorite de t^aches a executer, joue un r^ole equivalent a celui de la sous-le de priorite. Deux regulateurs de charge ont ete utilise PM2 [NaMe95, NaMe95b, AGFR+95] et Athapascan [AGFR+95]. Notre contribution a surtout consister a integrer dans la bibliotheque BOB (voir chapitre6), ces deux regulateurs de charge. Denneulin (E quipe LIFL, Lille) pour PM2 et Vermerbergeen (E quipe IMAG, Grenoble) pour Athapascan continuent ces travaux. 2.3 Conclusion Nous nous sommes interesse dans ce chapitre a la parallelisation SDDP des les de priorite. Nous avons propose d'une part, une methode generale appelee fusion&recopie permettant de paralleliser en SDDP tous les tas de la litterature. Cette methode utilise une formulation de l'invariant pour une for^et de tas. Elle est fondee sur l'algorithme fusion&recopie permettant de rendre comparables deux listes d'elements tries par ordre croissant. Son inter^et est d'assurer une semantique stricte de l'operation de suppression et un equilibrage parfait des sous-les, tout en orant une capacite egale au nombre de processus utilisees. Nous avons ensuite montre l'inuence de notre vue de la parallelisation SDDP d'une le de priorite, sur la conception d'un algorithme d'equilibrage de charge pour machine a memoire distribuee. L'etude d'un equilibrage fonde sur deux criteres, donc deux notions dierentes de priorite nous semble une voie a explorer dans le futur. These Paris VI, Janvier 1996 2.3. Conclusion 50 Nous esperons pouvoir continuer la collaboration avec les laboratoires de Lille et Grenoble, pour valider cette idee en utilisant les bibliotheques PM2 et Athapascan. These Paris VI, Janvier 1996 51 3 Structures de donnees a operations paralleles Chapitre Au chapitre 1, nous avons presente la classe de structures de donnees a operations paralleles (SDOP). Cette classe se caracterise par l'utilisation d'une seule representation. Les operations en version asynchrone accedent a la representation en pipeline. L'inter^et de ces structures est qu'elles respectent strictement la semantique de l'operation de suppression pour les les de priorite. Et contrairement aux structure SDDP, il n'est pas necessaire d'utiliser une strategie d'equilibrage de charge. Plusieurs structures de ce type ont ete proposees dans un contexte de machine a memoire partagee et distribuee. Toutes utilisent le pipeline comme technique de base. Le but de ce chapitre est de proposer une methode generale de parallelisation SDOP asynchrone, de structures de donnees arborescentes. Notre methode se veut unicatrice dans le cas ou toutes les operations modient la SD, c'est a dire lorsque tous les acces sont des ecritures. Nous presentons d'abord la methode sur machine a memoire partagee, appelee dans ce contexte "verrouillage partiel". Elle est fondee sur l'utilisation de primitives d'exclusion mutuelle pour assurer la coherence de chaque entite modiable de la structure. Chaque processus doit d'abord verrouiller un nud si il veut le modier. Une utilisation non contr^olee de ces primitives entra^ne des risques d'interblocage. Nous proposons trois schemas de verrouillage pouvant ^etre appliques a la plupart des structures de donnees arborescentes. Nous montrons pour chacun d'eux l'inexistence d'interblocage. Les primitives d'exclusion mutuelle etant a l'origine de fort surco^ut, nous montrons que dans certains cas, une seule primitive est necessaire, les acces exclusifs sur les nuds de la structure etant assures par un mecanisme de marquage. Ce travail a fait l'objet de plusieurs conferences : pour plusieurs les de priorite dans une simulation de B&B : International Workshop On Principles Of PArallel Computing, OPOPAC'93, decembre 1993, Hermes, France. pour la treap dans un algorithme A* : Canada-France conference on PARallel computing, mai 1994, Universite Concordia, Montreal, Canada. These Paris VI, Janvier 1996 3.1. Verrouillage partiel 52 pour plusieurs les de priorite dans des B&B resolvant les problemes de l'Aectation Quadratique, et du Voyageur de Commerce : IFIP WG 10.3 International Workshop and Summer School on Parallel Algorithms for Irregular structured Problems, septembre 1994 , Geneve. Nous etendons ensuite la methode aux machines a memoires distribuees. Cette extension est fondee sur une simulation d'une memoire partagee sur machine a memoire distribuee, utilisant des appels de procedures a distance. L'inter^et de cette methode etendue est multiple. Elle permet d'exprimer toutes les structures de donnees proposees dans la litterature par l'utilisation de dierents modes operatoires de la simulation. Les surco^uts provenant du nombre d'appels de procedures a distance, nous montrons qu'ils peuvent ^etre reduits pour les les de priorite a information interne. 3.1 Verrouillage partiel Une operation sur une structure de donnee est composee d'une suite d'operations elementaires. Un processus voulant realiser une operation sur une SD, n'a donc besoin que d'une petite partie de la SD a un instant donne. L'acces a cette petite partie peut ^etre protege par une primitive d'exclusion mutuelle. D'autres processus peuvent ainsi realiser leurs operations en m^eme temps sur la m^eme SD. Cette methode entra^ne l'utilisation de primitives d'exclusion mutuelle dans chacune des entites modiables de la structure. Pour une liste ou pour un arbre, cette entite est un nud. Pour un tableau, l'entite sera une case du tableau, etc. La notion de verrouillage partiel pose un certain nombre de problemes comme: Famine : un processus doit pouvoir acceder a la structure de donnee en un temps ni, Interblocage: les processus ne peuvent verrouiller une partie de la structure sans obeir a certaines regles, car l'utilisation de verrous peut entra^ner l'interblocage des processus, E quite : tous les processus ont la m^eme chance d'acceder a la structure. Les problemes de Famine et d'E quite sont lies aux primitives d'exclusion mutuelle utilisees. La plupart des machines a memoire partagee actuelles ore des primitives d'exclusion mutuelle resolvant ces problemes. L'interblocage est plus dicile a resoudre. En eet, si les processus verrouillent des parties de la structure sans obeir a certaines regles, a certain protocole, les processus se trouveront bloques. Le paragraphe suivant presente dierents protocoles de verrouillage emp^echant les inter blocages dans le cadre de structures de donnees arborescentes. 3.2 Verrouillage partiel pour les structures de donnees arborescentes Nous presentons la methode sur des SD de type arbre. Nous supposons que chacun des nuds de l'arbre peut ^etre verrouille individuellement. 3.2.1 Protocole avec verrou Dans la litterature (Bistwas et Borwne [BiBr87], Rao et Kumar [RaKu88], Jones [Jone89]), la partie de l'arbre verrouillee par un processus est appelee fen^etre ou bulle. These Paris VI, Janvier 1996 3.2. Verrouillage partiel pour les structures de donnees arborescentes 53 Denition 10 La fen^etre d'un processus Pi realisant une operation de base sur une structure arborescente S , est denie comme etant l'ensemble Fi des nuds x de S tel que : si Pi a un verrou sur x, x appartient a Fi , si Pi n'a pas de verrou sur x et x est antecedent d'un nud y appartenant a Fi et successeur d'un nud z appartenant a Fi , alors x appartient a Fi . Des exemples de fen^etres sont presentes dans les gures 3.1 et 3.2. Pour eviter les interblocages de processus, il sut que ces derniers, lors de la realisation d'une operation de base, obeissent a un schema de verrouillage qui interdise la creation de cycles de processus attendant le verrouillage de nuds. Nous proposons deux schemas de ce type, s'appliquant aux structures arborescentes dont toutes les operations de base parcourent l'arbre dans un m^eme sens : feuille-racine, ou racine-feuille. Le principe de ces schemas est de permettre aux processus, la construction et le deplacement de fen^etres, pendant la duree d'une operation de base, sous certaines contraintes assurant l'inexistence d'interblocage. Les schemas de verrouillage presentes supposent qu'un processus n'essaiera pas de verrouiller un nud sur lequel il detient deja un verrou. Pour toutes les demonstrations, nous utilisons les notations suivantes : S structure arborescente dont les operations de base se realisent toutes dans le m^eme sens, N ensemble des nuds composant S, r racine de S, P = fP1; :::; Ppg ensemble des p processus pouvant realiser des operations de base sur une structure S, un antecedent de x est deni comme etant un sommet appartenant au chemin (unique) entre la racine et x, y est un successeur de x si x est antecedent de y. Denition 11 Soit une structure arborescente S dont toutes les operations de base sont realisees dans le sens racine-feuille (respectivement sens feuille-racine). Le schema, dit de type 1 est deni par les contraintes ci-dessous. Verrouillage : un processus peut verrouiller un nud x de S, Cas 1 : ssi il detient le verrou du nud pere (respectivement d'un des nud ls) de x, Cas 2 : un processus peut verrouiller la racine (respectivement une feuille) de S , ssi il ne detient plus de verrou dans S . Deverrouillage : un processus peut deverrouiller un nud x de S, ssi il ne detient pas de verrou sur le pere de x. (respectivement sur un des ls de x). La fen^etre generee par l'utilisation de ce schema 1 dans le sens feuille-racine est telle que les nuds qui la composent recouvrent un sous arbre connexe de S. Plus precisement, dans le sens feuille-racine, les nuds de la fen^etre recouvrent un chemin de l'arbre. La fen^etre est generee en "remontant vers la racine. These Paris VI, Janvier 1996 3.2. Verrouillage partiel pour les structures de donnees arborescentes Sens Racine−Feuille Fenetre 54 Sens Feuille−Racine Noeud pouvant etre deverrouille Noeud verrouille Noeud pouvant etre verrouille Figure 3.1 : Exemple de fen^etre pour le schema 1. These Paris VI, Janvier 1996 3.2. Verrouillage partiel pour les structures de donnees arborescentes 55 Dans le sens racine-feuille, la fen^etre est composee initialement de la racine, puis elle s'etend, pour recouvrir un ou plusieurs sous arbres eventuellement disjoints de la structure. Une variation de ce schema a ete presente par Jones [Jone89] et pour la parallelisation du Skew-Heap. De m^eme, Mans et Roucairol [MaRo90], pour une autre parallelisation du Skew-Heap et pour le Funnel-Tree, utilise un schema similaire. Nous degageons plusieurs proprietes, permettant de denir les caracteristiques de notre schema. Lemme 1 Le schema 1 assure que pendant la duree d'une operation de base sur S de sens racine-feuille (respectivement feuille-racine), le verrouillage de la racine (respectivement d'une feuille) correspond au premier verrouillage possible de la structure S . Preuve: La preuve est immediate d'apres le cas 2 du schema. 2 Lemme 2 Appelons x un nud d'une structure S, ou toutes les operations de base se realisent dans le sens racine-feuille (respectivment feuille-racine). Supposons que Pi , appartenant a P , detient un verrou sur x et aucun verrou sur tout descendant (respectivment antecedent) de x. En suivant le schema 1, si Pi veut un verrou sur un nud y descendant (respectivment antecedent) de x, alors il devra verrouiller, par etapes successives, tous les nuds du chemin de x a y. Preuve: (dans le sens racine-feuille) Si Pi veut poser un verrou sur y, alors par le cas 1 du schema, il doit d'abord verrouiller le pere de y. De m^eme, pour verrouiller le pere de y, il doit d'abord verrouiller le grand pere de y. Ceci jusqu'a x. Donc si Pi veut un verrou sur y, il doit d'abord detenir le verrou de chaque nud composant le chemin de x a y. La demonstration dans le sens feuille-racine se fait de maniere analogue. 2 Lemme 3 Soit une structure S, ou toutes les operations de base se realisent dans le sens racine-feuille. Soient deux nuds x et y de S , x etant antecedent de y. Le schema 1 assure que si Pi detient un verrou sur x et si Pj detient un verrou sur y, alors Pi a verrouille la racine apres Pj . Preuve: Suivant le lemme 1, initialement, Pi et Pj n'ont de verrous sur aucun nud de S. Si Pi a un verrou sur x alors d'apres le lemme 2, il a d^u detenir un verrou sur chacun des nuds antecedents de x. Supposons que Pj ait detenu un verrou sur la racine apres Pi . Si Pj a un verrou sur y, alors par le lemme 2, il a du detenir un verrou sur chacun des nuds antecedents de y. Or x est un antecedent de y donc, si Pi a un verrou sur x, Pj n'a pas pu verrouiller tous les antecedents de y. Pj ne pourra donc pas avoir de verrou sur y. Nous pouvons en deduire que si Pi a un verrou sur x et si Pj a un verrou sur y alors, il est impossible que Pi ait detenu un verrou sur la racine de S avant Pj . 2 Lemme 4 Soit une structure S, ou toutes les operations de base se realisent dans le sens racine-feuille (respectivment feuille-racine). Soient deux nuds x et y de S , x etant antecedent (respectivment descendant) de y, de y. D'apres le schema 1, si un processus Pi a un verrou sur x et y, alors, il n'existe pas de processus Pj (i 6= j ), ayant un verrou sur un nud z du chemin de x a y. These Paris VI, Janvier 1996 3.2. Verrouillage partiel pour les structures de donnees arborescentes 56 Preuve: Si Pi a un verrou sur x et Pj a un verrou sur z (avec x antecedent de z), alors, d'apres le lemme 3, Pj a detenu un verrou sur la racine de S avant Pi . De m^eme, si Pj a un verrou sur z et Pi a un verrou sur y (avec z antecedent de y), alors d'apres le lemme 3, Pi a detenu un verrou sur la racine de S avant Pj . Nous aboutissons a une contradiction : si Pi detient un verrou sur x et y alors il n'existe pas de processus Pj (i 6= j), ayant un verrou sur un nud z du chemin de x a y. 2 Propriete 10 Le schema 1 assure l'inexistence d'interblocage des processus durant l'execution d'une operation de base de la structure S . Preuve: Nous allons demontrer que, pour tout x et y appartenant a N et pour tout Pi et Pj appartenant a P , avec i 6= j, si Pi a un verrou sur x et Pj a un verrou sur y, alors Pi ne peut demander un verrou sur y alors que Pj demande un verrou sur x. Sens Feuilles-Racine. Les deux cas sont a examiner. x est un antecedent de y. Si Pi veut mettre un verrou sur y, il doit detenir le verrou d'un des ls z de y, donc Pi doit avoir les verrous de x et z et Pj le verrou de y. D'apres le lemme 4 ce cas est impossible, donc il ne peut pas se creer d'interblocage. Il n'existe pas de chemin entre x et y. Si Pi veut mettre un verrou sur y, alors d'apres le lemme 2, il a du verrouiller une feuille z, descendante de y. Or il detient un verrou sur x, dont les feuilles descendantes sont dierentes de z. Le cas 2 du schema a donc ete viole. Il ne peut donc pas se creer d'interblocage. Sens Racine-Feuilles. Deux cas se presentent a nouveau. x est un antecedent de y. Si Pj veut mettre un verrou sur x, il doit detenir le verrou de z, pere de x. Nous avons la conguration ou Pj detient un verrou sur z et y sachant que Pi detient un verrou sur x (nud du chemin de z a y). D'apres le lemme 4, ce cas est impossible. Donc il ne peut pas se creer d'interblocage. Il n'existe pas de chemin entre x et y. Si Pi veut poser un verrou sur y, il doit avoir un verrou sur le pere de y. Or Pj ayant un verrou sur y, le lemme 3 assure que Pi a verrouille la racine apres Pj . De m^eme, si Pj veut poser un verrou sur x, il doit avoir un verrou sur le pere de x. Or Pi ayant un verrou sur x, d'apres le lemme 3 Pi a verrouille la racine avant Pj . Nous arrivons donc a une contradiction. Dans chaque sens, la generalisation a n processus se fait de m^eme. 2 Dans le sens racine-feuille uniquement, nous pouvons donner un schema moins contraignant. Denition 12 Soit une structure arborescente S ou toutes les operations de base sont realisees dans le sens racine-feuille. Le schema de type 2 est deni par les contraintes suivantes. Verrouillage. un processus ne peut verrouiller un nud x de S, que : These Paris VI, Janvier 1996 3.2. Verrouillage partiel pour les structures de donnees arborescentes 57 Cas 1 : s'il detient le verrou du nud pere de x, Cas 2 : s'il detient deja le verrou d'un nud antecedent x et d'un nud descendant de x, Cas 3 : un processus peut verrouiller la racine r de S, ssi il ne detient plus de verrou dans S . Deverrouillage: il n'y a aucune contrainte sur le deverrouillage. Etat initial Verrouillage Fenetre Deverrouillage Noeud pouvant etre deverrouille Noeud verrouille Noeud pouvant etre verrouille Figure 3.2 : Exemple de fen^etre pour le schema 2 Contrairement au schema 1, le schema 2 permet l'existence de nuds non verrouilles, appartenant au chemin reliant des nuds verrouilles par un processus (gure 3.2). Les lemmes 1, 2 3 et 4 appliques pour les operations de sens racine-feuille, peuvent ^etre demontres pour le schema 2 de la m^eme facon que pour le schema 1. Propriete 11 Le schema 2 assure l'inexistence d'interblocage des processus l'utilisant durant une operation de base sur la structure S . Preuve: Nous allons demontrer que pour tout x et y appartenant a N et pour Pi et Pj appartenant a P avec i 6= j, si Pi a un verrou sur x et Pj a un verrou sur y alors Pi ne peut demander de verrou sur y alors que Pj demande un verrou sur x. Deux cas se presentent: x antecedent de y. Si Pj peut demander un verrou sur x alors, soit il a un verrou sur le pere de x (Cas 1), soit il a un verrou sur un nud z antecedent de x et un autre sur un descendant de x (Cas 2). These Paris VI, Janvier 1996 3.2. Verrouillage partiel pour les structures de donnees arborescentes 58 Les deux cas reviennent a la m^eme conguration : celle ou le processus Pj a un verrou sur les nuds z et y et le processus Pi a un verrou sur x (nud du chemin de z a y). D'apres le lemme 4, cette conguration est impossible. Il n'existe pas de chemin entre x et y. Si Pi demande un verrou sur y alors deux cas se presentent : Pi a un verrou sur le pere de y (Cas 1). Si Pi veut poser un verrou sur y, il doit avoir un verrou sur le pere de y. Or Pj ayant un verrou sur y, d'apres le lemme 3, Pi a verrouille la racine apres Pj . De m^eme, si Pj veut poser un verrou sur x, il doit avoir un verrou sur le pere de x. Or Pi ayant un verrou sur x, d'apres le lemme 3, Pi a verrouille la racine avant Pj . Nous arrivons donc a une contradiction. Pi a un verrou sur un nud z antecedent de y et un sur un nud z 0 descendant de y (Cas 2). Par le lemme 4, cette conguration est impossible donc il ne peut pas se creer d'interblocage. La generalisation a n processus se fait de m^eme. 2 Des parallelisations utilisant ce deuxieme schema sont exposees dans les chapitres suivants. La consistance d'une structure dependra de la facon dont les methodes sont utilisees pour un algorithme particulier. La capacite de la SDP depend de la taille de la fen^etre utilisee et de la taille de la structure. Pour une taille d'arbre xee, plus le nombre de nuds verrouilles dans une fen^etre est important, plus le nombre de processus pouvant ^etre presents a un instant donne dans la structure est petit. Pour une taille de fen^etre xee, plus la hauteur de l'arbre est grande, plus le nombre d'operations concurrentes peut ^etre grand. Propriete 12 La capacite d'une SDOP parallelisee par "verrouillage partiel" est de : C = fh ; avec h est la hauteur de l'arbre et f la taille de la fen^etre. 3.2.2 Protocole avec marquage La r^ole des algorithmes d'exclusion mutuelle est d'assurer qu'un seul processus obtienne une ressource alors que plusieurs en ont fait la demande. Nous montrons que dans le cas d'operations realisees dans le sens racine-feuilles, les primitives d 'exclusion mutuelle peuvent ^etre remplacees par des simples mecanismes de marquage. Considerons des operations concurrentes de sens racine-feuilles, realisees sur une structure arborescente S, selon l'un des deux schemas enonces precedemment. Theoreme 2 Si un processus Pi detient un verrou sur un nud x quelconque de S , alors quel que soit y ls de x, Pi est le seul processus a pouvoir demander un verrou sur y. Preuve: Nous allons demontrer par l'absurde qu'il n'existe pas de processus Pj (j 6= i) pouvant faire une demande de verrou sur l'un des ls de x. En eet, si Pj peut demander le verrou d'un nud ls y de x alors : soit Pj a un verrou sur le pere de y, ce qui est impossible car Pi le detient, These Paris VI, Janvier 1996 3.3. Extension de la methode aux machines a memoire distribuee 59 soit il detient un nud anc^etre de y et un nud appartenant a la descendance de y (deuxieme schema). Le lemme 4 montre alors que cette conguration est impossible. Donc, Pi est le seul processus a pouvoir demander un verrou sur un des ls de x. 2 D'apres ce theoreme, si on utilise un des schemas de verrouillage enonces plus haut dans le sens racine-feuilles alors, sauf pour la racine de l'arbre, nous pouvons utiliser un simple mecanisme de marquage d'un nud au lieu d'une primitive d'exclusion mutuelle. Pour implanter la notion de marquage d'un nud x, chaque nud x de S contient une variable Mrk, indiquant si x est marque ou non. Les algorithmes pour marquer et pour enlever la marque d'un nud x sont les suivants: Mettre Marque (x) tant que x:M rk=MARQUE faire attendre x:M rk =MARQUE Enleve Marque(x) x:M rk =NONMARQUE Le nud racine n'a pas de pere et par suite, plusieurs processus peuvent essayer de le verrouiller en m^eme temps. Un algorithme d'exclusion mutuelle devra donc ^etre utilise pour ce nud particulier. 3.3 Extension de la methode aux machines a memoire distribuee La methode presentee dans le paragraphe precedent est fondee sur le fait que sur une machine parallele a memoire partagee, les dierents processus peuvent acceder a une memoire commune. Que cette memoire soit physiquement ou virtuellement partagee, elle ore les proprietes suivantes ([CoNR92, CoTr93]) : la coherence, une modication eectuee sur une variable partagee est visible par tous les processus, l'adressage global, l'adresse d'une variable partagee est la m^eme quel que soit le processus. Sur une machine a memoire physiquement partagee, le probleme est resolu de facon materielle. En revanche sur une machine ou la memoire partagee est simulee, il est plus dicile d'assurer ces proprietes ecacement. La coherence dans cet environnement implique soit une gestion repartie de la modication, soit une gestion centralisee. Dans la litterature (voir chapitre 1), les algorithmes concernant la gestion des structures de donnees dans un environnement distribue, proposent des solutions qui rel^achent la semantique de l'operation de suppression dans une le de priorite, orent des operations synchrones, ou encore placent statiquement la structure sur le reseaux de processus. Nous proposons un algorithme distribue s'appliquant aux structures de donnees arborescentes se fondant sur la methode precedente. Les operations sont asynchrones, et la semantique de l'operation de suppression des les de priorite est respectee dans son sens le plus stricte. Cette extension peut appara^tre comme une These Paris VI, Janvier 1996 3.3. Extension de la methode aux machines a memoire distribuee 60 generalisation des parallelisations par l'approche SDOP sur machine distribuee. L'idee est de simuler une memoire partagee specique a la structure de donnees. Pour cela il faut denir un adressage global, pour reperer les elements de la structure sur l'ensemble des processeurs, et denir un mode operatoire sur l'espace global. Nous presentons d'abord, la simulation d'un espace global pour la structure, puis deux modes operatoires permettant son parcours. Nous expliquons et demontrons la coherence de la structure lors d'operations qui modient sa representation. Finalement, nous donnons un exemple concret d'implementation se basant sur la le de priorite Skew-Heap, ainsi que des ameliorations reduisant la complexite en messages. 3.3.1 Simulation de l'espace global, et modes operatoires L'espace global specique a la le de priorite sur une machine a memoire physiquement distribuee peut ^etre aisement simule en introduisant la notion de pointeur global. Denition 13 Un pointeur global sur un nud x de la structure contient deux informations : l'identicateur i du processus ou se trouve x ainsi que l'adresse de x dans l'espace d'adressage du processus i. 1 2 3 Racine Racine Racine B H D C F I E A J G Racine B G A 1 1 C 2 J H 3 F 2 D 3 I 1 3 2 E 2 Figure 3.3 : Exemple de repartition de la structure Une operation etant denie comme une suite d'operations elementaires (oe) sur un sous ensemble de nuds, eectuer une operation consiste a recuperer l'adresse globale de la racine, puis a parcourir la structure de donnees selon le chemin deni par l'algorithme de l'operation. Un processus accede a un nud par l'utilisation du mode operatoire. Denition 14 Un mode operatoire denit comment un processus i lit ou modie les informations contenues dans un nud x se trouvant sur un processus j (i 6= j ). These Paris VI, Janvier 1996 3.3. Extension de la methode aux machines a memoire distribuee 61 Nous pouvons denir deux modes operatoires distincts fondes sur l'appel de procedure a distance (APD). Denition 15 Le mode operatoire par appel d'operations elementaires a distance consiste pour un processus i a realiser une oe sur un nud x par APD. Ce mode permet d'executer une partie de l'operation sur le site distant. Un parcours est dans ce mode une suite d'APD recursifs, suivant les adresses globales des nuds du chemin. Chaque procedure distante est une oe sur un nud ou un groupe de nuds. Dans ce cas, un nud est xe a un processus, l'operation est executee par dierents processus. Denition 16 Le mode operatoire par gestion de cache consiste pour un processus i a realiser une oe sur un nud x en local. Le nud x est prealablement transfere du processus distant vers i. Pour acceder a un nud de la structure, il faudra d'abord le transferer du site distant vers l'espace d'adressage local. Dans ce cas, l'operation est toujours executee sur le m^eme processus, mais les donnees sont transferees. Nous revenons plus en detail sur ces deux modes operatoires lors de la presentation de l'exemple (paragraphe 3.3.3). Nous les comparons en terme de complexite en taille et en nombre de messages. 3.3.2 Gestion de la coherence Apres avoir deni, l'adressage global (ou est le nud ?) et le mode operatoire (comment eectuer une operation sur le nud ?), il nous reste a denir comment gerer la coherence des donnees et donc de la structure. Nous nous placons dans le cadre de structures de donnees qui acceptent le schema de verrouillage de type 1 dans le sens racine-feuille ou celui de type 2. Nous considerons le verrouillage d'un nud comme une interdiction de l'execution du mode operatoire sur ce nud. Si le mode operatoire est l'acces par operation a distance, le nud considere doit ^etre verrouille avant de commencer la oe. Si le mode operatoire est l'acces par gestion de cache, le nud ne peut ^etre transfere qu'apres l'avoir verrouille. Ces schemas de verrouillage assurent qu'un seul processus ne peut demander un verrou sur un nud (excepte la racine) a un instant donnee (voir le theoreme 2). D'une part, la notion de marquage peut ^etre utilisee pour interdire l'execution du mode operatoire. D'autre part, un processus n'a pas besoin d'informer les autres d'une modication qu'il a eectuee (a l'exception de la modication de l'adresse du nud racine). Ce qui signie que la simulation de la memoire partagee n'a pas besoin de mettre en uvre un mecanisme de coherence forte des entites modiables de la structure (pointeurs, valeurs, etc). Si les processus respectent le schema de verrouillage, ils n'auront connaissance de la modication que si elle leur est utile. En revanche, si cette modication porte sur l'adresse du pointeur racine, il est necessaire de gerer pour ce cas, et pour ce cas seulement, une coherence forte. Cette gestion peut prendre dierentes formes: centralisee, un processus specialise a toujours la derniere valeur connue, par cha^nage du dernier processus possedant la derniere valeur connue, par jeton, avec demande du jeton pour avoir la derniere valeur. L'avantage de cette simulation specique est d'^etre mieux adaptee au probleme. Le surco^ut qu'entra^ne une gestion de la coherence forte sur toutes les entites modiables de la structure est evite. These Paris VI, Janvier 1996 3.3. Extension de la methode aux machines a memoire distribuee 62 3.3.3 Exemple : le Skew-Heap Nous expliquons en detail l'algorithme sequentiel et concurrent du Skew-Heap. Puis, nous montrons comment appliquer l'algorithme precedent dans les deux modes operatoires d'abord pour les nuds, puis pour le pointeur racine. 3.3.3.a Les operations sequentielles En annexe A.2.1.c sont reportes les algorithmes sequentiels des operations du SkewHeap. Le pseudo-code est celui des operations de base du Skew-Heap rendues concurrentes par l'application du schema de verrouillage de type 2 (denition 12). Il sut de retirer les appels aux primitives d'exclusion mutuelle (Lock, UnLock) pour obtenir le code sequentiel. procedure insert(root,x) begin left(x):=null; right(x):=null MeldRoot(root,x) end insert function deletemin (root) begin return MeldRoot(root,null) end deletemin function MeldRoot(root,h1) begin LockRoot(root) if (h1=null) then x:=root Lock(x); h1:=right(x); h2:=left(x); UnLock(x) else x:=null h2:=root endif if (h1=null) then root:=h2; UnLockRoot(root) return(x) elif (h2=null) then root:=h1; UnLockRoot(root) return(x) endif if (Pri(h1)>Pri(h2)) then h1$h2 endif root:=h1 p = h1 Lock(h1); h1 = right(h1) UnLockRoot(root) Meld (p,h1,h2) return(x) end MeldRoot procedure Meld(p,h1,h2) begin if (h1=null) then right(p):=left(p); left(p):=h2 return end if (h2=null) then These Paris VI, Janvier 1996 3.3. Extension de la methode aux machines a memoire distribuee 63 right(p)$left(p) return end if (Pri(h1)>Pri(h2)) then h1$h2 endif /* start melding */ right(p):=left(p) left(p)=h1 tmp = h1 Lock(h1); h1:=right(h1) UnLock(p) p:=tmp Meld(p,h1,h2) end Meld L'oe concerne donc trois nuds (procedure Meld) p, h1 et h2, pour acceder aux composantes suivantes : 1. les valeurs de priorite de h1 et h2, 2. le nud p (pointeurs left(p) et right(p)), 3. le champs right de h1. Il est a noter qu'il n'est pas necessaire de verrouiller h1 et h2 pour acceder a leur priorite, car le Skew-Heap est un tas a information interne. Les modications portent sur les liens entre les nuds et non pas sur l'element contenu dans un nud. Un pointeur sur un nud a donc le m^eme element associe pendant toute sa duree de vie. Comme il existe un pointeur sur un nud x, il est inutile de verrouiller x pour acceder a l'information. En revanche, si l'acces a un nud x concerne les pointeurs qu'il contient (right(x) ou left(x)), il faut le verrouiller. A la dierence d'une structure de donnees a information externe, comme le dHeap, ou la structure est xe (les liens entre les nuds sont xes une fois pour toute), et les elements changent de place dans la structure, pour acceder a l'information contenue dans un nud, il faut le verrouiller, mais il n'est pas necessaire de le verrouiller pour acceder a ses ls. 3.3.3.b Mode operatoire par gestion de cache Dans ce mode, une premiere approche consisterait a avoir dans l'espace d'adressage du processus realisant l'operation, les trois nuds p, h1 et h2 pour toute la duree de l'oe. Ce qui implique le transfert et le verrouillage des trois nuds pour une oe. Or dans la version memoire partagee, seul le nud p necessite d'^etre verrouille. Cette premiere approche necessite une fen^etre plus grande, et par suite une plus petite capacite de la structure par rapport a celle de la version memoire partagee. Une solution consiste alors a ajouter dans le pointeur global d'un nud, la priorite de l'element associe. Ceci est possible car le Skew-Heap est a information interne. Partant de ce principe, il n'est donc plus necessaire d'avoir a transferer h1 et h2 pour toute la duree de l'oe. Il sut de transferer et verrouiller h1 seulement au moment ou il faut acceder au champ right(h1). Implementer ce mode operatoire est maintenant tres simple: il sut de remplacer dans le pseudo-code concurrent les appels a la fonction Lock(x) par TransfAndLock(x). Cette derniere consiste, par APD, a verrouiller le nud x sur le processus distant, puis a le transferer sur le processus client. L'eet du verrouillage sur le processus distant est toujours valide sur le processus local. These Paris VI, Janvier 1996 3.3. Extension de la methode aux machines a memoire distribuee 64 L'adresse globale de x doit donc maintenant ^etre modiee, car le processus contenant x a change. 1 2 3 Racine Racine Racine Racine K B B 2 1 H K D G C 2 1 C I F E A J G A J 1 H 3 F 1 2 3 Racine Racine Racine 2 D 3 I 2 E 3 2 Racine B 1 B H K C C D A F E G G 1 2 I K J D H 2 F 2 E 2 A 3 I 1 J 3 3 2 Figure 3.4 : Exemple d'insertion dans un Skew-Heap en mode Gestion de cache La gure 3.4 donne un exemple d'execution de l'operation d'insertion du SkewHeap dans ce mode. Propriete 13 Le nombre de transferts de nuds Ntr pour une operation de base du Skew-Heap est : Ntr = logn: En eet, si la complexite d'une operation est en O(logn), le nombre d'executions d'oe est logn, Or seul le transfert du nud p pour chaque oe est necessaire. D'ou le nombre de transferts de nuds. Propriete 14 Le nombre de messages Nmsg pour une operation est : Nmsg = 2 logn: Il faut deux messages pour transferer un nud, et le nombre de transferts est logn. Propriete 15 La somme des tailles de messages Smsg pour une operation est : Smsg = logn (Sag + Snd ): La taille des deux messages utilises pour chaque oe est : Sag taille d'une variable adresse globale, et Snd la taille d'un nud. Or pour une operation, chacun de ces messages est envoye logn fois. 3.3.3.c Mode operatoire par acces a distance Dans ce mode, une operation s'execute recursivement, chacune des operations elementaires (oe) s'executant sur le processus contenant le nud considere. Cette methode peut ^etre assimilee a un cas particulier de la "vague recursive" denie par Lavallee et Florin [FlLa91], puis developpee par Florin, Gomez et Lavallee [FlGL93b, These Paris VI, Janvier 1996 3.3. Extension de la methode aux machines a memoire distribuee 65 FlGL93c, Gome95]. Les auteurs passent en revue nombre d'algorithmes distribues dits de contr^ole, et montrent leur ecacite et leur simplicite d'expression par l'utilisation de cette methode. L'algorithme de fusion concernant trois nuds, deux problemes majeurs surviennent : 1. les trois nuds ne sont pas dans l'espace d'adressage d'un m^eme processus; il faut donc choisir le processus sur lequel l'oe s'eectue, 2. il faut verrouiller le nud ls h1 qui deviendra pere pour l'oe suivante, juste avant de deverrouiller p. Dans ce cas, quel que soit le processus choisi, il y a dans le pire des cas, trois appels de procedure a distance pour chaque oe. 1. Le processus d'accueil de l'oe est celui contenant p. Il est necessaire de faire deux APD pour obtenir les valeurs des priorites de h1 et h2 permettant de faire le choix du nud qui va ^etre ajoute. Un autre appel devra suivre pour verrouiller le nud elu avant de deverrouiller p. 2. Le processus d'accueil est celui stockant h1. Il est necessaire d'avoir au moins un appel pour avoir la valeur de priorite de h2 et un appel pour mettre a jour le pointeur dans p. Mais si h2 est choisi, il y aura un appel supplementaire pour verrouiller h2. 3. Le processus d'accueil est celui stockant h1, le cas est symetrique au precedent. Si nous gardons cette structure, il y aura donc, dans le pire des cas, trois APD pour chaque oe. Il est possible de reduire ce nombre d'appels dans le cas 1, en modiant la notion de pointeur global, de la m^eme facon que precedemment (mode operatoire par gestion de cache). Les deux APD qui etaient necessaires pour acceder aux valeurs de priorite de h1 et h2, ne sont plus utiles. Il n'y a donc plus qu'un seul APD (celui utilise pour verrouiller le nud ls) qui est d'ailleurs asynchrone (sans retour). Il sut donc d'executer le code : Lock(x); x = right(x) sur le processus contenant x par un APD. La fonction Meld sera appelee a distance sur le processus contenant le nouveau pere. La gure 3.5 donne un exemple d'execution de l'operation d'insertion. Propriete 16 Le nombre de APD Napd pour une operation est : Napd = 2logn: Le nombre d'oe pour une operation est logn. Et pour chaque oe, deux APD sont eectues. Propriete 17 Le nombre de messages Nmsg pour une operation est : Nmsg = 2logn: Les deux APD sont asynchrones, donc chacun d'eux ne necessite qu'un seul message. Propriete 18 La somme des tailles de message Smsg pour une operation est : Smsg = logn (4 Sag ): Le message pour la realisation du premier APD contient une variable d'adresse globale, celui du deuxieme APD trois variables d'adresse globale. These Paris VI, Janvier 1996 3.3. Extension de la methode aux machines a memoire distribuee 1 2 3 Racine Racine Racine 66 Racine K B B 2 1 H K D G C 2 1 C I F E A J G A J 1 H 3 F 1 2 3 Racine Racine Racine 2 D 3 I 2 E 3 2 Racine B B K C C D F G G 1 2 I E A 1 H K J D H 2 F 2 E 2 A 3 I 1 J 3 3 2 Figure 3.5 : Exemple d'insertion sur un Skew-Heap en mode acces a distance These Paris VI, Janvier 1996 3.3. Extension de la methode aux machines a memoire distribuee 67 3.3.3.d Coherence de la racine La coherence du pointeur racine du Skew-Heap doit ^etre traitee a part. Il faut d'abord trouver le processus qui detient la valeur valide de la racine. Une fois qu 'il est identie, il faut pouvoir modier le pointeur racine. Il existe beaucoup de facons de le faire. Nous en detaillons trois. Gestion centralisee Un processus est elu comme etant celui detenant toujours la derniere valeur du pointeur racine. mode operatoire par gestion de cache. La fonction LockRoot dans le pseudocode est remplacee par un APD qui, sur le processus specialise, verrouille la racine puis transfere sa valeur sur le processus demandeur. La fonction UnLockRoot est remplacee par une fonction qui fait l'operation inverse, elle transfere la racine du processus demandeur vers le processus specialise puis deverrouille la racine sur le processus specialise. mode operatoire par appels d'operations a distance. La fonction MeldRoot est appelee a distance par le processus demandeur sur le processus specialise. Gestion par cha^nage La variable racine d'un processus i indique l'identite du processus qui a modie la racine juste apres i. De cette maniere, un processus voulant realiser une operation, trouve la derniere valeur de la racine par cha^nage d'adresse globale. Le principe de cette technique est de recuperer la valeur de la racine pour la modier en local, il est donc interessant d'utiliser le mode operatoire par gestion de cache. Gestion par jeton Un jeton contenant la valeur de la racine circule entre les processus. Si un processus veut faire une operation, il prend le jeton lorsqu'il lui parvient. Le principe de cette technique etant d'obtenir la valeur de la racine pour la modier en local, il est interessant d'utiliser le mode operatoire par gestion de cache. 3.3.4 Performances de la methode Nous dissocions les deux modes operatoires, car comme nous allons le voir la capacite resultante n'est pas la m^eme. Nous continuons d'illustrer notre propos sur l'exemple du Skew-Heap. 3.3.4.a Mode operatoire par Gestion de cache La Capacite Soit S une structure de donnees concurrente de capacite Cs parallelisee par les schemas de verrouillage 1 ou 2 sur une machine a memoire partagee. Propriete 19 La structure parallele S 0 parallelisee avec l'extension de la methode sur une machine a memoire distribuee en utilisant le mode operatoire par gestion de cache a la m^eme capacite Cs que la structure S . Le mode d'execution de la structure S 0 est equivalent a celui de S s'executant sur une machine a memoire virtuellement partagee. Une operation n'est eectuee que par un seul processus. Et la taille d'une fen^etre est la m^eme. Les co^uts Les co^uts de cette methode sont bien evidemment tres grands en terme de nombre de messages pour une operation. Ils sont plus grands que les co^uts generes par une parallelisation de Skew-Heap avec une approche SDDP asynchrone. Mais cette etude reste interessante car elle donne des elements pour reechir a des systemes de simulation de memoire partagee, plus souple et plus ecace. These Paris VI, Janvier 1996 3.3. Extension de la methode aux machines a memoire distribuee 68 Poser le probleme en terme de simulation de memoire partagee permet de degager les co^uts inutiles generes par les systemes de simulationde memoire partagee commerciaux. Un systeme simulant une memoire partagee procede a un test de coherence sur tout le reseau de processeurs, pour chaque acces a un nud. Or, nous avons demontre que dans ce cas specique, il est inutile d'employer un tel systeme. Un processus demandant l'acces a un nud x sait exactement sur quel processus se trouve la derniere version valide de x. Cette etude est aussi tres importante, car elle a permis de degager les surco^uts d'un algorithme concurrent dans le cas de machine a memoire virtuellement partagee comme la KSR. En eet, la KSR ore une simulation de memoire partagee appelee ALL-CACHE. Ce systeme est equivalent a notre simulation avec un mode operatoire par gestion de cache. Notre algorithme permet de reduire les contentions d'acces sur les donnees partagees en ajoutant la valeur de priorite dans la notion de priorite globale; il conduit ainsi a une reduction de l'utilisation du reseau dans le cas de la KSR. Cette modication entra^ne donc une reduction des co^uts pour ce style de gestion de la memoire partagee. 3.3.4.b Mode operatoire par appel d'operations a distance Une operation etant executee par plusieurs processus, les performances obtenues dependent du temps de communication entre ces processus (co^ut) et de leur nombre (capacite). Or le placement de la structure sur le reseau denit les processus utilises pour chacune des operations et donc les liens du reseau utilises. L'etude precedente, a ete menee sur un reseau complet. Aucune hypothese n'etait faite sur la topologie du reseau ni en terme de distance entre processus et ni en terme de routage. De plus, si la structure doit stocker un grand nombre d'elements, les processus doivent pouvoir se les repartir, an d'optimiser la place memoire occupee. Le placement de la structure depend donc des trois criteres suivants : 1. maximiser la capacite de la structure, 2. minimiser les temps de communication, 3. equilibrer la place memoire occupee. Nous discutons dans la suite, des dierents placements d'une structure arborescente, pour chacun de ces criteres, puis pour deux ou trois d'entre eux. La capacite La capacite maximale est egale au nombre maximal de processus qu'il est possible d'utiliser pour realiser chaque operation. Si h est le nombre de niveaux de l'arbre, dans un contexte distribue, atteindre ce maximum consiste a aecter au moins un processus par niveau de l'arbre, an de permettre l'execution de h operations simultanement (voir le paragraphe 1.3.5. Un placement garantissant une capacite optimale de la structure consiste donc a aecter un et un seul processus par niveau de l'arbre (comme dans [CBDW91] pour les arbres de recherche). La capacite sera donc egale au nombre de processus utilises pour gerer la structure. Les structures a information externe (D-Heap, Funnel-Tree) sont tres faciles a placer car leurs structures sont xees pour toute la duree de vie de l'application. Il est donc dans ce cas plus facile d'obtenir un placement optimal, et une capacite aussi grande que l'algorithme le permet. En revanche, les structures a information interne (comme le Skew-Heap, les Splay-Tree, le Pairing-Heap) sont tres diciles a placer, car leur representation est modiee a chaque operation. Le placement doit donc ^etre modie a chaque operation. These Paris VI, Janvier 1996 3.3. Extension de la methode aux machines a memoire distribuee 69 Certaines structures de recherche comme les B-Arbres et B+arbres, sont faciles a placer car les modications de la representation (Split, Join) ne modient pas les niveaux. En eet, si deux nuds sont du m^eme niveau, ils le restent tant qu'ils sont dans la structure [CBDW91]. Cette remarque n'est pas veriee dans le cas des arbres AVL, par exemple. Les co^uts de communication Dans un environnement distribue, les co^uts supplementaires sont dus aux envois de messages. Or si le reseau de processeurs utilise, est heterogene, les co^uts de communications, correspondant a des poids, sont associes a chaque lien de communications. Pour minimiser les co^uts d'une operation, les liens de poids minimal doivent donc ^etre exclusivement utilises. Il faut donc placer la structure sur le reseau de machines, assurant que ces liens soient utilises pour toutes les operations. Or, de nombreux travaux dans le domaine de l'algorithmique distribuee traitent de la construction d'arbre couvrant de poids minimal, d'un reseau de machines [Laval86, BuBu93, Lavau95c]. Dans le cas d'une SD representee par un arbre binaire, une oe n'utilise que deux ou trois nuds (un pere avec un ou deux ls). Un placement optimisant les temps de communications consiste donc a placer la structure sur un arbre couvrant binaire de poids minimum. Repartition de l'occupation memoire La structure contenant generalement beaucoup plus d'elements qu'il n'y a de processeurs disponibles sur la machine distribuee, un processeur doit donc stocker un ensemble d'elements. Pour equilibrer l'occupation memoire, chaque processeur doit contenir le m^eme nombre d'elements. Le placement de la structure est donc obtenu en partitionnant la representation de la structure en P parts egales, puis en aectant chacune de ces parts a un processeur. Capacite+co^ut de communication Si la structure est un arbre binaire, une capacite optimale est obtenue par le placement d'un niveau de l'arbre sur un processus. Et minimiser les co^uts de communications consiste a placer la structure sur un arbre binaire couvrant minimal. Un placement optimal pour ces deux criteres consiste donc a trouver un arbre couvrant unaire minimal, ou autrement dit un tableau de processus ou les communications entre processus adjacents sont minimales, puis a aecter un niveau de la representation sur chacun des processus du tableau. Repartition memoire+co^ut de communication Peleg [Pele90] a montre qu'un tel placement etait possible dans le cas des B-arbres. Il peut aisement ^etre generalise pour des arbres binaires. Pour les trois criteres Il appara^t donc que le placement optimal d'une structure arborescente, pour ces trois criteres, est impossible. En eet, pour obtenir une capacite optimale il faut que chacun des processus soit associe a un niveau de l'arbre. Or etant donne qu'un partitionnement par niveau d'un arbre ne denit pas des parties de taille egale, le critere de repartition de l'occupation memoire est incompatible avec celui d'une capacite optimale. Par contre, un placement de capacite maximale (et non pas optimale) n'est pas incompatible avec la repartition memoire. En eet, le placement propose par Ottman, Rosenberg et Stockmeyer [OtRS82] consistant a aecter un nud de la structure sur un processus, respecte ces deux criteres. L'occupation memoire est repartie sur chacun de processeurs, et h operations peuvent donc ^etre eectuee en m^eme temps. These Paris VI, Janvier 1996 3.4. Conclusion 70 Si le nombre de processeurs disponibles est inferieur au nombre d'elements, il peut toutefois ^etre propose un placement orant un compromis. Celui propose par Mans [Mans95] en est un bon exemple. 3.4 Conclusion Nous avons propose une methode generale de parallelisation SDOP asynchrone des structures de donnees arborescentes. Dans la contexte des machines a memoire partagee, les performances du verrouillage partiel ainsi que celles du protocole par marquage sont presentees au chapitre 5. Les exemples d'application sont les algorithmes d'espace de recherches Branch and Bound et A*. Ces methodes sont combinees dans le chapitre 4 a nos algorithmes SDDP asynchrones du chapitre 2, pour obtenir des algorithmes SDODP. Dans le contexte des machines a memoire distribuee, notre etude a permis de degager plusieurs points. Pour le cas des structures de donnees SDOP, nous proposons une simulation de memoire partagee par techniques d'appels de procedures a distance. Cette simulation peut ^etre faite par dierents modes operatoire. La presentation de toutes les structures de donnees proposees dans la litterature peut alors ^etre uniee en montrant qu'elles relevent d'un de ces modes. Les desavantages et avantages de chacune en terme de placement optimisant la place memoire occupee, la capacite, ou reduisant les co^uts de communications, sont alors exhibes. Ceci nous a aussi permis d'isoler les problemes de contention memoire dans le cas d'une machine parallele a memoire virtuellement partagee; des tests experimentaux validant cette amelioration sont presentes au chapitre 5. These Paris VI, Janvier 1996 71 4 Les structures a donnees et operations paralleles Chapitre Une structure SDOP asynchrone a une capacite dependant du nombre d'operations elementaires qui composent chaque operation. Les representations etant tres souvent des arbres, la capacite est en O(logn). Elle respecte strictement la semantique de l'operation de suppression des les de priorite. En revanche, une structure SDDP a une capacite limitee seulement par le nombre d'elements stockes. La semantique de l'operation de suppression y est dicile a assurer sans un fort surco^ut. Et le nombre d'elements par sous-representation etant plus petit, la duree d'execution d'une operation s'en trouve reduit. L'idee sous-jacente des SDODP est l'application combinee des modeles SDOP et SDDP pour paralleliser une le de priorite. Nous les appelons dans ce cas, les multi-structures concurrentes. Elles ont fait l'objet d'un paragraphe dans le livre CAPA95 [AGFR+95] et dans le livre du projet SCOOP [SCOOP95]. 4.1 Performances Nous procedons a l'etude des performances du modele SDODP pour un nombre xe d'elements n. Le nombre D represente le nombre de sous representations qui composent la structure SDODP. 4.1.1 La capacite Soit une structure arborescente S dont les operations se composent de h(n) operations elementaires notees oe, et sont parallelisables par l'un des schemas de verrouillage du chapitre 3. La capacite CSDOP de S en SDOP est : CSDOP = h(n): Si S est parallelisee par un modele SDDP, sa capacite CSDDP est : CSDDP = D: La capacite CSDODP de S en SDODP est donc : CSDODP = D h( Dn ): These Paris VI, Janvier 1996 4.1. Performances 72 L'inter^et de ce modele depend de la fonction h(n). Si h est lineaire, la capacite CSDODP est egale a CSDOP . Ce modele n'apporte donc rien en terme de capacite. Mais, il inue sur le temps d'execution de chaque operation, car chacune des sousstructures contient Dn elements. En revanche, si la representation de la structure est un arbre, h peut ^etre approxime par un logarithme de n (avec n susament grand). Dans ce cas, la capacite obtenue est tres interessante. En eet, la capacite CSDODP est CSDODP = D log Dn ; Or, si P est le nombre de processus susceptibles d'eectuer des operations, P doit ^etre tel que CSDODP P; donc : P D log Dn : Pour un P xe, notre but est de trouver la valeur de D optimale. Denition 17 D qualie d'optimal lorsque il est le plus petit entier tel que : P D log Dn : Cette inequation ne peut pas ^etre resolue de facon exacte car les variables ne sont pas du m^eme ordre. Cependant des solutions approchees peuvent ^etre calculees rapidement. Nous notons cette valeur de D particuliere D . De cette facon, toutes les valeurs de D appartenant a l'intervalle [D ::P],verient cette inequation. Exemple du Skew-Heap La fonction h du Skew-Heap est h(n) = log2 n . La capacite d'un Skew-Heap SDODP est donc : D log Dn C= 2 : Or nous voulons que : P C donc : P D log n : 2 D Par un calcul approche (recherche dichotomique), des solutions peuvent ^etre trouvees. Par exemple, pour n = 20000, P = 16 nous obtenons D 2:47. Le nombre de Skew-Heap D est egale a 3, pour supporter 16 processus. Exemple du Funnel-Tree Le calcul est plus simple, car la profondeur de l'arbre est constante : log s avec s espace des priorites (voir le paragraphe A.2.2.b). Les operations ont aussi besoin de deux nuds a chaque etape du parcours, pour chaque oe. La capacite d'un Funnel-Tree est donc constante : C = log2 S : D'ou, l'expression de D pour un multi-Funnel-Tree: 2P : D = log S These Paris VI, Janvier 1996 4.1. Performances 73 Structure séquentielle. S h(n) Parallélisation SDDP Parallélisation SDOP h( n ) D une opération sur chacunes des D représentations h(n) h(n) opérations sur une représentation Parallélisation SDODP h( n ) D h( n ) opérations sur chacunes des D représentations D Figure 4.1 : Parallelisation par l'approche SDODP 4.1.2 Les co^uts Chacune des deux approches SDDP et SDOP genere des co^uts de types dierents. Pour une operation, d'une part, le surco^ut TgpSDDP de l'approche SDDP est une fonction croissante dependante du nombre de sous structures (equilibrage de charge) donc dependante de D et non plus de P. De plus, quelle que soit la strategie d'equilibrage de charge, elle consiste a transferer des elements d'une sous structure a une autre sous structure. Elle effectue donc des operations sur chacune de celle-ci. Le co^ut qu'elle entra^ne doit donc aussi prendre en compte ce facteur. Ce dernier est encore plus inuent si la methode de fusion&recopie est utilisee. La fonction EC exprimant le surco^ut des SDDP depend donc de D et h: TgpSDDP = EC(D; h(n)): Si un algorithme SDDP asynchrone ou macro synchrone est utilise, ce terme est tres dicile a preciser dans le cadre d'une seule operation, car la procedure d'equilibrage de charge n'est pas executee a chacune d'entre elles. Le co^ut Tgps de l'approche SDOP asynchrone est donne (voir chapitre 3) par : TgpSDOP = h(n) (Ttr (P) + Texec (P)): avec Ttr temps de transfert d'une donnee dependante du nombre de processus, These Paris VI, Janvier 1996 4.2. Quels algorithmes SDODP ? 74 Texec temps de l'execution d'une primitive d'exclusion mutuelle fonction du nombre de processus, sur certaines machines. L'expression du co^ut des multi-structures est donc : P ) + T ( P )]: TgpSDODP = EC(D; h( Dn )) + h( Dn ) [Ttr ( D exec D Cette expression met en evidence les faits que, si D est choisi tres grand (proche de P), le co^ut d^u a l'equilibrage de charge predomine, en revanche si D est petit (proche de D ), l'algorithme concurrent genere une grande proportion des co^uts globaux. Nous n'avons pas fait appara^tre le temps de communication des elements dans la fonction EC. Si la machine consideree est homogene, c'est-a-dire si elle est composee d'un m^eme type de machine sequentielle, ce terme est Ttr . En revanche, si la machine n'est pas homogene, ce terme est dierent de Ttr . Un exemple d'une telle machine peut ^etre un reseau de stations de travail multi-processeurs ou tout simplement une machine parallele a memoire partagee, ou les communications dans l'equilibrage de charge sont eectuees par l'intermediaire d'une librairie de passage de messages PVM ou MPI. 4.2 Quels algorithmes SDODP ? Un algorithme SDODP d'une structure peut ^etre cree en combinant n'importe lesquels des algorithmes SDOP et SDDP de cette m^eme structure. Nous presentons et discutons ces associations en fonction des les de priorite. Dans la litterature, les les de priorite parallelisees sur ce modele utilisent toutes la methode fusion&recopie comme algorithme SDDP, a un cas particulier de d-heap (algorithme SDOP de Rao et Kumar [RaKu88]). Par exemple, la combinaison du 2-heap SDDP par la methode fusion&recopie, et de l'algorithme SDOP de Rao et Kumar donne l'algorithme de Horn et Das [DaHo91]. Si l'on eectue cette m^eme combinaison sur un 1-heap, (un tableau lineaire), on obtient l'algorithme de Fan et Cheng [FaCh89]. Une Skew-Heap SDOP peut ^etre obtenue en combinant notre methode SDDP fusion&recopie et notre algorithme SDOP. Toutes les optimisations que nous avons proposees dans ce dernier cas (sur machine a memoire distribuee, virtuellement ou physiquement partagee, chapitre 3) peuvent ^etre appliquees. Dans le cas particulier d'un Branch and Bound, si l'equilibrage n'est pas necessaire, mais que la semantique doit ^etre respectee strictement, on peut combiner l'algorithme de Gengler et Diderich, pour la partie SDDP avec un algorithme SDOP. Si ni une semantique stricte ni un equilibrage parfait ne sont requis, nous pouvons utiliser un algorithme d'equilibrage de charge quelconque combine a un algorithme SDOP. Ainsi, un Skew-Heap peut ^etre parallelise en SDODP, en combinant le verrouillage partiel comme methode SDOP et un algorithme SDDP comme celui de Dowaji utilisant la potentialite [Dowa95], ou ceux de Luling et Monien [LuMo92, LuMo95], etc... Le D-heap de Rao et Kumar [RaKu88] associe avec l'un de ces m^emes algorithmes SDDP, donne une D-Heap SDODP. Ces combinaisons sont nombreuses. Elles se dierencient suivant les proprietes de semantique et d'equilibrage que les algorithmes SDDP assurent. These Paris VI, Janvier 1996 4.3. Quelles valeur de D pour un nombre d'elements xe ? 75 Elles sont bien evidemment choisies en fonction du comportement de l'application, et en fonction de l'architecture de la machine. 4.3 Quelles valeur de D pour un nombre d'elements xe ? Si le comportement de l'application et l'architecture de la machine sont les criteres de choix d'une combinaison, ils inuencent aussi le choix de D pour une combinaison particuliere. 4.3.1 Inuence de l'application Si pour les besoins de l'application, la semantique de l'operation de suppression doit ^etre respectee, il est plut^ot interessant de choisir un D tres petit. Dans le cas contraire, D peut ^etre choisi tres grand. Si de plus, le comportement de l'application est susamment bien connu pour qu'on ait propose un equilibrage de charge ecace avec un faible surco^ut, D peut ^etre choisi tres proche de P. 4.3.2 Inuence de l'architecture de la machine Bien que la valeur de D soit regie par la capacite demandee, elle peut ^etre modiee en fonction des co^uts calcules en prenant en compte l'architecture de la machine. 4.3.2.a Machine homogenes Machine a memoire partagee Lorsque la machine dispose d'une memoire physique- ment partagee, les co^uts dus aux transfert d'elements sont nuls. La valeur de D peut donc ^etre calculee, pour assurer une capacite optimale. Machine a memoire virtuellement partagee En revanche, lorsque la memoire de la machine est virtuellement partagee, le temps de transfert est un facteur important. Si la valeur de D est choisie proche de D , les co^uts de la partie SDOP sont tres importants. Ils peuvent ^etre reduit en augmentant la valeur de D, car cela reduit le nombre de processus par sous structure. Cette augmentation doit ^etre limitee selon le comportement de l'application. Machine a memoire distribuee Dans le cas de machines a memoire distribuee, la vitesse de communication est generalement trop lente pour utiliser une structure SDOP. Cela entra^nerait des surco^uts trop importants. C'est pour cela que la plupart des solution dans ce contexte propose des structures SDDP (equivalente a une SDODP avec D = P). Mais ce jugement doit ^etre nuance selon l'application. Un algorithme SDDP, avec un faible surco^ut, rel^ache au maximum la semantique de l'operation de suppression. Si la consequence de ce rel^achement est un co^ut de traitement plus eleve de la part de l'application. Ce dernier peut recouvrir le temps gagne par l'utilisation d'une structure SDDP avec un equilibrage de charge simple. Il est parfois interessant de choisir une structure SDODP, qui assurant une semantique plus stricte, reduit de beaucoup le co^ut de traitement. 4.3.2.b Machines heterogenes De plus en plus de constructeurs proposent des stations de travail multiprocesseurs (Sun, SGI) a memoire physiquement partagee. Si actuellement, il est habituel d'utiliser un reseau de stations de travail monoprocesseur comme machine parallele, il n'est pas impossible, que dans peu de temps, des reseaux de stations de travail multi-processeurs soient utilises. These Paris VI, Janvier 1996 4.4. Structures SDODP ou SDOP a deux niveaux 76 Les SDODP seraient particulierement bien adaptees a ce modele. Une sousstructure SDOP serait aectee a chacune des stations. Un algorithme SDDP assurerait un equilibrage de charge entre chacune d'elles. Les bibliotheques PM2 ou Athapascan, serait tres interessantes dans ce contexte, pourvu que le "scheduler de thread", qui pour l'instant est monoprocesseur, puisse gerer une machine multiprocesseur. Ce dernier integrant une le de priorite serait assimilable a une structure SDOP. Et les regulateurs de charge integres a ces bibliotheques seront consideres comme les algorithmes d'equilibrage de charge d'une structure SDDP. 4.4 Structures SDODP ou SDOP a deux niveaux Sur machine a memoire partagee, une structure SDODP peut ^etre concue d'une maniere particuliere. 4.4.1 Algorithme SDDP L'equilibrage de charge d'une structure SDDP peut facilement ^etre resolu, sur de telle machine, par l'intermediaire d'une donnee globale qui contient un ensemble d'elements, un blackboard comme celui propose par Rao et Kumar [RaKu88]. Son but est d'orir a l'ensemble des processus, une zone memoire ou sont stockes les meilleurs elements. Cette structure est assimilable a une structure non pas SDDP, mais SDOP. Toutes les operations accedent en concurrence a une structure de donnees qui est composee d'un ensemble de sous-structures, et d'une racine "virtuelle". Les processus sont donc serialises par l'acces a cette donnee. 4.4.2 Algorithme SDODP L'inter^et de l'algorithme precedent est d'^etre utilise comme algorithme SDDP, dans le cadre des SDODP Si D sous-structures sont utilisees, les P processus sont divises en DP groupes de processus. Chaque groupe est associe a une des D sous-structures SDOP. Un processus de chaque groupe, le ma^tre, eectue l'algorithme SDDP. Les autres, les esclaves, accedent directement a leur sous-structure. Cet algorithme, lorsque D est egal a un, est assimilable a un algorithme SDOP. Au contraire, lorsque D est egal a P, il se comporte comme un algorithme SDDP. Il est a noter que du point de vue de l'application, les ma^tres realisent le m^eme travail que les esclaves. Ils ne sont pas specialises dans la gestion de l'equilibrage. Un probleme survient alors lorsque la valeur de D est tres petite (D > 1). En eet, considerons le cas d'une multi le de priorite composee de deux sousles (D = 2) accedees par huit processus (P = 8). L'utilisation d'un seul ma^tre pour chaque groupe contenant donc trois esclaves, peut appara^tre insusant, pour assurer une semantique approchee de l'operation de suppression. L'ensemble des esclaves realisant trois fois plus de travail que celui fourni par le ma^tre. Quelques uns d'entre eux niront par obtenir des elements de priorite inferieure a celle des elements contenus dans l'autre le. Une premiere solution consiste a aecter, dans chaque groupe, M ma^tres accedant tous a la m^eme donnee globale, au m^eme black-board. Il est clair que dans ce cas, les co^uts de l'algorithme SDDP ne sont plus fonction de D mais fonction de M D. L'inter^et des structures SDODP est donc perdu. These Paris VI, Janvier 1996 4.5. Un algorithme SDODP dynamique pour un nombre d'elements variables 77 La donnée globale 4 groupes de 3 processeurs 4 SDOP á verrouillage partiel processeur maître du groupe accédant á la donnée globale. processeur esclave accédant qu’á sa sous structure. Figure 4.2 : Structure SDODP par deux SDOP Une deuxieme solution, evitant ce probleme, consiste a utiliser M ma^tres par groupe notes mi accedant a M black-boards distincts notes bi . Plus precisement, les ma^tres mi de chaque groupe accedent au black-board bi (voir gure 4.3). Les groupes de ma^tres etant independants les uns des autres, ils n'interferent pas. Le probleme est de choisir le nombre de ma^tres vis-a-vis de l'application et du nombre de sous-structures. Nous donnons des resultats experimentaux de cette structure dans le chapitre suivant. Les applications utilisees sont des algorithmes Branch and Bound. 4.5 Un algorithme SDODP dynamique pour un nombre d'elements variables Les structures de donnees de certaines applications (Branch and Bound, A*) doivent gerer un nombre dynamique d'elements Or, toute l'etude des structures SDODP faite jusqu'a maintenant, considerait un nombre xe d'elements n. Le calcul de la valeur de D depend de la valeur de n. D doit donc varie au cours de l'execution de l'application, pour permettre un fonctionnement optimal de la SDP. 4.5.1 Consequence de la modication de D Le probleme majeur est non pas le calcul de D pour un n variable, mais, plut^ot la gestion des consequences de ce changement de valeur. Elles sont au nombre de deux : These Paris VI, Janvier 1996 4.5. Un algorithme SDODP dynamique pour un nombre d'elements variables 1 2 78 Les données globales 4 groupes de 4 processeurs 4 SDOP á verrouillage partiel processeur maître du groupe accèdant á la donnée globale 1. processeur maître du groupe accèdant á la donnée globale 2. processeur esclave accèdant qu’á sa sous structure. Figure 4.3 : Structure SDODP par deux SDOP 1. l'algorithme SDDP doit ^etre parametre par la valeur de D, 2. les elements des D sous-structures doivent ^etre repartis sur D0 sous-structures. La premiere est, somme toute, assez simple a gerer. Par contre, la seconde est compliquee. Car, elle signie un re-equilibrage complet des D sous-structures, pour obtenir D0 sous-structures equilibrees. Nous proposons un algorithme permettant de gerer ce probleme fondee sur le Skew-Heap. Nous rappelons que la capacite C d'un Skew-Heap SDOP est C = logn 2 . Notre algorithme ne propose pas de modier la valeur de D pour qu'elle soit optimale vis-a-vis du nombre d'elements. Car comme nous l'avons dit precedemment, cela impliquerait une reorganisation complete de la structure. Si les D sous-structures sont equilibrees, decrementer ou incrementer D revient respectivement a "vider" ou a "remplir" une sous-structure. Le co^ut de cette reorganisation est forcement de 2 Dn operations. Nous proposons de modier D en le multipliant ou en le divisant par un facteur deux. Quand la reorganisation de la structure doit-elle ^etre declenchee ? Si l'on considere que les D sous-structures sont equilibrees, D est multiplie par deux lorsque la capacite de chacune des sous-structures devient insusante pour accepter DP processus, c'est a dire lorsque C devient egale a DP . Dans le cas d'un Skew-Heap, cela peut ^etre exprimee par : log Dn P 2 = D: These Paris VI, Janvier 1996 4.5. Un algorithme SDODP dynamique pour un nombre d'elements variables 79 D'ou l'expression de n: n = De DP : Donc D est multiplie par deux lorsque la valeur de n atteint la valeur: De DP . La valeur de D est divisee par deux lorsque la valeur de n donne une capacite C pour chacune des sous-structures avec : C = 2DP ? 1. Ce qui pour un Skew-Heap donne : log Dn 2P 2 = D ? 1: D'ou l'expression de n: n = De 4DP ?1 : Donc D est divise par deux lorsque la valeur de n atteint la valeur : De 4DP ?1. Nous avons choisi le Skew-Heap, car son operation de base est l'operation de Melding. Cette operation a pour but d'assembler deux Skew-Heaps en un seul. fils gauche D multiplié par 2 fils droit fils gauche fils droit D divisé par 2 Meld Meld Figure 4.4 : Passage de D a 2D sous-structures, puis de 2D a D. Il devient donc tres simple de diviser le nombre de sous-Skew-Heaps par deux. Il sut d'executer l'operation de Meld sur chaque groupe de D2 Skew-Heaps. Lorsque D est multiplie par deux, les ls droits de chacune des D Skew-Heaps deviennent les D nouvelles sous-structures. La gure 4.4 presente graphiquement ces deux phases. 4.5.2 Valeur de D initiale et nale, regime susant La valeur de D peut donc ^etre modiee lors de l'execution de l'application dans ce qui pourrait ^etre appele un regime susant, c'est-a-dire lorsque le nombre d'elements These Paris VI, Janvier 1996 4.6. Conclusion 80 n est susant pour permettre son calcul. La structure peut ^etre surchargee. Lorsque le nombre n est susamment grand pour que la capacite de la structure soit superieure a P avec une seule sous-structure c'est a dire D egal a un. En fait, les investigations sur la valeur de D pour un n xe repondent a cette question. Brievement, la valeur minimale de D depend d'une part du comportement de l'application et d'autre part de l'architecture de la machine. Dans tout les cas, il faut choisir une valeur initiale et nale une de D. Ces valeurs sont encore une fois dependantes de l'application. Considerons une application denissant une structure vide au depart et a la n de son execution. Nous proposons d'initialiser la valeur de D a P. Si la structure presentee au paragraphe precedent est utilisee, l'algorithme d'equilibrage de charge assure la repartition des elements. Lorsque la n de l'application approche, c'est-a-dire lorsque n devient petit, fautil accro^tre D pour garder une capacite optimale, ou faut-il au contraire essayer de garder D egale a 1 facilitant ainsi le test de terminaison de l'application ? Nous proposons qu'a la n de l'application, D soit egal a P. L'algorithme de terminaison pouvant ^etre implemente avec une variable accedee en section critique independante de la gestion de la sous-structure, le nombre D ne g^ene pas le test de terminaison. Les propositions que nous faisons quant aux valeurs initiale et nale de D, sont dependantes de la strategie d'equilibrage de charge qui est utilisee. Dans le cas present, nous utilisons une strategie assurant la semantique de l'operation de suppression avec un certain taux. Le nombre de sous-structures peut donc ^etre egal au nombre de processus, a l'etat initial et nal. 4.6 Conclusion Nous avons propose plusieurs structures SDODP. Chacune d'elles est specique a une architecture de machine et a une application donnee. La discussion sur la valeur de D, le nombre de sous-structures, lorsque le nombre d'elements est xe permet d'obtenir une structure "a la carte". La valeur de D peut ^etre calculee, pour obtenir la capacite desiree, tout en tenant compte des co^uts entra^nes. Nous n'avons pas implemente toutes les structures qui utilisent la methode de fusion&recopie, car dans le cas precis des applications que nous avons choisies comme objets d'etudes, assurer une semantique stricte de l'operation de suppression, genere un co^ut qui ne recouvre pas le co^ut de traitement. Toutefois, il est certain que des applications necessitant ce modele existent. Nous nous sommes volontairement limites aux machines a memoire partagee ou tout du moins a celles orant une memoire virtuellement partagee. La raison est en tout simplement, l'evolution des machines commerciales. De plus en plus, les constructeurs proposent des machines a architecture distribuee, mais avec une couche logicielle permettant de simuler cette ensemble de memoire comme une seule memoire partagee. Notons que cette idee n'est pas nouvelle, beaucoup de constructeurs avaient deja mis sur le marche des machines sur ce modele. Kendall Square Research est l'un de ceux-la, mais aussi la BBN avec la Buttery TC2000. Plus recemment, Cray (avec le T3D pour un certain contexte These Paris VI, Janvier 1996 4.6. Conclusion 81 d'execution), Cray et Sun, pour une machine a 64 processeurs propose ce style de gestion. IBM projette, de proposer une couche logicielle integree au systeme UNIX AIX, realisant cette simulation sur les SP1 et SP2. La cause en est tres simple, la programmation de ces machines est plus facile que celles de machines a memoire physiquement distribuee. La preuve est egalement dans l'evolution recente des bibliotheques de passage de messages telles PVM, MPI ou LANDA. Ces bibliotheques tendent a laisser la place a celles qualiees de "multithreadees" comme PM2 ou Athapascan. Les appels de procedures a distance y sont utilises comme moyen de base de communication. Le processus appelant a l'initiative de l'execution de la procedure distante, comme si les deux processus disposaient d'une memoire partagee. Au dela des problemes de programmation, nous avons voulu aussi montrer par l'etude des SDODP que les deux modeles SDDP, et SDODP ne s'opposent pas, qu'ils ne sont pas incompatibles. Historiquement, les structures SDDP, etaient utilisees pour les machines a memoire distribuee, alors que les structure SDOP etaient quant a elles exclusivement utilisees sur machines a memoire partagee. Les fervents des deux modeles s'opposaient. Chacun de ces modeles a en fait ses avantages et ses inconvenients. Nous avons voulu montrer qu'ils sont complementaires et avantageusement combinables. Une autre justication des structure SDODP vient de l'evolution recente des architectures des stations de travail. Plusieurs constructeurs proposent maintenant des stations multiprocesseurs a memoire physiquement partagee (Sun, SGI), m^eme pour le grand public, Be-Inc a presente la Be-Box au mois d'octobre 95. Cette machine peut contenir jusqu'a huit Power-PC. La version de base avec deux de ces processeurs entre dans la gamme de prix d'un PC disposant d'un Pentium. Si actuellement, des reseaux de stations de travail monoprocesseurs sont largement utilises, il n'est pas impossible que dans peu de temps des reseaux de stations de travail multiprocesseurs le soient egalement. Les structures SDODP seraient alors tout a fait adaptees a ce type d'architecture. These Paris VI, Janvier 1996 82 5 E tude de structures de donnees pour l'exploration d'espace de recherche en RO/IA Chapitre Le but de ce chapitre est de presenter des experimentations des les de priorite paralleles decrites dans les chapitres precedents. Il concerne des algorithmes d'exploration de recherche en Recherche Operationnelle et en Intelligence Articielle. Nous exposons ainsi d'abord l'algorithme de Branch and Bound, puis etudions les les de priorite sequentielles qui lui sont le mieux adapte. Nous presentons ensuite les resultats experimentaux pour une simulation de Branch and Bound et pour une resolution du probleme d'aectation quadratique. La premiere partie de ce travail a ete eectuee en collaboration avec Bernard Mans. Elle a fait l'objet d'une presentation lors de la conference On principles of Parallel Computing (OPOPAC) [LeMR93]. Une autre partie a ete presentee a la conference Irregular'94 [LeRo94]. Nous nous interessons ensuite a une structure de donnees pour l'algorithme A*. Ce travail realise avec Van-Dat Cung a ete presente aux Rencontres FrancoCanadiennes [CuLe94b]. Les tests experimentaux que nous exposons ont ete realisees sur plusieurs machines : Sun Sparc pour le sequentiel, Sequent Balance et KSR1 pour le parallelisme. Bien que la KSR et la Sequent disposent toutes les deux d'une memoire partagee, elles dierent par la gestion qui en est faite. La memoire de la Sequent est physiquement partagee alors que celle de la KRS1 est virtuellement partagee. Le partage est simule par le systeme appele ALL-CACHE a partir de memoire physiquement distribuee. 5.1 L'algorithme de Branch and Bound 5.1.1 Algorithme general de Branch and Bound Le but des algorithmes d'evaluation et separation (General Branch and Bound B&B) est de resoudre des problemes d'Optimisation Combinatoire diciles (NP-complet en complexite) du type : These Paris VI, Janvier 1996 5.1. L'algorithme de Branch and Bound 83 min f(x); x 2 X ou X represente le domaine d'optimisation, x est une solution realisable si elle appartient au domaine X, f(x) est la valeur d'une solution (fonction economique). La methode B&B est fondee sur une enumeration intelligente des solutions realisables d'un probleme d'Optimisation Combinatoire. Son principe est de decomposer un probleme donne en deux ou plusieurs sousproblemes de taille inferieure. Suivant une strategie denie prealablement, un sous-probleme est selectionne, puis est partage, sauf si on peut prouver que les sous-problemes resultants ne peuvent conduire a une solution optimale, ou ne peuvent plus ^etre decomposes. An de choisir un sous-probleme parmi ceux qui n'ont pas ete examines, une evaluation (borne inferieure) des solutions dans chaque sous-probleme est introduite. Les sous-problemes dont l'evaluation est superieure a la valeur de la meilleure solution connue, ne sont pas examines. Nous pouvons representer les etapes du partitionnement d'un probleme, par un arbre. Un sous-probleme est represente par un nud de l'arbre, les problemes en lesquels il se subdivise, sont ses ls. Plus precisement, un algorithme B&B repose sur les notions cles suivantes : le principe de separation qui associe a tout sous-probleme l'ensemble des sous-problemes en lesquels il se decompose, une fonction d'evaluation qui associe a tout sous-ensemble de solutions, une valeur representant une borne inferieure du co^ut minimal des solutions lui appartenant, une strategie de recherche qui est utilisee pour selectionner parmi les sous-problemes restants, celui qui sera separe, un intervalle de recherche constamment remis a jour, il a pour borne inferieure la plus petite evaluation d'un sommet pendant (sans successeur) et pour borne superieure la valeur de la meilleure solution realisable connue. Trois strategies sont generalement utilisees : meilleur d'abord, le nud selectionne est celui de plus grande priorite. La priorite d'un sous-probleme est la valeur de borne inferieure qui lui est associee. profondeur d'abord, le nud le plus profond est selectionne. largeur d'abord. L'implementation d'un algorithme B&B avec une strategie meilleur d'abord, consiste donc a realiser des operations sur une le de sous-problemes (les sommets pendants de l'arbre B&B) de priorites dierentes ou egales. La structure de donnees utilisee est une le de priorite dans laquelle les sousproblemes (elements) sont inseres et supprimes. 5.1.1.a Comportement l'algorithme Comme nous l'avons indique dans le chapitre 1, le comportement de l'algorithme utilisant une structure de donnees, oriente le choix sur telle ou telle structure. L'objet de cet paragraphe est d'expliciter le comportement propre aux algorithmes de B&B, an de denir une sorte de "portrait-robot" de la le de priorite qui doit ^etre utilisee. Nous nous placons dans le cas d'une minimisation de la fonction economique. These Paris VI, Janvier 1996 5.1. L'algorithme de Branch and Bound 84 Propriete 20 La fonction d'evaluation est monotone croissante. En eet, l'evaluation d'un sous-probleme ne peut ^etre inferieure a celle du sousprobleme dont il est issu. La fonction d'evaluation qui aecte des valeurs aux sousproblemes ls par rapport au sous-probleme pere, est donc monotone croissante. La propriete de monotonie est tres utile car elle permet de proposer une le de priorite ecace. Le Funnel-Table est une de celle-la (paragraphe A.2.2.a). Propriete 21 Tout sous-probleme dont l'evaluation n'est pas dans l'intervalle de recherche n'est pas examine (la branche correspondante de l'arbre est elaguee). La particularite commune a tous les algorithmes de B&B est donc qu'ils evitent l'examen complet de l'arbre potentiel des sous-problemes pour trouver et prouver qu'une solution est optimale. Ils acquierent des connaissances tout au long de la construction de l'arbre qui leur permettent d'eectuer des elagages. Si cs est le co^ut de la meilleur solution trouvee, les sous-problemes dont l'evaluation est superieure a cs ne pourront pas generer de solution optimale, puisque leur co^ut est deja superieur a cette valeur. Generer les ls des sous-problemes est donc, dans ce cas, inutile. s0 -20 s1 -23 s3 -25 s4 -31 s6 -29 s7 -34 s2 -29 s5 -26 s8 -30 s9 -30 s10-32 s11 -34 Figure 5.1 : Exemple d'arbre de GBB La gure 5.1.1.a donne un exemple d'arbre de solution d'un B&B. Chaque nud contient la reference et l'evaluation du sous-probleme associe. Les nuds s6 et s11 sont des solutions de valeurs 31 et 34. Les sous-problemes s7 , s10 et s11 ont des evaluations superieures a la valeur de s6 , ils doivent donc ^etre elagues. An de choisir les structures de donnees les plus appropriees, il nous faut d'abord denir leurs caracteristiques dans le contexte d'algorithmes B&B. 5.1.1.b Caracteristiques de la le de priorite d'un B&B Les les de priorite (FP) orent deux operations de base: suppression de l'element de plus grande priorite. insertion d'un element de priorite quelconque. Lorsque des elagages doivent ^etre eectues, nous avons besoin d'une operation qui detruise tous les elements presents dans la le dont les priorites sont inferieures a une valeur donnee. Cette operation est appelee DeleteGreater. These Paris VI, Janvier 1996 5.1. L'algorithme de Branch and Bound 85 Les les de priorite generalement utilisees n'orent pas la possibilite de realiser cette operation avec un co^ut acceptable (cf paragraphe A.2). La methode alors utilisee, consiste a tester, lors de la selection d'un sous-probleme, si son evaluation ne depasse pas la valeur de la meilleure solution connue. Le defaut de cette methode est que les performances de la structure sont alterees par la presence d'elements inutiles. Nous pouvons voir l'operation de DeleteGreater comme un ramasse-miettes. La le de priorite d'un B&B ne doit pas posseder obligatoirement cette operation, mais sa presence peut ameliorer les performances. Experimentalement, on a constate que les algorithmes de B&B generent beaucoup de sous-problemes d'evaluation identique, car l'espace des priorites est bien inferieure au nombre de sous-problemes explores [Mans92]. La le de priorite doit donc gerer beaucoup de nuds de priorite egale. De nombreux travaux ([MaRo93, LaSa84a, LiWa86a]) ont montre qu'un choix nondeterministe parmi les sous-problemes de m^eme evaluation, pouvait conduire a des anomalies de performances, lors de l'implementation parallele: sous-acceleration (speed-up inferieur a 1) ou sur-acceleration (speed-up superieur au nombre de processeurs). Cela signie que la FP doit ^etre stable. Si un sous-probleme A de priorite pr est insere avant un autre element B de m^eme priorite, les operations de la structure doivent assurer que A et B seront supprimes soit dans le m^eme ordre, soit dans l'ordre inverse. Propriete 22 L'etat initial et l'etat nal de la le devant ^etre vide, il y a autant d'elements supprimes que d'elements inseres. Si aucune operation de DeleteGreater n'est executee, le nombre d'insertions est egal au nombre de suppressions. 5.1.2 Les les de priorites sequentielles Nous etudions ici les les de priorite sequentielles les mieux adaptees a un B&B. Ce travail a ete realise avec Bernard Mans [LeMR91, LeMR93]. Les tas La le de priorite la plus utilisee dans les B&B, est aussi la plus ancienne : le 2-heap [Will64]. Une presentation de cette structure peut ^etre trouvee en annexe A.2.1. Dans le contexte du B&B, les problemes poses par le 2-heap ou plus generalement le d-heap, sont ceux de tous les tas : ils ne sont pas stables. La restructuration que leurs operations eectuent, "melange" les elements de m^eme priorite. la complexite de l'operation Delegreater est O(n). De part leur invariant, il est impossible de trouver tous les elements de priorite inferieure a une certaine valeur, sans proceder a un parcours complet de la representation. Dierencier les les representees par des tas, ne peut se faire que par des experimentations. Les structures de recherche Les structures de recherche sont interessantes dans le contexte de B&B pour de nombreuses raisons. Elles sont stables. Les rotations qu'elles utilisent comme operations elementaires, gardent l'ordre des elements m^eme si ils ont des valeurs egales. These Paris VI, Janvier 1996 5.1. L'algorithme de Branch and Bound 86 Il est possible d'associer a un nud de l'arbre une valeur de priorite. La taille de la structure peut donc ^etre reduite, si tous les elements d'une valeur de priorite donnee, sont rangees dans une m^eme liste associee au nud. Les elements de priorite superieure a une certaine valeur, peuvent ^etre trouves en parcourant une branche de l'arbre. La complexite de l'operation de DeleteGreater est donc en O(log n). Le choix de structures de recherche a bien evidemment ete fait en pensant a la methode de parallelisation SDOP (chapitre 3). De ce fait, les structures dont les operations se composent de deux phases (parcours racine-feuille puis feuilles-racine), telles les arbres AVL, Red-Black, B ou B+, ont ete eliminees. Il est a noter, que lorsque les structures de recherche sont utilisees en tant que les de priorite, toutes leurs operations modient leur representation. Aucune operation de lecture seul n'est eectuee. Les problemes de gestion de primitives d'exclusion mutuelle a plusieurs niveaux sont ainsi evites. Notre choix s'est alors tout naturellement porte sur une version des Splay-trees : les Top-Down Semi-Splay-Trees. Les structures speciales Les structures speciquement etudiees pour le B&B, ne sont pas nombreuses. La funnel-Table et le funnel-Tree sont de celles-la. Elles sont fondees sur une taille limitee et reduite de l'intervalle de recherche dans lequel les priorites prennent leur valeur. Elles assurent la propriete de stabilite et orent une operation DeleteGreater ecace. Leur description respective a ete reportee en Annexe A.2.2. 5.1.3 Files de priorites SDOP Nous discutons les versions concurrentes des les de priorite precedemment presentees. 5.1.3.a Les Tas Nous avons detaille au chapitre 3, une methode permettant les acces concurrents aux structures de donnees arborescentes. Cette methode dite de verrouillage partiel, permet d'obtenir une capacite proportionnelle a la hauteur de la structure et inversement proportionnelle a la taille d'une fen^etre. Nous avons aussi prouve qu'il est possible de remplacer tous les verrous (sauf pour la racine) par un simple mecanisme de marquage. Les algorithmes concurrents des operations du Leftist-heap et du Pairing-heap, ne sont pas ecaces. En eet, ces operations sont decoupees en deux phases (voir l'annexe A.2). Pour le Leftist, la structure doit ^etre verrouillee pendant toute la duree d'execution de chacune des operations. Quant a l'operation de suppression du Pairing-heap, la racine n'est trouvee qu'a la n de l'algorithme. La concurrence se resumerait a un acces exclusif, impliquant ainsi une capacite de un. L'algorithme concurrent de 2-heap necessite une fen^etre comprenant deux nuds consecutifs. La capacite C est donc C = log2 n : Malheureusement, l'algorithme de suppression eectue des acces directs a certains nuds. Il est donc impossible d'y appliquer notre protocole par marquage. These Paris VI, Janvier 1996 5.1. L'algorithme de Branch and Bound 87 Le Skew-Heap, est parfaitement adapte a notre methode. De plus, le protocole par marquage peut y ^etre applique. Comme nous l'avons deja dit, les tas ont une operation de Deletegreater qui necessite un parcours complet de l'arbre. Dans un contexte concurrent, cette operation doit donc acceder de maniere exclusive a la structure. La capacite est donc de un, durant cette periode. 5.1.3.b Funnel-Table Le Funnel-Table n'est pas une structure arborescente, donc les methodes presentees au chapitre 3 ne peuvent s'appliquer. Le principe de l'algorithme sequentiel est d'acceder directement a la le d'attente consideree. Pour assurer la consistance de la structure, il faut rendre cette operation atomique. Ceci est eectue, en utilisant une primitive d'exclusion mutuelle: un verrou. Chaque le du tableau peut ^etre verrouillee separement. Nous designons par ft la le d'attente d'indice t, et par P = (P1 ; : : :; Pp ) les p processus susceptibles d'acceder a la structure. Insertion Lors d'une insertion, le processus verrouille la le consideree ft, eectue une insertion sequentielle dans ft , puis deverrouille ft . Suppression Dans l'algorithme sequentiel, une variable B designe l'indice de la le fB , ou se trouve les elements de plus grande priorite. Dans le cas ou il existe un element dans fB , il sut d'eectuer la suppression suivant le m^eme schema que l'insertion. En revanche, si fB est vide, une remise a jour de B doit ^etre eectuee. Nous avons choisi de partager la variable B entre tous les processus p appartenant a P , an que ces derniers soient informes du nouvel indice de la le possedant les elements de plus grande priorite. Un processus Pi voulant realiser une suppression et trouvant fB vide ne peut, comme en sequentiel, aecter l'indice de la prochaine le non-vide a B. En eet, comme les processus travaillent de facon asynchrone, un processus Pj peut avoir une insertion a eectuer sur la le fB+1 d'indice B + 1. Si Pi teste la le fB+1 avant que Pj n'ait pu inserer son element e, alors e sera perdu. Un premiere solution consiste a modier l'algorithme d'insertion. An d'assurer que B designe toujours la le contenant les elements les plus prioritaires, l'operation d'insertion peut tester la valeur de B, et la modier le cas echeant. Ainsi, un element insere ne peut ^etre perdu. Malheureusement cette solution signie, que toutes les operations accedent a la variable B en exclusion mutuelle. Elles sont donc serialisees limitant la capacite a un. L'inter^et de l'utilisation d'un tableau est perdu. Une seconde solution utilise le contexte specique du B&B. Nous considerons qu'une le ft est "denitivement vide" si et seulement si tous les processus ont ni de separer tous les nuds de priorite inferieure ou egale a celle associee a ft . Pour cela, nous ajoutons a la structure de le, un champ entier nb initialement a 0. Un processus Pi eectuant une suppression sur une le ft , incremente le champ nb de ft . Il le decremente lorsqu'il aura ni la generation des nuds ls. Si tous les processus accedant a la structure utilisent cet algorithme, la structure reste alors consistante. These Paris VI, Janvier 1996 5.1. L'algorithme de Branch and Bound 88 En eet, considerons deux processus Pi et Pj . Supposons que Pi ait obtenu par une suppression, le dernier element de la le fB , et que Pj veille realiser une suppression. Comme fB est vide, Pj va essayer de trouver la prochaine le denitivement vide en parcourant le tableau a partir de fB . Or le champ nb de fB n'est pas nul, donc Pj ne pourra modier B. La structure reste consistante. Ce m^eme processus Pj ne pouvant remettre a jour B, n'a pas de travail a eectuer. Nous pouvons considerer que Pj peut s'en procurer lui-m^eme, en allant chercher la premiere le non vide. Cette modication de l'algorithme change la complexite de l'operation de suppression. En eet, pour l'algorithme sequentiel, la complexite de l'ensemble des suppressions et des DeleteGreater est O(S). En revanche, pour l'algorithme parallele, le pire des cas se presente lorsqu'un processus Pi eectue un suppression sur la premiere le, puis ne fait plus rien. Les autres processus, a chaque suppression realisee, vont ^etre obliges de parcourir une importante partie du tableau, an de trouver du travail. Dans le pire des cas, l'operation de suppression est donc en O(S). 5.1.3.c Splay-Tree La description des dierentes versions de Splay-tree a ete reporte en annexe A.2.3.a. Les operations se realisant dans le sens racine-feuilles, nous utilisons le schema de verrouillage de la proposition 2. Soit un processus Pi, voulant realiser une insertion d'un element w dans un Semi-Splay-Tree appele S. L'algorithme sequentiel d'insertion du Splay-Tree, dans sa version Semi-Adjusting doit maintenir trois arbres: T, L et R. A chaque rotation ZIG-ZIG rencontree, l'arbre T est remis a jour (gure A.3) et le nud Top auquel les arbres R et L se rattacheront doit ^etre modie. An de garantir la consistance de la structure, Pi doit verrouiller le nud Top pendant qu'il construit les arbres R et L. Au debut du parcours, l'arbre T est vide, donc le verrouillage du nud Top sera remplace par le verrouillage du pointeur de reference de S (le pointeur sur la racine de S). Lors du parcours pour rechercher la place de w, chaque nouveau nud parcouru y est verrouille pour assurer qu'il ne pourra plus ^etre modie. Dans chaque cas de rotation, nous allons decrire les dierents verrouillages et deverrouillages de notre algorithme concurrent. Nous reprendrons les noms donnes aux nuds de la gure A.1 pour les rotations ZIG et ZIG-ZAG, et ceux de la gure A.3 pour la rotation ZIG-ZIG. Nous ne considerons qu'un sens de rotation, celui des gures, l'autre etant symetrique. ZIG : le nud x est verrouille, si le nud y n'existe pas alors la place de w est trouvee, x devient le nud le plus a gauche de R, x est deverrouille, ZIG-ZAG : x est verrouille, y est verrouille, si z n'existe pas alors la place de w est trouvee, x devient le nud le plus a gauche de R, x est deverrouille, y devient le nud le plus a droite de L, y est deverrouille, These Paris VI, Janvier 1996 5.1. L'algorithme de Branch and Bound 89 ZIG-ZIG : x est verrouille, y est verrouille, si z n'existe pas alors la place de w est trouvee, y devient le ls gauche de Top, le sous arbre B de y devient la sous arbre gauche de x, Top est deverrouille (y l'est toujours), x devient le nud le plus a gauche de R, x est deverrouille, le nouveau Top est verrouille, enn y est deverrouille, Nous pouvons deverrouiller les nuds inseres dans R ou L, car le nud Top etant verrouille, le schema nous assure que les nuds des arbres R et L ne peuvent pas ^etre verrouilles par un autre processus que Pi. D'autre part, le verrouillage du nud y (cas ZIG) et du nud z (cas ZIG-ZAG et ZIG-ZIG) n'est pas obligatoire, car lors de ces rotations, ces nuds ne sont ni modies, ni lus. La rotation ZIG-ZIG comporte une exception : si l'arbre L ou R est vide, le nouveau nud Top sera le nud y. Dans ce cas, les deux dernieres operations du cas ZIG-ZIG ne doivent pas ^etre executees. Ce phenomene est present dans le cas d'une suppression. En eet, cette operation recherche le nud le plus a gauche, les rotations susceptibles d'^etre trouvees sont des rotations ZIG-ZIG ou ZIG du m^eme sens. Donc le nouveau nud Top verrouille lors d'une rotation ZIG-ZIG est toujours le nud y. Pour obtenir l'algorithme de Simple-Semi-Splay-Tree concurrent, il sut de retirer le cas ZIG-ZAG de l'algorithme precedent. Les Single-Simple-Semi-Splay-Tree et Single-Semi-Splay-Tree vont pouvoir ^etre realises de la m^eme facon. Il sut pour chaque cas d'arr^eter l'algorithme, lorsque les nuds x ou y correspondent au nud cherche. 5.1.4 Experimentations : Simulation de Branch and Bound Cette simulation de Branch and Bound a ete proposee par B. Mans [Mans92a]. Elle consiste en une sequence d'operations de la forme (s:i1 :i2 ), ou s est une suppression et i1 et i2 sont deux insertions. La valeur pr(i) de chaque element a inserer est calculee par l'expression : pr(i) = pr(s) + X:I: ou pr(s) est la valeur de l'element supprime, X un nombre uniformement distribue entre zero et un, et I l'accroissement maximal. Ainsi, la simulation utilise trois parametres : BInf : la borne inferieure, BSup : la borne superieure, MaxIncr : l'incrementation maximale. 5.1.4.a Sequentiel Le tableau suivant montre le nombre d'operations et le nombre maximal d'elements, en fonction de la valeur de BSup. These Paris VI, Janvier 1996 5.1. L'algorithme de Branch and Bound 90 Bsup 900 950 1000 1050 1100 1150 NbOps 12555 23919 38157 67420 114225 172690 NbElts 3816 7047 13647 24811 36831 63210 100 Temps (s) D-Heap4 Leftist-Heap Pairing-Heap Funnel-Tree Funnel-Table Skew-Heap Semi-Splay-Tree Single-Semi-Splay-Tree 10 1 900 950 1000 1050 Bornes Sup 1100 1150 1200 Figure 5.2 : Test de les de priorite sequentielles sur un Sparc. BInf= 100 et MaxIncr= 150. La gure 5.2 montre l'ecacite des dierentes les de priorite en sequentiel. Elle indique les "pauvres" performances du d-Heap, leftist-heap et du Pairing-Heap. Le Skew-Heap etant la version auto-ajustable du Leftist-Heap. Nous pouvons remarquer sur le co^ut des tests d'equilibrage du Leftist-Heap le rend moins performant que le Skew-Heap. Les operations du Funnel-Tree sont en O(log S) quel que soit le nombre d'elements presents dans la structure. Cette remarque explique le fait qu'il soit equivalent au Skew-Heap. Ayant des complexites tres interessantes quand a ces operations, il est normal que le Funnel-Table s'avere aussi ecace en pratique qu'il le laissait supposer en theorie. De m^eme, l'inter^et d'utiliser les arbre binaires de recherche comme les SemiSplay-Tree en tant que les de priorite, semble ^etre non negligeable dans ce modele. 5.1.4.b Parallele Nous presentons d'abord les tests eectues avec les structures SDOP, puis, avec les SDDP. Les tests experimentaux ont ete eectues avec les parametres suivants: BInf= 100, BSup= 1200 et MaxIncr=150. Les processeurs entre deux acces a la structure eectuent peu de calcul. Leur activite se resume donc a des operations sur les representations. Les les de priorite sont placees dans un cas extr^eme. La gure 5.3 montre l'inter^et du protocole par marquage vis-a-vis du protocoles par verrou. Les dierences de temps d'execution de dierentes les de priorite arborescentes sont agrantes sur la Sequent Balance. Cette dierence l'est encore plus sur la Ksr1 (gure 5.4). These Paris VI, Janvier 1996 5.1. L'algorithme de Branch and Bound 91 60 Funnel Tree Funnel Tree Marquage Skew Heap Jones Skew Heap Jones Marquage Single Splay Marquage Single Splay 55 50 45 Temps 40 35 30 25 20 15 10 1 2 3 4 5 6 Nombres de processeurs 7 8 9 Figure 5.3 : SIM : Comparaison verrou-marquage sur une Sequent Balance 55 Skew Heap Skew Heap Mark Skew Heap Mark-Priority 50 Temps 45 40 35 30 2 4 6 8 10 12 Nombres de processeurs 14 16 Figure 5.4 : SIM : Comparaison verrou-marquage-priorite sur une Ksr1 Nous avons ajoute sur la gure 5.4, les temps du Skew-Heap, lorsque la variable priorite est placee dans le nud pere. Nous pouvons voir que cette amelioration reduit les contentions d'acces sur une m^eme zone memoire et permet d'augmenter les performances. 55 Single-Simple-Semi-Splay Avec Marquage Single-Semi-Splay Avec Marquage Skew Heap Jones Avec Marquage Funnel Tree Avec Marquage Funnel Table 50 45 Temps 40 35 30 25 20 15 10 1 2 3 4 5 6 7 Nombres de processeurs 8 9 Figure 5.5 : SIM : Comparaison de toutes les fp SDOP, sur Sequent Balance La gure 5.5 montre les temps de dierents types de les de priorites sur la Sequent Balance. Nous pouvons remarquer tout d'abord que le Funnel-Table qui etait le plus ecace en sequentiel, le reste en concurrent malgre sa mauvaise complexite dans le pire des cas. Cette structure est tres bien adaptee aux algorithmes de Branch and Bound, mais elle necessite des hypotheses qui la rende peu utilisable dans d'autres contextes. Les Semi-Splay-Tree sont interessants jusqu'a 5 processeurs car, comme nous These Paris VI, Janvier 1996 5.1. L'algorithme de Branch and Bound 92 110 Skew Heap Mark Priority Simple Splay Mark Priority Simple Splay Mark Priority Funnel Tree Mark Funnel Table d-Heap 100 90 80 Temps 70 60 50 40 30 20 10 2 4 6 8 10 12 Nombres de processeurs 14 16 Figure 5.6 : SIM : Comparaison de toutes les fp SDOP, sur la KSR1 l'avons vu precedemment ils "saturent" tres t^ot par rapport aux autres les de priorite, la taille de leur fen^etre etant plus importante. La version du Skew-Heap donnee ici est la version de Jones [Jone89], utilisant notre protocole par marquage. La structure de Funnel-Tree n'est pas tres performante avec peu de processeurs. En eet, sa complexite theorique est de O(logS), quel ques soit le nombre d'elements presents dans la structure. Mais, elle est plus ecace que les Splay-Tree a partir de 7 processeurs et devient equivalente au Skew-Heap pour 9 processeurs. La gure 5.7 donne les resultats du Skew-Heap et du Funnel-Table parallelisees avec l'algorithme SDDP. Les transferts memoires etant moins importants avec cet algorithme sur la Ksr1, les performances sont meilleures qu'avec un algorithme SDOP. 75 Skew Heap SDDP Funnel tree SDDP 70 65 60 Temps 55 50 45 40 35 30 25 2 4 6 8 10 12 Nombres de processeurs 14 16 Figure 5.7 : SIM : Comparaison de fp SDDP, sur la KSR1 5.1.5 Experimentations : Le probleme de l'aectation quadratique La recherche de la minimisation des co^uts lors de l'implantation d'unites sur des emplacements predenis est un probleme d'Optimisation Combinatoire tres repandu, ses applications reelles etant tres nombreuses et variees [Maut93]. Un exemple en est l'implantation de n usines sur n sites, une et une seule usine devant ^etre placee sur chaque site. Les distances inter-sites sont evidemment connues. La distance entre deux sites quelconques i et j est : dij . These Paris VI, Janvier 1996 5.1. L'algorithme de Branch and Bound 93 Par ailleurs, lors du fonctionnement ulterieur du systeme, les usines devront echanger entre elles une certaine quantite de matieres economiques (matieres premieres, produits semi-nis, machines, techniciens ...). Le ux devant transiter entre deux usines quelconques k et l est connu (ou estime) et est note : fkl . L'objectif est de determiner quelle implantation de minimiser le co^ut total de transit de matieres entre les usines (le co^ut du transport est juge proportionnel a la quantite transportee multipliee par la distance parcourue). Ce probleme peut ^etre formalise comme un programme quadratique en variables 0/1: xik = 1 si l'unite k est placee sur le site i, xik = 0 sinon. P P P P (AQ) : Minimiser ni=1 nj=1 nk=1 nl=1 dij fkl xik xjl sous les contraintes : xPikn 2 f0; 1g (1) x = 1 8 k (2) Pnki=1=1 xikik = 1 8i (3) Bien que la taille du probleme soit consideree comme de "n", n2 variables xik correspondent au choix logique d'implantation des usines sur les sites. Les 2n contraintes lineaires (2) et (3) formalisent l'obligation de n'implanter sur chaque site qu'une et une seule usine, dierente pour chacun. La fonction economique, enn, traduit le souci de minimisation du co^ut total de transit. Le B&B utilise est celui de Mautor [Maut93]. Le principe de separation est polytomique [Rouc87a, Rouc87b], l'evaluation est calculee par la methode dite de Gilmore-Lawler (Gilmore [Gilm62] et Lawler [Lawl63]). L'algorithme de Mautor a ceci d'interessant, qu'ilevite la generation de problemes symetriquement equivalents, lorsque l'ensemble des sites forment une gure reguliere. Dans beaucoup d'instances de problemes comme ceux trouves dans la QAPLib [BuKR91], l'ensemble des sites a une topologie reguliere. Il s'agit, la plupart du temps, d'une grille rectangulaire ou carree, d'un cercle ou d'une ligne, dans lesquels sont regulierement distribues les emplacements. Les tests ont ete eectue sur l'instance de taille 15 de Nugent (note Nugent15) pris dans la QAPLib [BuKR91]. La borne superieure initiale du QAP etant tres proche de la valeur de la solution optimale, nous ne presentons pas de tests de les de priorite sequentielles, car elle n'apporterait rien de plus dans le contexte d'un QAP que dans celui d'une simulation de B&B. En revanche, la dierence entre les deux contextes etant la quantite de calcul local, les performances obtenues en paralleles donnent des resultats pertinents. Structures a operations paralleles Comme precedemment, les dierences de performances entre le Skew-Heap utilisant le protocole par marquage avec la valeur de priorite dans le nud pere et celui parallelise avec le protocole par verrou, sont agrantes. La gure 5.8 representant les temps d'execution de toutes les les de priorite pour le probleme Nugent15, illustre les dierences theoriques de ces structures (chapitre 3). Le Funnel-Table s'avere toujours le plus interessant. Le calcul local dans ce contexte etant assez important, les ecarts entre les dierentes les s'amenuisent. Toutefois, le Funnel-Tree devient de plus en plus performant compare au Funneltable. L'explication reside dans sa taille. L'espace des priorites du Nugent15 est tres reduit, la taille de l'arbre a entonnoir devient donc tres petite. These Paris VI, Janvier 1996 5.1. L'algorithme de Branch and Bound 94 700 Skew Heap Marquage-Priority Skew Heap Funnel Tree Marquage Funnel Table 600 Temps 500 400 300 200 100 0 0 5 10 15 Nombres de processeurs 20 25 Figure 5.8 : QAP: Test de plusieurs les de priorite SDOP (KSR1, Nugent15). 500 Skew SDDP Funnel Tree SDDP Funnel Table SDDP Skew SDODP Funnel Tree SDODP Funnel Table SDODP 450 400 350 Temps 300 250 200 150 100 50 0 0 5 10 15 Nombres de processeurs 20 25 Figure 5.9 : QAP: Test des strategies d'equilibrage de charge (SkewHeap,Ksr1,Nugent12). Structures SDDP et SDODP La gure 5.9 montre les performances des al- gorithmes SDDP et SDODP. Le nombre de sous-structures pour les algorithmes SDODP est xe a 1 pour 2, 4, 6, et 8 processeurs, puis a 2 pour 12 et 16 puis a 3 pour 24 processeurs. Nous pouvons remarque qu'il n'y a pas de dierences entre les algorithme SDDP et SDODP pour les Funnel-tree et le Funnel-Table. Ceci peut s'expliquer par le fait que les co^uts de l'algorithme SDOP sur la Ksr1 etant tres importants (transfert memoire voir gure 5.8), ils recouvrent le gain en co^ut de l'algorithme SDDP. Le fait que tres peu d'anomalies peuvent se produire sur le probleme de l'aectation quadratique est une deuxieme raison. En eet, la borne superieure initiale sur ce probleme etant proche de la valeur de la solution optimale, peu de sommets inutiles peuvent ^etre generes. La propriete de stabilite des structures Funnel limite d'autant plus ce risque. Et l'inter^et d'utiliser une SDODP n'appara^t donc pas tres clairement These Paris VI, Janvier 1996 5.2. L'algorithme A* 95 sur ces resultats. En revanche, peu d'anomalies peuvent se voir sur les resultats de la Skew-Heap. L'algorithme SDDP a un comportement en "dents de scie" alors que l'algorithme SDODP donne des resultats plus reguliers. 5.2 L'algorithme A* Ce travail a ete fait avec Van-Dat Cung [CuLe94b]. L'espace de solutions potentielles est deni en Intelligence Articielle en terme de d'espace d'etats. L'espace d'etats est represente par un graphe note G = (V; E; C), ou E est l'ensemble des arcs du graphe representant les transitions possibles entre etats, cij represente le co^ut du passage de l'etat vi a l'etat vj , V est l'ensemble des etats/sommets. Trouver une solution optimale du probleme est equivalent a trouver le chemin minimal d'un etat initial v0 a un etat nal vn . Dans la suite, nous confondons les termes etat, et sommet du graphe. L'algorithme A* [Nils80, Pear84] eectue une recherche de la solution optimale avec une strategie meilleur d'abord. Chaque sommet a une valeur assignee, calculee par une fonction d'evaluation note f. Pour un sommet vi , elle vaut : f(vi ) = g(vi ) + h(vi ) ou g est la valeur du chemin de v0 a vi, et h est une fonction heuristique evaluant le chemin de vi a vn . L'algorithme A* utilise le m^eme schema d'execution que l'algorithme Branch and Bound avec une strategie meilleur d'abord. A chaque pas de l'algorithme, le sommet ayant la meilleure valeur de h est selectionne pour ^etre explore. Plusieurs proprietes de l'algorithme A* peuvent ^etre donnees. Nous les rappelons brievement. Propriete 23 L'algorithme A* trouve l'etat nal si il existe. Propriete 24 Si la fonction h est admissible, c'est-a-dire si h(vi) h(vi ) ou h (vi ) est la valeur du chemin optimal de vi a vn ; alors l'algorithme A* trouve le chemin minimal de vi a vn (si il existe). Propriete 25 Quelque soit vi un sommet du graphe, et pour tout vj suivant de vi, si la fonction h est admissible et monotone, c'est-a-dire si : 0 < h(vi ) ? h(vj ) cij alors la fonction f est monotone croissante, f(vi ) f(vj ): These Paris VI, Janvier 1996 5.2. L'algorithme A* 96 5.2.1 Structures de donnees pour l'algorithme La structure utilisee pour stocker les sommets non explores est appelee la liste ouverte. Si l'espace de recherche est un arbre, la liste ouverte est une simple le de priorite. L'algorithme A* est dans ce cas equivalent au Branch and Bound meilleur d'abord. En revanche, si l'espace de recherche est un graphe, chaque sommet peut ^etre reference par une clef, representant la conguration de l'etat. Nous notons k(vi ) la conguration de l'etat vi . Dans ce cas, plusieurs chemins peuvent exister d'un sommet vi a un sommet vj Le sommet vj peut donc ^etre explore plusieurs fois, des parcours redondants de l'espace de recherche peuvent donc ^etre eectues. Pour cela, les sommets deja explores sont stockes dans une liste appelee liste fermee. Ils y sont ranges selon leur clef pour tester s'ils ont deja ete explores. La semantique des operations de la liste fermee correspond donc a celle des operations des structures de recherche. Lorsqu'un nouveau sommet vi est genere, il n'est insere que si il n'existe pas deja dans la liste fermee. Toutefois, il est insere dans la liste ouverte, si il n'existe pas un element de clef k(vi ), ou si un tel element x existe mais avec une priorite inferieure a celle de vi . Dans ce dernier cas, vi est insere et x doit ^etre supprime. La semantique des operations de la liste ouverte est celle des les de priorite mais le critere supplementaire represente par la clef d'un element doit ^etre pris en compte. Le structure doit donc gerer le double critere (priorite, clef). Les parallelisations de l'algorithme A* presentees dans la litterature ne considerent jusqu'ici qu'un espace de recherche sous forme d'arbre, reduisant le probleme de la parallelisation des structures listes ouverte et fermee, a celui d'une le de priorite parallele. Rao et Kumar [RaKu88] presente des versions SDOP puis SDDP fondee sur le black-board (voir les paragraphes 1.2.4.c et 1.3.4) Mahapatra et Dutt [?] etudient les problemes d'equilibrages de charge pour une structure SDDP pour MMD. Ils donnent une tres breve explication de leur solution pour la recherche dans un graphe. Cung, Fouche [Fouc93] ont propose l'implementation du couple liste ouverte, liste fermee par une combinaison d'une le de priorite et d'une structure de recherche. Cette solution, bien que tres performante en sequentiel, donne de mauvais resultats en version SDOP. Nous montrons qu'il est plus interessant d'utiliser une version modiee de la Treap (Tree-Heap) pour implementer la liste ouverte en versions SDDP et SDOP. 5.2.1.a Combinaison de le de priorite+structure de recherche La solution proposee par Cung et Fouche [Fouc93], regroupe les deux listes (ouverte et fermee). Une structure de recherche est utilisee pour stocker tous les sommets (explores ou non) selon leur clef. Pour pouvoir selectionner le sommet a explorer, une le de priorite est utilisee. Les sommets deja explores n'apparaissent que dans la structure de recherche. Par contre, chaque sommet non-explore est stocke a la fois dans la structure de recherche et dans la le de priorite. Les deux nuds formant un sommet sont lies par des pointeurs croises. La gure 5.10 montre cette combinaison ou les representations des deux structures sont des arbres binaires. These Paris VI, Janvier 1996 5.2. L'algorithme A* 97 File de priorité Arbre de recherche 12 15 F 12 17 G D C E A Figure 5.10 : La structure combinee le de priorite+structure de recherche. L'algorithme de suppression est le suivant. Le sommet le plus prioritaire, c'est a dire celui ayant la meilleur valeur de f, est supprime de la le de priorite. Le pointeur referencant le nud de la structure de recherche est retourne. L'insertion d'un sommet vi nouvellement cree, comporte plusieurs etapes. 1. tester l'existence d'un nud x tel que la clef de x est egale a k(vi ) dans la structure de de recherche. 2. Si x existe, il faut reactualiser sa priorite. Cela signie qu'il faut supprimer le nud associe dans la le de priorite. 3. Sinon inserer le sommet vi dans la structure de recherche et le nud associe dans la le de priorite. En sequentiel, cette structure donne de tres bons resultats. En revanche, en parallele, cette combinaison de structures est dicile a gerer. Le fait qu'une operation soit composee d'un ensemble d'operations sur des representations distinctes, entra^ne des risques d'interblocage. Selon notre modele SDOP, deux processus peuvent posseder chacun deux fen^etres, une sur la le de priorite et une sur la structure de recherche. Or, l'ordre d'acces a chacune d'elles depend de l'operation (pour l'insertion : structure de recherche puis le de priorite, pour la suppression : le de priorite puis structure de recherche). De plus des acces directs etant necessaires dans chacune des structures, le protocole par marquage est impossible a utiliser. 5.2.1.b La Treap La gestion de la le ouverte, est donc typiquement celle d'une structure de donnees a double critere. La le ouverte doit orir les operations d'une le de priorite avec une contrainte d'unicite de clef. Pour le realiser, nous proposons d'utiliser une version modiee d'une structure appelee Treap. Nous montrons son ecacite lorsqu'elle est parallelisee en SDOP. These Paris VI, Janvier 1996 5.2. L'algorithme A* 98 Representation et algorithme des operations sequentielles La representation de la treap est un arbre binaire, dont chaque nud x stocke un element qui contient deux informations: 1. une priorite, 2. une clef. L'arbre est tel que : 1. les clefs respectent l'invariant des arbres binaires de recherche. 2. les priorites respectent l'invariant des tas. Dans la suite, nous confondons un nud et l'element qu'il contient. Nous notons respectivement la clef et la priorite d'un nud x, par x:k et x:p. Il est clair que, quelques soient les valeurs des couples (priorite,clef) un tel arbre existe. Mais, la disposition des nuds depend de ces valeurs. Si la valeur des couples fait que les nuds ont le m^eme ordre selon leur priorite et leur clef, l'arbre est reduit a une simple liste. L'ordre induit par les priorites et les clefs denissent la longueur des branches et par suite l'equilibrage de l'arbre. Nous reviendrons sur ce probleme, apres avoir explique les semantiques et les algorithmes des operations pour implementer la le ouverte de l'algorithme A*. Rechercher(clef) cherche un nud x dans la treap tel que x:k =clef. Algorithme : le nud est recherche comme dans un arbre binaire classique, en suivant les valeurs de clefs des nuds rencontres. Inserer(x) ajoute un nud x dans la treap, en s'assurant que x:k est unique. Soit x0 un nud existant dans la treap tel que x0 :k = x:k. Deux cas sont alors possibles : x0:pr < x:pr: x est insere et x0 est supprime, x0:pr x:k : x n'est pas ajoute. Algorithme : une premiere phase consiste a rechercher la position ou le nud x doit ^etre insere, suivant les valeurs de clef et de priorite. Cette premiere phase s'arr^ete sur un nud y du chemin parcouru, lorsque y est tel que : y:pr < x:pr. x est insere en tant que pere de y. Bien que les invariants soient respectes vis-a-vis du chemin deja parcouru, ils ne le sont pas vis-a-vis du sous-arbre de racine x. Pour retablir les invariants sur ce sous-arbre, une deuxieme phase consiste a le separer en deux sous-arbres L et R tels que R (respectivement L) contient tous les nuds de clef superieure (respectivement inferieure) a x:k. Finalement, R (L) est aecte en tant que sous-arbre droit (gauche) de x. y:k = x:k. x n'est pas insere car il existe deja un nud de m^eme clef, plus prioritaire que lui. Supprimer(clef) retire le nud x tel que x:k =clef. Algorithme : une premiere phase consiste a rechercher le nud x. Puis un sous-arbre est construit a partir des sous-arbres droit R et gauche L issus de x. L'algorithme suivi, consiste a fusionner la branche droite de L et la branche gauche de R, en respectant les invariants. These Paris VI, Janvier 1996 5.2. L'algorithme A* 99 SupprimerMin() supprime l'element contenu dans la racine de la treap. L'algorithme de fusion presente precedemment est utilise pour realiser cette operation. Comme nous l'avons dit, l'equilibrage de l'arbre depend des valeurs des couples (clef, priorite). Il est donc clair que la complexite des operations en depend aussi. Aragon et Seidel [ArSe89] ont propose une treap pour implementer une structure de recherche ou la valeur de priorite de chacun des elements est utilisee pour garder l'arbre equilibre. Ils proposent de choisir aleatoirement la valeur de priorite de chacun des nuds. Ils demontrent que si ces valeurs sont independantes et equitablement distribuees, la profondeur de l'arbre est O(log n) En fait, il faut que l'ordre des priorites soient independants de celui des clefs. La valeur de priorite ne peut ^etre changee. En revanche, l'ordre des clef peut ^etre modie par une fonction s'appliquant sur la conguration de l'etat. Les operations paralleles Nous presentons une parallelisation SDOP puis SDODP. Les algorithmes de chacune des operations parcourant l'arbre dans le m^eme sens, notre methode de verrouillage partiel presentee au chapitre 3, peut ^etre appliquee. De, plus le sens de parcours etant racine-feuille, le protocole par marquage peut aussi y ^etre applique. Une parallelisation SDODP d'une treap, consiste donc a utiliser plusieurs soustreaps. Si les algorithmes des operations, permettent d'assurer l'unicite des clefs dans chacune des sous-structures, ils ne le permettent pas sur l'ensemble des sousstructures. L'algorithme SDODP doit donc tenir compte de cette contrainte supplementaire. Nous avons choisi la technique consistant a associer un ensemble de valeurs de clefs particulieres a chaque sous-treap. Ceci revient a la methode de "declustering" utilisee en Base de donnees ou a une technique de hachage. Une valeur de clef representant une conguration du probleme traite par l'algorithme A*, la fonction de hachage depend donc aussi du probleme. Si la structure de donnees globale est composee de D sous-treaps, et si P processus sont utilises, chaque groupe de DP processus est aecte a une sous-treap. Les processus suppriment chacun des elements a explorer dans leur sous-treap, et inserent un element nouvellement genere dans la sous-treap correspondant a sa valeur de clef. La fonction de hachage denissant un placement statique des elements, il n'est pas utile de faire un equilibrage de charge en terme de nombre d'elements. Toutefois, il peut arriver qu'une sous-treap deviennent vide, ou que les elements qu'elle contienne, soient bien moins prioritaires que ceux contenus dans les autres sous-treap. Nous utilisons alors, le m^eme algorithme que pour les les de priorite dans un B&B. Un blackboard stocke des bons elements. La structure de liste fermee est en fait dans notre implementation une treap SDODP. Les operations n'utilisant pas le critere de priorite, il n'y a pas de semantique de l'operation de suppression a assurer. Le nombre D de sous-treaps, peut donc ^etre choisi aussi grand que voulu. 5.2.2 Experimentations Le probleme pris comme exemple, est le jeu du taquin (15-puzzle). Ce jeu est considere comme le probleme test pour l'algorithme A*. Le jeu de taille 15 est une grille de 4x4 emplacements possibles, contenant quinze tuiles et un emplacement vide (le trou). Chaque tuile est numerotee, une permutation des tuiles sur les emplacements, est appelee conguration. Le but du jeu est d'obtenir, a partir d'une conguration initiale, une conguration nale, en faisant glisser les tuiles. These Paris VI, Janvier 1996 5.2. L'algorithme A* 100 L'algorithme A* est utilise pour trouver le minimum de glissements, (appeles mouvements), pour atteindre la conguration nale. La clef est la conguration du jeu. La valeur de g est le nombre de mouvement deja eectues. Nous avons utilise comme fonction h, la somme des distances de Manhattan pour chacune des tuiles, entre sa position actuelle dans la grille et sa position nale. Korf [Korf85] a donne une liste d'instances de problemes. Nous en avons choisi quatre de tailles dierentes. Le nombre d'etats engendres varie approximativement de 60 milles (Korf12) a 1,5 million (Korf78). La longueur du chemin de l'etat initial a un etat nal sont respectivement de 45 (Korf12), 41 (Korf55), 53 (Korf78 et Korf94). Les temps d'execution sont illustres par les gures 5.11 et 5.12. Les accelerations correspondantes par la gure 5.13. Sur les courbes presentant les temps d'execution exprimes en secondes, nous observons une decroissance rapide en fonction du nombre de processeurs utilises pour toutes les instances du probleme. Ceci est vrai pour les deux machines utilisees Ksr1 et Sequent Balance. Cependant, nous n'avons pas pu resoudre des instances de grande taille sur la Sequent Balance a cause du manque d'espace memoire. Seule l'instance Korf12 a ete resolue. Les dierences d'acceleration entre les instances sont dues a la dierences de taille des instances. L'instance Korf78 necessite une exploration signicativement plus grande que les autres. 500 450 3 Korf 12 3 400 350 300 250 3 200 3 3 150 3 3 100 1 2 3 4 5 6 7 8 N0mbre de processeurs Figure 5.11 : Taquin: Resultats en secondes de l'algorithme SDOP sur une Sequent Balance 8000. Nous observons une anomalie d'acceleration surlineaire pour l'instance Korf78 lorsque 2 ou 3 processeurs sont employes. Cela est provoque par le fait qu'un etat nal peut ^etre trouve plus rapidement avec plusieurs processeurs qu'avec un seul. Des etudes detaillees de ce phenomenes peuvent ^etre trouvees dans [Rouc90, Mans92]. Pour le taquin de taille 15, la generation et l'evaluation des etats ls d'un etat necessitent tres peu de temps par rapport au temps d'acces a la treap malgre la concurrence. D'autre part, l'arbre de recherche developpe au cours de l'exploration a un facteur de branchement tres faible, chaque etat n'ayant que trois etats ls possibles. Ceci explique pourquoi les accelerations ne sont pas lineaires par rapport au nombre de processeurs utilises. De meilleures accelerations pourraient ^etre obtenues si les calculs pour l'exploration d'un etat etaient plus importants, par exemple plus d'etats ls a engendrer et plus de temps pour calculer leur evaluation. Rao et al. [RaKR87a] ont mis en evidence experimentalement que les accelerations de These Paris VI, Janvier 1996 5.2. L'algorithme A* 101 55 50 3 Korf 12 3 45 3 40 35 3 3 30 3 25 3 33 20 0 2 4 6 8 10 12 14 16 Nombre de processeurs 9000 3 8000 Korf 78 3 7000 6000 5000 4000 3 3000 33 333 2000 3 1000 0 2 4 6 8 10 12 14 16 Nombre de processeurs 500 Korf 55 3 450 3 3 400 3 350 3 300 3 33 250 3 200 0 2 4 6 8 10 12 14 16 Nombre de processeurs 1100 3 1000 Korf 94 3 900 3 800 700 3 3 600 3 500 33 3 400 0 2 4 6 8 10 12 14 16 Nombre de processeurs Figure 5.12 : Taquin: Resultats en secondes de l'algorithme SDOP sur une KSR1. 8 7 6 Korf 12 sur KSR1 Korf 55 sur KSR1 Korf 94 sur KSR1 Korf 78 sur KSR1 Korf 12 sur Sequent 5 4 3 2 4 4 4 2 32 2 3 3 + + + 14 3 2 + 2 4 4 2 3 + 3 + 2 4 4 2 3 + 2 3 + 6 8 10 Nombre de processeurs 2 3 + 12 14 16 Figure 5.13 : Taquin: Accelerations sur la KSR1. ce type de parallelisation centralisee sont meilleures quand l'arbre de recherche developpe a un facteur de branchement b plus important impliquant plus de calculs locaux. These Paris VI, Janvier 1996 5.2. L'algorithme A* 102 Si les temps d'execution, sur l'instance Korf12, sont plus faibles sur la KSR1 que sur la Sequent Balance (pour un m^eme nombre de processeurs utilises), l'acceleration est cependant meilleure sur la Sequent Balance. La KSR1 disposant d'une memoire virtuellement partagee, les co^uts sont plus importants que sur la Sequent Balance qui dispose d'une memoire physiquement partagee. These Paris VI, Janvier 1996 103 6 BOB : une bibliotheque d'aide au developpement d'applications utilisant la methode Branch and Bound Chapitre L'equipe PNN de Versailles regroupe plusieurs chercheurs travaillant aussi bien en Optimisation Combinatoire qu'en Algorithmique Parallele, et utilise des machines d'architecture tres diversiee, station, reseau, multiprocesseurs, memoire partagee ou distribuee. Il est donc tout naturel qu'une bibliotheque d'aide au developpement de methodes exactes d'optimisation y ait vu le jour. La notion precedemment introduite de structure de donnees globale a permis la realistion d'une telle bibliotheque. Si BOB est le fruit d'un travail d'equipe (la BobTeam regroupe M. Benachouche, S. Dowaji, V.D. Cung, T. Mautor, C. Roucairol et moi-m^eme), ma part a concerne la denition globale de l'architecture de la bibliotheque, l'introduction des structures de donnees sequentielles et paralleles sur machine a memoire partagee. BOB a ete presentee a plusieurs conferences : nationales, ECOLE CAPA, janvier 95 [AGFR+95], Journees du LIPN, Groupe Combinatoire AFCET, Seminaires PUC, UFRJ Rio (Bresil), internationales, INFORMS Institute for OR and Managment Science, New Orleans Fall 1995, INFORMS Computer and OR, Dallas Janvier 1996. De plus, l'article presente par l'equipe a ete selectionne comme contribution nationale de la France pour le congres IFORS, International Federation of OR Societies a Vancouver en 1996. 6.1 Motivations Lorsqu'un utilisateur ecrit des algorithmes Branch and Bound pour resoudre des problemes reels, bien souvent il ecrit plusieurs fois les m^emes composantes : la gestion de la le de priorite, la gestion de la borne superieure, etc. Il n'a plus le temps de se consacrer entierement aux parties de l'application proprement-dite (principe de separation, fonction d'evaluation). These Paris VI, Janvier 1996 6.1. Motivations 104 De plus son centre d'inter^et etant plus le cote Optimisation Combinatoire, il ne s'interesse souvent que tres peu aux parties "purement informatiques" de son application comme la le de priorite. Par exemple, il utilisera une le de priorite sous forme de D-Heap (ou Implicit-Heap) alors que d'autre formes de les de priorite sont beaucoup plus performantes (comme montre au chapitre 5). Le temps total de son application s'en ressentira. En sequentiel, une bibliotheque doit donc faciliter le developpement d'une application de type Branch and Bound tout en orant des composantes performantes. De plus, ce m^eme utilisateur disposant d'une application de type Branch and Bound sequentiel ecace, ne la portera que tres rarement sur une machine parallele. Alors que l'utilisation d'une telle machine pourrait l'aider a faire reculer la barriere de l'explosion combinatoire, en lui permettant d'obtenir plus rapidement la solution optimale de son probleme. Une autre raison pour construire une bibliotheque, est de pouvoir valider les parallelisations de Branch and Bound sur des exemples qui ne soient pas de simples problemes d'"ecole" ou des "jouets". En eet, les chercheurs travaillant sur la parallelisation de tel ou tel algorithme s'attardent peu sur la resolution du probleme au sens Optimisation Combinatoire. Ils utilisent souvent un exemple simple d'application de Branch and Bound ne reetant pas forcement un bon contexte d'execution pour leur parallelisation. En fournissant aux utilisateurs de Recherche Operationnelle un moyen aise de developper leur B&B, nous procurons aussi aux chercheurs en parallelisme une base interessante de B&B performants. L'ecriture d'une bibliotheque est aussi un bon moyen pour essayer de fournir un standard d'ecriture de B&B et faciliter par suite les echanges de codes entre chercheurs. C'est aussi un biais pour rassembler les deux communautes: Optimisation Combinatoire et Algorithmique Parallele. Notre formulation de la parallelisation d'applications (voir chapitre 1) a ete le point de depart du developpement de la bibliotheque BOB. La notion de structure de donnees globale permet donc de proposer une bibliotheque regroupant dierentes implementations de structures de donnees sequentielles et surtout paralleles. Du point de vue de l'application, la gestion de l'organisation de la structure et/ou du parallelisme devient transparente quelques soient : la le de priorite (D-Heap, Pairing-Heap, Leftist-Heap, Skew-Heap, Funneltree, Funnel-Table, Splay-trees), les choix de parallelisation (SDES, SDOP, SDDP, SDODP), l'environnement de programmation (PVM, MPI, LANDA, P4, PM2, Athapascan, Pthread) et l'architecture de la machine (sequentielle, parallele a memoire distribuee, partagee). BOB a ete utilisee dans STRATAGE ME par Lille et Grenoble pour la mise au point des regulateurs. Des algorithmes pour resoudre des problemes diciles de l'Optimisation Combinatoire ont ete implantes a Versailles avec BOB (Couverture minimale, Voyageur de Commerce), a Lille avec la collaboration de Versailles (Affectation Quadratique). These Paris VI, Janvier 1996 6.2. Principe de fonctionnement de la bibliotheque 105 A notre connaissance, il existe quelques bibliotheques similaires. Pour celles qui ne sont pas simplement des projets ou en cours de realisation, on peut remarquer qu'elles se veulent souvent moins generales et n'orent pas un aussi large choix de fonctionnalites que BOB (structures de donnees, strategies d'equilibrage, de parallelisation,...). Elles ne couvrent pas non plus tous les types de machines, les machines ciblees sont uniquement a memoire distribuee (bibliotheque de l'equipe de Luling et Monien a Paderborn, Allemagne). 6.2 Principe de fonctionnement de la bibliotheque Nous allons tout d'abord decrire notre conception d'un programme B&B, en donnant une vision uniee de l'algorithme sur des machines sequentielles, paralleles a memoire partagee ou distribuee, ou m^eme sur un reseau de stations de travail. Puis nous en degagerons les composantes qui seront a la charge du programmeur de l'application, et celles pouvant ^etre implementees par la bibliotheque BOB en fonction de l'architecture de la machine. 6.2.1 Programme Branch and Bound Un programme B&B se compose de trois parties ou procedures principales. Initialisation: Cette procedure a pour charge l'initialisation de certaines variables comme celle representant la meilleure solution connue, son co^ut (la borne inferieure dans une maximisation ou la borne superieure dans une minimisation), et les dierentes donnees propres a l'application (matrices, des vecteurs, etc). Parcours: Cette procedure s'occupe du parcours de l'arbre de recherche. Elle inclut la generation (par le principe de separation), et l'evaluation des nuds ls (sous-problemes). An de pouvoir choisir entre plusieurs strategies de recherche, nous avons isole dans cette procedure, une sous-procedure qui s'occupera de la generation et de l'evaluation des nuds ls d'un seul nud, recu en parametre. L'exploration d'un ls, est soit dieree (il est insere dans une le de priorite), soit immediate (appel recursif a cette sous-procedure). De cette maniere, les strategies de recherche "Meilleur d'abord" et "Profondeur d'abord" pourront ^etre testees pour une m^eme application. Une strategie mixte, ou des sous-arbres choisis par la strategie meilleur d'abord, sont explores en profondeur d'abord sur une hauteur donnee, est egalement possible. La \granularite" de calcul entre deux acces a la le de priorite peut ^etre ainsi reglee. La procedure "parcours" fait donc appel a des operations sur une le de priorite stockant les nuds en attente d'exploration. Cette procedure doit aussi pouvoir acceder a la borne superieure/inferieure, pour des mises a jour eventuelles lorsqu'une nouvelle solution est trouvee. Elle doit aussi la lire pour savoir si un sous-probleme doit ^etre explore (condition d'elagage). Les composantes de la procedure sont donc les fonctions de generation et d'evaluation, la le de priorite, et la borne superieure (nous nous placons par la suite dans le cas d'une minimisation). These Paris VI, Janvier 1996 6.2. Principe de fonctionnement de la bibliotheque 106 Fin : Cette procedure de terminaison ache la solution trouvee, et diverses mesures comme le temps d'execution, le nombre de nuds explores, le nombre d'operations sur la le de priorite, etc. 6.2.2 Le parallelisme Un B&B peut ^etre parallelise de plusieurs facons, Gendron et Crainic [GeCr95] en ont propose une classication. Type 1 : parallelisation de la procedure de parcours, assimilable a la parallelisation "interne" introduite au chapitre 1. Cette forme de parallelisation porte sur la methode de resolution utilisee (fonction d'evaluation, principe de separation) pour un probleme particulier. Elle genere un grain n, et est donc trop dependante du probleme a resoudre pour qu'il en soit propose une bibliotheque generique. Type 2 : parallelisation de recherche, correspondant a la parallelisation "externe", (chapitre 1). La notion de structure de donnees globale qu'elle soit complexe ou simple, permet de proposer une bibliotheque d'aide a la programmation de B&B. Du point de vue de l'application, la gestion des structures sequentielles ou paralleles est cachee. BOB est une bibliotheque pour ce type de parallelisation. Type 3 : parallelisation du critere de recherche, deux recherches de types dierents (Meilleur d'abord et Profondeur d'abord) sont eectuees en parallele. Cette forme de parallelisation, est en fait une composition de deux B&B avec des strategies dierentes. Si beaucoup de processeurs sont disponibles, deux parallelisations de type 2 peuvent cooperer pour trouver une solution plus rapidement. Peu de travaux de la litterature concernent de type de parallelisme. Nous proposons donc une bibliotheque fondee sur la parallelisation de type 2. Toutes les les de priorite sequentielles, paralleles que nous avons presentees dans les chapitres precedents, peuvent ^etre implementees dans ce modele. En plus de la le globale, la bibliotheque doit gerer la terminaison de l'algorithme parallele ainsi que la coherence de la borne superieure. 6.2.3 Les composantes critiques d'une application Le modele considere de programme B&B met en avant cinq composantes. 1. La procedure d'initialisation et la procedure de generation/evaluation. Elles dependent directement de la nature du probleme a traiter. Leur ecriture est laissee a la charge de l'utilisateur de la bibliotheque. 2. La le de priorite globale. Elle pourra utiliser des algorithmes dierents, selon l'architecture de la machine parallele, et les choix de l'utilisateur. 3. La ou les sous-les de priorite locales ou partagees ou distribuees. Elles sont dependantes d'une part du choix de la structure (tas, arbre de recherche, etc), et d'autre part de la parallelisation choisie (acces concurrents, acces locaux, operations particulieres, etc). 4. La borne superieure globale. Sa strategie de gestion depend de l'architecture de la machine, et du choix de la parallelisation. These Paris VI, Janvier 1996 6.2. Principe de fonctionnement de la bibliotheque 107 5. Les mesures et les statistiques liees au comportement de l'algorithme. Seules les fonctions de la premiere composante ne peuvent ^etre fournies par la bibliotheque, car elles dependent du probleme a traiter. Elles doivent donc ^etre developpees par l'utilisateur, et pourront ^etre codees sans se soucier des problemes lies au parallelisme. En revanche, les fonctions des autres composantes ne sont dependantes que de l'architecture de la machine et des choix de l'utilisateur. Elles n'ont besoin de conna^tre du probleme que la structure de nuds de l'arbre de recherche (le type BobNode). Elles peuvent donc ^ etre implementees dans la bibliotheque BOB. Leur utilisation se fait par l'intermediaire d'appels a des fonctions predenies, rendant ainsi transparentes les dierentes gestions du parallelisme implementees dans ces composantes. FILE DE PRIORITE GLOBALE PROCESSUS PROCESSUS PROCESSUS ... Bob_GenChild() Génération Evaluation Figure 6.1 : Vue d'un B&B parallele. La gure 6.1 montre les interactions entre la le de priorite globale, les processus, et les appels recursifs de la procedure de generation/evaluation. Une autre composante geree par la bibliotheque est la notion de priorite. Elle peut ^etre soit l'evaluation du sous probleme seule, soit l'evaluation et la profondeur du nud, soit la potentialite [DoRo95a]. Cette liste n'est pas exhaustive. Un guide de developpement (actuellement en cours de redaction) contiendra toutes les explications pour denir une nouvelle notion de priorite utilisable dans toutes les implementations de BOB. En ce qui concerne la borne superieure,la bibliotheque est capable de gerer des problemes de minimisation ou de maximisation, selon l'indication de l'utilisateur. Un des buts de la bibliotheque est de pouvoir fournir plusieurs types de les de priorite globales et de bornes superieures globales, pour ainsi en tester les performances, et donc isoler celles qui sont les mieux adaptees a une machine particuliere et a un type de probleme particulier. La bibliotheque BOB est donc constituee d'une collection de bibliotheques. Chacune de ces bibliotheques prend en compte l'architecture de la machine et le choix These Paris VI, Janvier 1996 6.3. Structure conceptuelle de la bibliotheque 108 de l'utilisateur. Lors de la compilation de son application, l'utilisateur indique le modele de machine, ainsi que les options precisant le type de parallelisation. Nous avons choisi cette maniere de faire pour eviter un co^ut a l'execution d^u aux choix de parallelisation et augmentation de la taille de l'executable par des fonctions inutiles. La bibliotheque prend en compte aussi la gestion de processus, qu'ils soient des processus au sens UNIX ou des processus legers (threads). Les parametres d'un executable BOB permettent de specier le nombre de processus, la \granularite" de calcul, et des options d'achage de statistiques (cf. sections 6.5 et 6.6.5). 6.2.3.a La le de priorite globale Nous developpons ici plus longuement les choix concernant le classement des les de priorite globales, proposees par BOB. Nous avons choisi de distinguer, dans un premier temps, les les de priorite globales par l'architecture de machines (sequentielles, paralleles memoire partagees et memoire distribuee). Une troisieme architecture a ete ajoutee recemment. Elle concerne toutes les parallelisations utilisants les bibliotheques "multi-threadees" comme PM2 et Athapascan. Pour les deux premieres architectures paralleles, le classement propose est fonction du contexte d'execution supporte par la structures : ferme, synchrone, asynchrone. Le modele de ferme est en fait assimilable aux SDES. Les modeles synchrone et asynchrone englobent les modeles SDOP, SDDP, SDODP. 6.2.3.b La le de priorite locale ou partagee Les dierents modeles de le de priorite globale ont tous besoin de les de priorite qui seront locales (sequentielles) ou partagees (pouvant supporter plusieurs protocoles de verrouillage partiel). BOB propose un choix de les de priorite locales/partagees classees par genre : Tas : D-Heap, Skew-Heap, Pairing-Heap, Leftist-Heap, Arbres de recherche: Splay-Tree (Semi, Simple-Semi,Single-Semi,Single-SimpleSemi), Funnels ou Structures a entonnoir: Funnel-Tree, Funnel-Table. Cette liste non exhaustive, reporte les structures de donnees actuellement disponibles, mais toute utilisateur peut developper sa propre implementation d'une structure. Dans le cas de machines paralleles a memoire partagee, la ou les les de priorite doivent supporter des acces concurrents. Nous avons deni pour ce cas, trois protocoles d'exclusion mutuelle. Dans le premier, un processus se reserve un acces exclusif (SDES) a toute la le de priorite pour chaque operation. Les deux autres sont les protocoles de verrouillage partiel, (verrous ou marquage denis au chapitre 3). Le choix du protocole est laisse a l'utilisateur. 6.3 Structure conceptuelle de la bibliotheque La gure 6.2 presente la structure conceptuelle de BOB. L'utilisateur doit fournir a BOB quatre fonctions decrivant sa methode de resolution. These Paris VI, Janvier 1996 6.4. Types et fonctions des applications 109 La denition de ces fonctions est detaillee dans le paragraphe 6.4.1. Toutes les autres fonctions necessaires a l'algorithme B&B sont gerees par le noyau de la bibliotheque. L'utilisateur n'a pas besoin de bien conna^tre les fonctions du noyau, sauf si il veut enrichir la bibliotheque en les de priorite, en strategies d'equilibrage de charge et en methodes de parallelisation. Un guide destine aux developpeurs de BOB est fourni avec la bibliotheque. Application Fonctions utilisateur (Evaluation, Solution initiale, construction des noeuds) Moniteur Fonctions utilisateurs BOB Bob_Init(), Bob_GenChild(), Bob_End(), Bob_PrintSolution(). Noyau BOB Opérations sur la FP Globale Bob_GPQIns() Bob_GPQDel() Bob_GPQGelG() Bob_GPQAlloc() Bob_GPQFree() Statistiques −FP −EC −Processus −Solution Gestion Lancement de la des Borne Sup Processus Bob_PriCreat() Bob_ULBInit() Bob_ULBGet() Bob_PriGE() Bob_ULBUpd() Bob_PriE() Bob_ULBSup() Bob_PriLE() ... Fonctions des Priorités Figure 6.2 : Structure fonctionnelle de BOB. Le moniteur a pour but principal de donner des statistiques sur les dierents objets manipules par une application (les de priorite, charge des processus, nombre d'equilibrages de charge,...). Ces chires permettent a l'utilisateur d'analyser les dierents parametres de son application (ecacite de la fonction d'evaluation, critere de branchement,...) et eventuellement d'y apporter des ameliorations. 6.4 Types et fonctions des applications Les "objets" manipules par les applications sont de deux origines. Les uns sont denis par l'utilisateur pour son application, les autres appartiennent a la bibliotheque BOB. 6.4.1 Les types et fonctions denis par l'utilisateur L'utilisateur a le libre choix de la denition de ces objets pour son application, il doit cependant respecter les noms de ces types et fonctions. Les types Ce type doit ^etre une structure denissant un nud de l'arbre de recherche dependant de l'application. L'utilisateur aura la charge de remplir cette structure avec les variables denissant un element de l'espace de recherche propre a son application. BobSolution Ce type doit repr esenter la solution au probleme. BobNode Les fonctions These Paris VI, Janvier 1996 6.4. Types et fonctions des applications Initialisation: 110 void Bob Init(BobArgc, BobArgv) Cette fonction regroupe toutes les initialisations dont a besoin un B&B : la borne inferieure initiale, la borne superieure initiale, la racine de l'arbre de recherche, la taille du probleme et la meilleure solution initiale connue. Les parametres de cette fonction representent les parametres passes a l'executable (forme classique du C, argc et argv). La terminaison: void Bob End() Cette fonction donne la possibilite a l'utilisateur d'executer en complement des instructions choisies en fonction de son application a la n de l'execution du programme. Achage de la solution: void Bob PrintSolution(s) Cette fonction ache la meilleure solution courante (BobSolution *s). Cette fonction sera executee a chaque demande d'achage des statistiques, et a la n de l'execution du programme. Generation des sous problemes (nuds ls): void Bob GenChild(BobCurrNode, BobDepth, BobExpCt) L'utilisateur ecrit dans cette fonction la generation via le critere de separation de son choix et l'evaluation des sous problemes ls du sous probleme courant BobCurrNode (qui est de type BobNode recu en param etre). Le parametre BobDepth repr esente la profondeur actuelle de l'exploration. Le parametre BobExpCt pointe sur une structure de type BobTExpCt donnant entre autre la profondeur de l'exploration (cf. paragraphe 6.4.2). 6.4.2 Les types, variables et fonctions fournis par la bibliotheque Ces "objets" denis dans la bibliotheque sont mis a la disposition de l'utilisateur pour son application sans qu'il ait besoin de les developper. Les types Ce type denit la priorite d'un nud. Un utilisateur peut choisir dierentes notions de priorite pour la recherche meilleur d'abord. La priorite d'un nud est son evaluation, ou son evaluation et sa profondeur dans l'arbre de recherche. La notion de "potentialite" est prevue parmi ces choix. BobTid Ce type repr esente l'identite d'un processus. Il est dierent selon le type de machines utilise. La variable associee est BobId. BobTExpCt Ce type regroupe les informations utiles au contr^ ole de la granularite d'exploration. Les variables Plusieurs variables globales, que l'utilisateur doit initialiser dans la fonction Bob Init, sont oertes par la bibliotheque: BobRoot : pointeur sur un nud de type BobNode repr esentant la racine de l'arbre de recherche. La bibliotheque s'occupera de l'insertion de ce nud. BobPbSize : taille initiale du probl eme (optionnelle). BobTPri These Paris VI, Janvier 1996 6.5. Moniteur 111 Les fonctions La bibliotheque ore des fonctions de gestion de la borne superieure et d'insertion dans la/les structure(s) de donnees contenant les nuds a explorer. 1. Fonctions pour la borne superieure et/ou inferieure : erieure globale. void Bob ULBInit(BobULB,s) : initialisation de la borne sup La valeur de la variable BobULB est donnee par l'utilisateur. Ce dernier doit fournir la variable s contenant la solution initiale. int Bob ULBGet() : fonction renvoyant la valeur de la borne sup/inf erieure globale. int Bob ULBSup(BobEval) : fonction testant si BobEval est inf/sup erieure a la valeur de la borne sup/inferieure globale BobULB. Elle renvoie 1 si BobULB > BobEval, 0 sinon. int Bob ULBUpd(BobNewULB,BobNewSol) : fonction testant si la nouvelle solution realisable peut prendre la place de la meilleur solution connue. Elle renvoie 1 si BobULB a ete modie, 0 sinon. Cette fonction s'occupe aussi de supprimer les nuds obsoletes de la structure globale, c'est-a-dire des nuds ayant des evaluations sup/inferieures strictement a BobULB. 2. Fonction de contr^ole de la granularite de calcul : int Bob ExpCtrl(BobDepth, BobExpCt) Teste si la profondeur maximale d'exploration, contenue dans la structure pointee par BobExpCt, est atteinte pour le processus appelant cette fonction. Elle renvoie 1 si BobDepth est egal a la profondeur maximum d'exploration, 0 sinon. Dans le cas de machine parallele, cette fonction teste egalement si le nombre de nuds dans la structure de donnees globale est susant pour que tous les processus aient du travail. 3. Fonctions pour la structure de donnees globale: void Bob GPQIns(BobCurrNode) orite globale. : insere le nud courant dans la le de pri- : retire le nud le plus prioritaire de type BobNode de la le de priorite globale ou d'une partie de la le de priorite globale (cas de certaines parallelisations). BobNode *Bob GPQDel() La gure 6.3 donne une autre vue des fonctions de la bibliotheque. Les eches traduisent les relations appelant-appele entre les fonctions. 6.5 Moniteur La bibliotheque ore un moniteur \temps-reel" donnant des statistiques sur le comportement de l'application. L'achage de ces statistiques ainsi que celui de la meilleure solution courante est fait par l'intermediaire de la fonction Bob PrintStat(). These Paris VI, Janvier 1996 6.5. Moniteur 112 Bob/ArchXXX/ Bob/Common/start.c main() Bob_Algo() goprocs.c Bob_Main() Bob_GoJob() ASC SYC FRM op.c Bob/PQ/XXX.c Bob_GPQAlloc() Bob_PQAlloc() Bob_GPQFree() Bob_PQFree() Bob_GPQIns() Bob_PQIns() Bob_Init() Bob_GPQDel() Bob_PQDel() Bob_End() Bob_GPQDelG() Bob_PQDelG() App/app.c Bob_GenChild() Fonctions Utilisateurs upbd.c Bob_ULBInit() Bob_ULBSup() Bob_ULBUpd() Bob_ULBGet() Figure 6.3 : Synoptique des fonctions de BOB. Les statistiques sont divisees en deux groupes : les statistiques sur l'activite du ou des processus, et les statistiques sur l'etat des les de priorite. A la n de l'execution, toutes ces statistiques ainsi que le temps d'execution sont aches automatiquement. 6.5.1 Activite des processus Pour chacune des architectures, les statistiques donnent des elements d'information sur : le nombre de nuds evalues, le nombre de nuds supprimes de la le, le nombre de nuds non inseres (d'evaluation sup/inferieure a la borne BS/IG), le nombre de nuds inseres dans la le, le nombre de nuds supprimes par un DeleteGreater (pour lesquels la borne BS/IG est devenue inf/superieure a leur evaluation), l'evaluation du dernier nud supprime. Mais pour les applications paralleles, il est prevu des statistiques supplementaires dependantes de la parallelisation choisie. Par exemple, dans le cas des les de priorite asynchrones sur une architecture distribuee (les de priorite locales avec equilibrage de charge), les statistiques peuvent renseigner l'utilisateur sur le nombre de nuds envoyes, recus, supprimes et traites avant de trouver une solution. These Paris VI, Janvier 1996 6.6. Architecture de la Librairie 113 6.5.2 Etat des les de priorite locales ou partagees Les statistiques sur les les de priorite locales ou partagees renseignent sur : le nombre de nuds a un instant donne, le nombre maximal de nuds, l'evaluation du dernier nud supprime. Comme precedemment, dans le cas d'une execution parallele, des informations supplementaires relatives a la parallelisation sont prevues. 6.6 Architecture de la Librairie 6.6.1 Organisation des repertoires Les sources composant la bibliotheque se trouvent dans le repertoire Bob. Au m^eme niveau que Bob se trouvent les repertoires des dierentes applications (Ex : Qap, TspLittle, TspDicho, TspPoly, Vcp, etc). BB QAP TSP makefile typedef.h source1.c source2.c ... Bin machine1 Obj machinen VCP bb.h Define.h datastruct.h macro.h Bob Include PQ ArchiSEQ define.h ArchiSHARED define.h mrk_define.h ksr_define.h ... ArchiDISTRIB define.h pvm_define.h pvm@ ... JoSk.c futr.c futb.c Sp.c SiSp.c SiSmSp.c SmSp.c lh.c ph.c makefile.pq Common start.c makefile.com ArchSEQ goproc.c upbd.c op.c makefile.arch goproc.c makefile.arch ArchSHARED ASC makefile.async makefile.ds makefile.lb upbd.c FXDop.c MRGop.c ONEop.c SCY makefile.async makefile.ds makefile.lb upbd.c op.c FRM makefile.async makefile.ds makefile.lb upbd.c op.c goproc.c makefile.arch ArchDISTRIB ASC makefile.asc upbd.c SMPop.c XXXop.c SCY FRM Loadbal makefile.frm upbd.c op.c lbs.c Figure 6.4 : Schema des repertoires. 6.6.2 Le repertoire Bob Dans Bob, coexistent six repertoires et un makele (makefile.bb). Bob/Include contient les chiers d'ent^ ete (.h) communs a tous les B&B. These Paris VI, Janvier 1996 6.6. Architecture de la Librairie 114 contient le chier start.c, incluant les fonctions suivantes : fonction main(), fonction d'etude des parametres. Il contient aussi le makele specique a ce chier. Bob/PQ contient les chiers sources des les de priorit e, Bob/ArchSEQ le source pour une ex ecution sequentielle. Bob/ArchSHARED les sources pour des ex ecutions paralleles a memoire partagee. Bob/ArchDISTRIB les sources pour des ex ecutions paralleles a memoire distribuee. makefile.bb il aiguille la compilation vers l'architecture demand ee. Bob/Common 6.6.3 Les repertoires d'architecture: ArchSEQ, ArchSHARED, ArchDISTRIB Ces repertoires contiennent les sources gerant la borne superieure (upbd.c), la structure de donnees globale (op.c), ainsi que les sources contenant la gestion eventuelle des processus en parallele et des statistiques (goproc.c). Sequentiel : Bob/ArchSEQ Ce catalogue contient les trois chiers cites precedemment et un chier makele makefile.arch. Parallele : Bob/ArchSHARED, Bob/ArchDISTRIB Les deux repertoires parallele contiennent chacun, le chier goproc.c, un makele makefile.arch et trois repertoires correspondant aux modeles de parallelisation: ASC contient la gestion de la le de priorit e et de la borne BS/IG en asynchrone. SYC contient la gestion de la le de priorit e et de la borne BS/IG en synchrone. FRM contient la gestion de la le de priorit e et de la borne BS/IG lorsque la ou les les de priorite sont detenues par un ou plusieurs serveurs. Chacun de ces trois repertoires contient un ou plusieurs sources des algorithmes de gestion des FPGs (op.c) et de BS/IG (upbd.c). 6.6.4 La portabilite de la bibliotheque BOB doit ^etre portable. La partie sequentielle de BOB ne pose pas de problemes, dans la mesure ou elle utilise l'environnement standard UNIX. En parallele, BOB necessite, sur une machine a memoire partagee, l'utilisation de primitives d'exclusion mutuelle. BOB utilise un jeu de macros C, permettant de gerer ces primitives. La correspondance entre le jeu de macros et les fonctions presentes sur la machine parallele se fait par l'intermediaire de chiers de conguration. Actuellement, la bibliotheque est portee sur KSR1 (utilisant la bibliotheque Pthread) et sur Sequent Balance. Plusieurs versions de la partie distribuee de BOB ont ete implementees. L'une repose sur PVM qui appara^t comme un standard de fait pour les machines paralleles a memoire distribuee et sur les reseaux de stations de travail. l'autre utilise la bibliotheque de communication propre aux machines paralleles d'INTEL (PARAGON,IPSC2). These Paris VI, Janvier 1996 6.6. Architecture de la Librairie 115 Un travail actuellement en cours en collaboration avec M. Benachouche, S. Dowaji, V.D Cung et S. Poujade, propose de developper une couche de communication orientee B&B. Les communications faite dans une telle application, concernent les nuds representant un sous probleme de l'application, la notion de charge locale, et enn la valeur de la borne superieure. Cette sous bibliotheque etant de tres haut niveau, elle pourra ^etre implementee avec des bibliotheques de passage de messages, et multi-threadees, sans generer de co^uts supplementaires a l'execution. Le but nal est de concevoir un noyau d'execution generique d'equilibrage de charge. Le concepteur fournit la notion de charge locale, la fonction du critere de declenchement, et la procedure d'equilibrage de charge, pour chaque region de la hierarchie, qu'il a denie. Tschoke, Luling et Monien [Tsch94], ont propose une bibliotheque de ce type. Mais elle se place dans un cas particulier d'equilibrage de charge. Une seule region est utilisee, la strategie est synchrone, et centralisee par un processus ma^tre. 6.6.5 La compilation et l'execution 6.6.5.a La compilation La compilation d'une application est eectuee par l'intermediaire de la commande make. Comme BOB est compos ee d'un ensemble de sous bibliotheques distinctes et/ou dependantes, le processus de compilation dans BOB est en fait une suite d'appels \recursifs" a la commmande make, chacun des appels s'occupant d'une \composante" de la bibliotheque. La commande make lancee par l'utilisateur dans le repertoire application, appelle une autre commande make dans le repertoire d'architecture choisi ou donne. Le chier Common/start.c est ensuite compile. Finalement, ce dernier appellera une autre commande make sur le chier PQ/makefile.pq qui genere l'executable. Par defaut, un executable sequentiel est engendre. Il est possible de denir un ensemble d'executables a generer par l'intermediaire de variables d'environnement passees a la commande make. Nous ne pouvons pas donner toutes les variables d'environnement correspondantes a tous les choix possibles, nous renvoyons a la brochure utilisateur. Nous nous limitons a decrire ici les principales variables: PRTP notion de priorit e EVAL (evaluation), EVDP (evaluation+profondeur), POTE (potentialite). PQTP algorithme de les de priorit e locales ou partagees SKEW, FUNNEL, SPLAY, HEAP, OTHERS. Si la le est partagee, le protocole de verrouillage PLTP peut ^etre EXC, LCK, MRK. ARTP type d'architecture : SEQ, SHARED ou DISTRIB. Pour une structure de donn ees parallele: MDTP type de m ethodes employees ASC, SYC, FRM. DSTP repr esentation de la structure. Sur machine a memoire partagee, les choix possibles sont ONE (SDOP), FXD (SDODP avec D xee), et cours de developpement MRG (SDODP dynamique). LBTP strat egie d'equilibrage de charge. Par exemple, la commande, executee dans le repertoire Qap (probleme de l'aectation quadratique) sur une KSR1: make PRTP=EVAL ARTP=SHARED MDTP=ASC DSTP=FXD LBTP=2 PLTP=MRK PQTP=SKEW These Paris VI, Janvier 1996 6.7. Le developpement d'une application 116 engendre l'executable correspondant a un B&B parallele resolvant le probleme d'aectation quadratique sur la KSR1 avec une structure de donnees asynchrone de type FXD, la strategie d'equilibrage de charge est 2; la le de priorite utilisee est la Skew-Heap, avec le protocole de verrouillage partiel par marquage. L'executable est dans le repertoire Qap/Bin/ksr1 et s'appellera EVALASCFXD2MRKskh. Ce type de nom d'executable bien que complique, a l'avantage de dierencier les executables selon les choix de l'utilisateur. 6.6.5.b L'execution Nous denissons les parametres qu'une application BOB peut prendre. Certains d'entre eux sont directement lies a la gestion interne de BOB, les autres passes a la fonction Bob Init() sont denis par l'application. exec [ -p np[:nd] ] [ -v s ] [ -d md[:td] ] ... denit le nombre de processus et le nombre de structures de donnees ou le nombre de serveurs (reserve au parallelisme), -v s d enit le niveau de statistiques, -d md[:td] d enit la granularite de calcul (en nombre de niveaux) et le type de calcul (chacun des processus peut avoir une granularite dierente calculee selon une fonction), ... param etres reserves a l'application. -p np[:nd] 6.7 Le developpement d'une application Nous presentons un squelette de programme de B&B utilisant la bibliotheque BOB. Les chiers cites ici doivent ^etre dans le repertoire de l'application. Cet exemple est celui donne dans le guide utilisateur. 6.7.1 Le chier d'ent^ete typedef.h Toutes les denitions de structures et de macros doivent ^etre regroupees dans un chier d'en-t^ete an que les dierents chiers sources de la bibliotheque puissent y avoir acces. Nous appelons ce chier typedef.h, mais un autre nom peut ^etre choisi. Si le probleme d'optimisation consiste a maximiser une fonction de co^ut, le chier typedef.h doit contenir la ligne suivante : #define ORTP MAXIMISATION Par defaut, la bibliotheque BOB est conguree pour une minimisation. Le type BobNode doit ^etre deni dans le chier d'ent^ete. Les deux champs obligatoires que doit contenir la structure BobNode sont le champs Pri de type BobTPri, et le champs BobNdInfo de type BobTNdInfo. Les noms de ces champs ne peuvent ^etre changes car sinon BOB ne les reconna^t pas. BOB a besoin aussi d'un type appele BobSolution decrivant la solution du probleme d'optimisation traite. /*| Structure BobNode pour la simulation d'un Branch and Bound |*/ typedef struct { BobTNdInfo BobNdInfo; /* Informations sur le noeud (lecture seule) */ int Depth; /* Profondeur du noeud */ ... /* Informations relatives a l'application */ ... BobTPri Pri; /* Priorite du noeud */ These Paris VI, Janvier 1996 6.7. Le developpement d'une application 117 } BobNode; typedef struct { int Sol[100]; } BobSolution; 6.7.2 Le(s) chier(s) source(s) Toutes les fonctions sont ici regroupees dans un seul chier source que nous appellons app.c. /*|||| Include des chiers d'entetes ||||-*/ #include <stdio.h> #include <math.h> #include "../Bob/Include/bb.h" /*|||||||||||||||||||||*/ void Bob_GenChild(an,Depth,ExpCt) BobNode *an; int Depth; BobTExpCt *ExpCt; { BobNode *n; int Eval,dp; dp = an->Depth+1; /* Profondeur des ls */ for (i=0; i<NBFILS ; i++) { /* Boucle de generation des NBFILS ls */ n = (BobNode *)Bob_NodeAlloc(0); /* Allocation memoire pour le noeud ls */ if ( n==NULL ) {fprintf(stderr,"Erreur memoire\n");return;} Branch(i,an,n); Eval = Evaluate(n); Bob_PRICREAT(n->Pri,Eval,0,dp); /* Creation de la priorite du ls */ Bob_STEXP(); /* Statistique nombre de noeuds evalues */ if ( Bob_ULBSup(n->Pri) ) { /* Test par rapport a la borne superieure */ if ( Bob_ExpCtrl(prof+1,ExpCt) ) { /* Test par rapport a profondeur maximale */ Bob_GenChild(n,prof+1,ExpCt); /* Parcours en profondeur */ Bob_NodeFree(n); /* Desallocation du noeud ls */ } else Bob_GPQIns(n); /* Insertions dans la le globale */ } else { Bob_STNIS(); /* Statistique nombre de noeud non parcourus */ Bob_NodeFree(n); /* Desallocation du noeud ls */ } } } /*|||||||||||||||||||||*/ void Bob_Init(n,v) int n; char **v; { int bs; int Eval; BobSolution Sol; if ( n!=NbParametres ) { fprintf(stderr,"Erreur de parametre : ... ... ...\n"); exit(1); } BobPbSize = TailleProblem(); /* Taille du probleme */ bs = SolutionInitiale(&Sol); /* Initialisation de la solution initiale */ Bob_ULBInit(bs,&Sol); /* et de la borne superieure initiale */ BobRoot=(BobNode *)Bob_NodeAlloc(0); /* Allocation memoire pour le noeud racine */ if ( BobRoot==NULL ) {fprintf(stderr,"Erreur memoire\n");return;} Eval = Evaluate(BobRoot); Bob_PRICREAT(BobRoot->Pri,Eval,0,0); /* Creation de la priorite du noeud ls */ } /*|||||||||||||||||||||*/ void Bob_End() { printf("C'est ni !\n"); } /*|||||||||||||||||||||*/ void Bob_PrintSolution(s) BobSolution *s; { These Paris VI, Janvier 1996 6.8. Conclusion et perspectives 118 int i; for (i=0;i<BobPbSize ; i++ ) { printf("%2d ",s->Sol[i]); } printf("\n"); } 6.7.3 Le chier makefile Le chier makefile dans le repertoire application est le premier des makeles appele pour construire l'executable. Les variables a denir sont : OBJAPP contenant tous les objets (.o) de l'application. INC contenant le chier d'ent^ ete de votre application. Pour chacun des chiers sources, les commandes liees a sa compilation doivent faire l'objet de trois lignes. Dans notre cas, le chier makefile est : LDIR = ../Bob OBJ = Obj/$(HOSTTYPE)/$(PRTP) OBJAPP= $(OBJ)app.o DEBUG = APPDEBUG = $(DEBUG) INC = ../../App/typedef.h DSFLAG = $(ARTP) ARTP=$(ARTP) PRTP=$(PRTP) OBJAPP="$(OBJAPP)" INC=$(INC) DEBUG=$(DEBUG) all : $(OBJAPP) make -f $(LDIR)/makele.bb $(DSFLAG) $(OBJ)app.o : app.c typedef.h cc -c app.c $(APPDEBUG) -DAPPINC=\"$(INC)\" -DPRTP=$(PRTP) mv app.o $(OBJ)app.o 6.8 Conclusion et perspectives Nous avons presente la premiere version d'une bibliotheque d'aide au developpement d'applications utilisant la methode B&B. 6.8.1 Developpements a venir L'achage des statistiques est pour l'instant sous forme textuelle (ASCII) et uniquement a la demande de l'utilisateur. Une interface graphique representant l'evolution de l'activite des processus et de l'etat des dierentes structures de donnees, sous forme de courbe, serait interessante. La compilation de l'application, reste une phase dicile a mener a bien. Nous avons prevu l'ecriture d'un utilitaire permettant de choisir facilement les dierents parametres de la compilation par une interface graphique. Bien que la sous-bibliotheque memoire distribuee et equilibrage de charge soit avancee, elle est encore en etat de developpement. BOB ne gere actuellement que la strategie de parallelisation de type 2, celle de type 3 est facilement implementable. 6.8.2 Fusion avec une bibliotheque de metaheuristiques Un autre travail a venir consiste a fusionner BOB et la bibliotheque LOREST [Dela94] du laboratoire LIFO d'Orleans. Cette derniere propose un ensemble de fonction paralleles permettant d'experimenter plusieurs parallelisations des metaheuristiques (Recuit Simule, Tabou) a partir d'un m^eme programme sequentiel. La bibliotheque LOREST presente une architecture en couches. Celle-ci permet une implantation independante de la machine cible et constitue, pour l'essentiel, une machine virtuelle de communication. These Paris VI, Janvier 1996 6.8. Conclusion et perspectives 119 Deux implantations de LOREST ont ete nalisees, l'une sur une machine TNODE de Telmat equipee de 16 Transputers et, l'autre, sur un reseau de stations de travail, au dessus de la bibliotheque de communication Parallel Virtual Machine (PVM). hh ii Une bibliotheque BOB+LOREST presente deux inter^ets en plus de ceux de chacune des bibliotheques prises separement. Un premier inter^et est d'utiliser pour un m^eme probleme, les meta-heuristiques comme aide a la resolution exacte de probleme par methode B&B. Elles se placeraient comme un calcul de mise a jour de la borne superieure du B&B. Ainsi, l'espace de recherche explore par le B&B serait reduit. Le second est d'ameliorer les procedures de recherche locales, par l'utilisation d'une recherche B&B. 6.8.3 Bibliotheque pour parcours d'espace de recherche Nous avons presente dans ce chapitre, la version 1.0 de BOB ne traitant que le modele d'execution de programme B&B. Nous nous sommes restreints a la version actuellement diusee. Or, il est evident que BOB a servi de support de tests, pour une grande majorite des travaux que nous avons presentee dans les chapitres precedents, concernant les structures pour les algorithmes B&B, mais aussi celle des algorithmes A*. La version beta 2.0 de BOB est capable d'eectuer une recherche dans un graphe. La notion de structure de donnees globale inclut la le ouverte et fermee de A*. La treap a ete ajoutee a l'ensemble des les de priorite sequentielles et paralleles. Les fonctions de tests sur les clefs des sous problemes utilisees a l'interieur de la structure BOB, sont fournies par le cote applicatif. L'utilisateur choisit l'espace de recherche considere par le probleme. Ainsi, il est possible de resoudre le probleme du taquin par une recherche B&B et par une recherche A*, a partir du m^eme programme source. Cette version de BOB propose aussi un choix de strategies de recherche, et de granularite. La recherche peut ^etre faite en une seule phase (B&B, A*), ou en plusieurs phases iteratives, denissant une recherche IDA*. Il est ainsi possible de resoudre le taquin, mais aussi le QAP, le TSP, et le VCP par une recherche IDA*. Dans la version 1.0, la granularite d'exploration etait xe pour toute la duree de l'execution. Or, plusieurs travaux ont propose d'utiliser une granularite dynamique. Ainsi la granularite peut ^etre denie comme tres petite au debut pour eectuer une recherche meilleur d'abord permettant de guider la recherche. Elle augmente alors lineairement en fonction de la profondeur du sous-probleme dans l'arbre (ou le graphe) de recherche jusqu'a atteindre une profondeur maximale. Elle peut aussi decro^tre une fois que la granularite maximale est atteinte. BOB a ete utilisee dans la cadre du projet STRATAGE ME par Lille et Grenoble pour la mise au point des regulateurs. Des algorithmes pour resoudre des problemes diciles de l'Optimisation Combinatoire ont ete implantes a Versailles avec BOB (Couverture minimale, Voyageur de Commerce), a Lille avec la collaboration de Versailles (Aectation Quadratique). Elle a donc ete portee au-dessus des bibliotheques multi-threadees PM2 (Lille) pour les machines IBM SP2 et ferme d'ALPHAs. Des tests et de nouvelles strategies sont en cours sur un Cray T3D (Y. Denneulin). M. Benachouche l'a egalement testee ainsi sur iPSC2 et Paragon [Bena96]. hh ii These Paris VI, Janvier 1996 6.8. Conclusion et perspectives 120 6.8.4 Diusion La version 1.0 est disponible depuis septembre 95 pour les universitaires sur les serveurs WWW (http://www.prism.uvsq.fr/french/parallel/cr/bob fr.html) et ftp (ftp.prism.uvsq.fr/pub/logiciels/BobX.X.tar.Z) du laboratoire PRiSM, avec deux brochures, utilisateur et developpeur, et a d'ores et deja ete prise par les universites suivantes (equipes de Recherche Operationnelle) : Wharton School-Pennsylvanie UniversityUSA, Polytechnique de Mons-Belgique, CRT-Centre de Recherche en TransportMontreal-Canada, Universite de Dauphine et Orsay, PUC Rio. Ce chapitre et les precedents ne presentent pas tous les tests experimentaux de toutes les possibilites qui existent actuellement dans les versions 1.0 et 2.0beta de BOB. Le but de notre travail de these reside dans les structures de donnees. Le nombre de possibilites de BOB est maintenant proche de l'"explosion combinatoire" !. BOB dans le futur peut servir a degager les structures de donnees qui sont les plus ecace et les mieux adaptees a dierents comportements d'application. Pour une application donnee, il peut permettre de trouver l'espace de recherche, la strategie de recherche, la granularite de calcul, la structure de donnees sequentielle, la methode de parallelisation (SDES, SDOP, SDDP, SDODP) synchrone ou asynchrone, l'equilibrage de charge, l'architecture de la machine, la bibliotheque de passage de messages ou multi-threadee, le protocole de verrouillage. La diculte est alors que tous ces choix ne peuvent pas ^etre faits independamment des uns des autres, car ils sont lies. Ils s'inuencent mutuellement. Nul ne pourra plus denir des choix de parallelisation au juge ! These Paris VI, Janvier 1996 121 7 Conclusion Chapitre Les structures de donnees paralleles ont suscite ces dernieres annees de tres nombreux travaux, et restent encore a l'heure actuelle, une voie de recherche qui interesse directement ou directement bon nombre de chercheurs. Nous en avons propose un classement fonde sur un modele utilisant la notion de structure de donnees globale. Si ce classement etait generalement utilise pour les structures de recherche, il ne l'etait pas du tout pour les les de priorite. Ainsi, il nous a permis de degager trois grandes familles de structures de donnees paralleles: accelerees, a execution sequentielle et nalement a capacite parallele. Cette derniere famille est la plus couramment utilisee, car elle est la seule a admettre un nombre de processeurs egal a celui des machines qualiees de massivement parallele. Une structure de donnees au sens objet etant composee d'une representation et des operations qui peuvent y ^etre eectuees, le parallelisme peut ^etre introduit dans ces deux composantes. Trois approches peuvent alors ^etre denies pour les structure de donnees a capacite parallele: structures de donnees paralleles a donnees paralleles, a operation paralleles et nalement a donnees et operations paralleles. Ce classement nous a permis de mettre en valeur les performances de chacune des approches en terme de capacite, de co^uts de gestion, et de complexite des operations supportees. Nous avons ensuite propose des methodes et des algorithmes paralleles dans chacune de ces trois approches, bien adaptes aux les de priorite. Le probleme majeur des les de priorites a donnees parallele etant l'equilibrage de charge et le respect de la semantique de l'operation de suppression, nous avons propose dans le chapitre 2, une methode appelee fusion&recopie resolvant ces deux problemes. Cette methode illustre les moyens qu'il faut mettre en uvre et les co^uts entra^nes pour resoudre parfaitement ces problemes. Puis, nous avons discute de l'inuence de notre formulation du probleme pour les machines a memoire distribuee. Nous avons fait appara^tre deux notions de priorite, une dependante de la charge de travail, utilisees pour l'equilibrage de charge, et l'autre denie par l'application. Nous avons egalement contribue a l'etude de l'equilibrage de charge pour les applications irregulieres dans le cadre du projet STRATAGE ME. These Paris VI, Janvier 1996 7 : Conclusion 122 Au chapitre 3, nous proposons une methode, appelee verrouillage partiel, permettant la realisation concurrente d'operations sur une representation de structure de donnees. Le co^ut supplementaire d'execution etant celui des appels aux primitives d'exclusion mutuelle, nous avons demontre que dans certains cas, toutes les primitives d'exclusion mutuelle interne a l'arbre, peuvent ^etre remplacees par de simples mecanismes de marquage. Nous avons ensuite etendu la methode aux machines a memoire distribuee. Cette extension fondee sur des fonctionnements dierents de simulation de memoire partagee, a mis en evidence l'importance des co^uts d'acces a une memoire virtuellement partagee. Elle nous a permis egalement de montrer comment toutes les structures de donnees de ce type presentees dans la litterature se dierenciaient. Elle ont pu ^etre ainsi comparees suivant le placement de la structure realise. Les approches a donnees et a operations paralleles, n'etant pas incompatibles, nous avons presentes au chapitre 4, les limitations, co^uts, et capacites des les de priorite de ce type. Tous ces parametres ont ete discutes en fonction du comportement de l'application et des parametres propres a la machine. Nous avons propose de plus deux structures SDODP, la premiere maintient un nombre de sous-structures xe, la seconde gerent un nombre de sous-structures variable selon le nombre d'elements stockes. Les structures de donnees sequentielles et paralleles ne peuvent ^etre testees sans un contexte d'execution, sans une application orant dierents comportements. Nous proposons donc au chapitre 5 des tests experimentaux de structures de donnees sequentielles et paralleles dans le contexte de la methode Branch and Bound et de l'algorithme A*. Tous deux sont des applications dites irregulieres. En ce qui concerne l'algorithme de Branch and Bound, notre etude des les de priorite est donne pour une simulation de resolution de probleme puis pour un probleme reel : l'Aectation Quadratique. Dierentes les de priorite sequentielles, ainsi que plusieurs d'entre elles parallelisees selon les trois approches ont ete testees pour ces applications, mettant ainsi en valeur leur inter^et et performances respectives. En ce qui concerne l'algorithme A*, nous avons propose une version modiee de la treap comme structure de donnees a operations paralleles, pour implementer la liste ouverte denie par l'algorithme. Nous avons donnee des experimentations de cette structure selon l'approche parallelisation SDOP sur le probleme du taquin. Tous ces travaux ont conduit a la specication et a l'ecriture de la bibliotheque BOB. Nous avons donne ses fondements, son fonctionnement et decrit nalement les possibilites que son modele ore, ou qu'il orira dans un proche avenir. Perspectives Nous avons deja largement developpe au chapitre 6 les divers enrichissements dont pourrait proter BOB : augmentation des fonctionnalites de la bibliotheque, tests sur de nombreuses applications. Une autre perspective provient de l'emergence des environnements multi-threades. Ils representent des plates-formes souples et ecaces dans notre contexte. Leur mode de communication les rend facile a programmer et proche du modele a memoire These Paris VI, Janvier 1996 7 : Conclusion 123 partagee. Tester nos parallelisations dans ce style d'environnement dans BOB est une de nos perspectives. Cette these est une premiere etape, contribuant a la comparaison des performances de plusieurs structures de donnees paralleles, theoriquement et experimentalement ou par le biais de la fourniture d'une bibliotheque. These Paris VI, Janvier 1996 124 A Des structures de donnees sequentielles Annexe Nous presentons dans cette annexe un certain nombre de structures de donnees sequentielles. Certaines d'entre elles sont reprises lors des presentations des dierentes approches de parallelisation presentees dans cette these. Le but n'est pas de presenter toutes les SD sequentielles existantes, car ce travail representerait un livre complet. Nous voulons donner un apercu de la litterature. Nous detaillons plus celles qui ont donne lieu (ou pour lesquelles nous proposons) une parallelisation. Notre description des structures de donnees est volontairement "oriente objet". Nous assimilons une structure de donnees particuliere a un objet dont un attribut est la representation en memoire (tableau, liste, arbre binaire ou naire) de la structure, et les methodes sont les operations qui peuvent ^etre eectuees sur l'attribut, c'est-a-dire la representation. Nous abordons tout d'abord quelques structures de recherche, puis detaillons plusieurs les de priorite. Notations E lement Le but d'une structure de donnees est de stocker un ensemble d'information, de donnees, de m^eme type. Cette information de base est appelee element. Nud la brique de base de la representation d'une structure de donnees est appelee nud. Selon la structure, cette entite contient un ou plusieurs elements. Pointeurs Lorsque la structure est dite dynamique, des liens modiables associent un ou plusieurs nuds. Ces liens entre les nuds sont appeles pointeurs. Un nud stocke donc en plus de l'information (element) les pointeurs permettant d'eectuer le parcours de la representation. Indice Losrque la structure est dite statique, sa representation est xee au depart. Elle est g'eneralement implementee par un tableau de nuds. Un nud est directement adresse par un indice. et le parcours de la representation est eectue par calculs d'indices. n Le nombre d'elements stockes dans une structure est note n. These Paris VI, Janvier 1996 A.1. Les structures de recherche 125 A.1 Les structures de recherche Les structures de recherche (SR) stockent un ensemble d'elements composes d'une clef et d'une information. Les operations de base portant sur la clef sont : 1. la recherche d'un element de clef xee, 2. l'insertion d'un element, 3. la suppression d'un element. D'autres operations peuvent ^etre envisagees. 1. la recherche des voisins d'un element de clef donnee, 2. la modication d'une clef. Un classement peut ^etre donne selon les representations utilisees. A.1.1 Les listes Les listes simplement cha^nees ou doublement cha^nees sont les premieres structures de donnees dynamique enseignees dans le cursus d'un etudiant en Informatique. Nous ne nous etendons pas sur ces structures; des descriptions detaillees peuvent ^etre trouvees dans [Knut73, AhHU74]. En revanche, une liste plus originale a ete propose par Pugh [Pugh90]. Elle est appelee Skip-List. L'originalite des Skip-List reside dans le cha^nage des nuds. Un nud ne contient plus seulement les pointeurs sur son predecesseur et son successeur, mais aussi sur des nuds plus lointains . Cette nouvelle forme de representation de liste, permet de faire des sauts dans la liste, accelerant ainsi le parcours de la structure. Le probleme est de savoir quels nuds vont contenir le ou les pointeurs de sauts. Pugh propose d'utiliser une valeur aleatoire qui represente le nombre de pointeurs de saut pour chaque element insere. Il demontre que la complexite en moyenne des operations d'insertion et de suppression est de O(log n). hh ii Munro, Papadakis et Sedgewick [MuPS92] ont quant a eux repris la representation des Skip-List et ont propose des algorithmes deterministes. Leur approche consiste a faire l'analogie des Skip-List avec les B-arbres (voir paragraphe A.1.3). A.1.2 Les arbres binaires Les nuds d'un arbre binaire contiennent un element (une clef) et deux pointeurs : un sur le nud ls droit et un sur le nud ls gauche. Les valeurs des clefs contenues dans les deux ls doivent respecter l'invariant des arbres binaires de recherche : Denition 18 Pour tout nud x de clef i, les nuds du sous-arbre droit (resp:gauche) de x ont des clefs superieures (resp:inferieures) a i. Bien qu'utilisant toutes, la m^eme representation, les structures de donnees presentees ci-dessous dierent par l'algorithme permettant de garder l'arbre equilibre. Generalement, l'operation de base utilise des rotations. Pour un nud x, une rotation gauche (resp: droite) permet de reduire la taille du sous-arbre droit (resp: gauche) de x et d'augmenter la taille du sous-arbre gauche (resp: droit) de x. Il existe beaucoup de structures de recherche representees par des arbres binaires. Nous nous limitons a la description du Splay-Tree et de ses variantes, et l'arbre de recherche a priorite. Il existe d'autres structures de recherche representees par des arbres binaires, comme l'arbre AVL, le Red-Black-Tree [GuSe78]. These Paris VI, Janvier 1996 A.1. Les structures de recherche 126 A.1.2.a Semi-Splay-Tree Le Splay-Tree est un arbre binaire de recherche cree par Sleator et Tarjan [SlTa83]. Il est la version auto-ajustable des arbres Red-Black. L'operation de base de cette structure est appelee le Splay. Le Splay integre dans le parcours de l'arbre, une heuristique permettant d'equilibre l'arbre. Il consiste lors de la recherche d'un element de clef i, a construire deux sous-arbres R et L ou R (resp: L) contient les clefs superieures (resp: inferieures) a i. Trois types de rotations : le ZIG, le ZIG-ZAG et le ZIG-ZIG sont utilises pour construire R et L. La gure A.1 montre ces trois rotations. x y L R A L R y (a) B A x B x z L R A L R y (b) C y z B A x B x C z L R A L R y (c) C y z A x B A C Figure A.1 : Les dierentes rotations (a) ZIG, (b) ZIG-ZIG, (c) ZIG-ZAG. Les cas symetriques ont ete omis. x x L R A L R B A B Figure A.2 : La construction nale de l'arbre dans l'operation de Splay. Le nud x contient la valeur recherchee. La gure A.2 montre l'assemblage nal de l'arbre, lorsque le nud cherche x a ete trouve. Nous pouvons remarquer que dans l'algorithme de Splay, l'element cherche devient la racine de l'arbre. La complexite amortie de cette operation est These Paris VI, Janvier 1996 A.1. Les structures de recherche 127 O(log n). Plusieurs versions de l'algorithme de Splay existent. Parmi celles-ci, la version appelee Semi-Splay est donnee par Tarjan comme etant une des meilleures. Le Semi-Splay utilise une nouvelle version de la rotation ZIG-ZIG, qui contrairement a celle du Splay, reconstruit partiellement l'arbre. T T Top y x L R y (b) C L z A R Top B x z B C A Figure A.3 : ZIG-ZIG modie du Semi-Splay. Le cas symetrique est omis. Comme le montre la gure A.3, la rotation accroche au nud Top de l'arbre partiel T, un arbre construit a partir de R, L, x, et y. Puis, le pointeur sur le nouveau nud Top est mis a jour. Lors d'une operation de Semi-Splay, l'element concerne ne devient pas forcement la racine de l'arbre. L'algorithme de Semi-Splay etant assez dicile a implementer, Tarjan propose une simplication qui ne change pas la complexite de l'algorithme. Elle consiste a remplacer la rotation ZIG-ZAG par deux rotations ZIG. Le nouvel algorithme est appele Simple-Semi-Splay. A.1.2.b Les arbres binaire de recherche a priorite L' arbre cartesien ou priority search tree ou treap1 est un arbre binaire, ou chaque nud a une priorite associee, en plus de la clef. L'arbre est tel que : 1. les clefs respectent l'invariant des arbres binaires de recherche, 2. les priorites respectent l'invariant des tas. La forme de l'arbre depend donc de l'association (clef, priorite). Si l'association (clef, priorite) denit un ordre des clefs egal ou inverse vis a vis de l'ordre des priorites. l'arbre est une simple liste. hh 1 ii hh ii hh ii contraction de Tree et Heap These Paris VI, Janvier 1996 A.1. Les structures de recherche 128 Il est demontre que quelques soient les valeurs des clefs et des priorites, un arbre de ce type peut ^etre construit. De plus, s'il n'exite pas deux valeurs de clefs ou de priorites egales, l'arbre est unique. Vuillemin [FrVV78] a utilise cette representation pour implementer une le de priorite appelee Pagodas. McCreight [Crei85] a propose une structure de ce type, pour implementer une structure de recherche multidimensionnelle. Aragon et Seidel [ArSe89] ont propose une structure de recherche ou la valeur de priorite de chacun des elements est choisie aleatoirement. Ils demontrent que si les priorites sont independantes et equitablement distribuees, la profondeur de l'arbre est O(log n) Nous decrivons les operations de cette derniere structure. 20 3 5 5 2 10 1 20 4 15 3 20 25 10 10 10 6 20 15 25 7 25 (a) 7 2 5 5 2 10 1 20 4 15 3 20 23 17 24 20 30 15 32 17 20 3 6 20 10 10 15 25 (b) 25 10 23 17 30 15 24 20 32 17 Figure A.4 : (a)!(b) Insertion (7,2) L'operation de recherche de la treap est la m^eme que pour un arbre binaire classique tel l'arbre AVL. Elle consiste a parcourir l'arbre selon les valeurs de clefs rencontrees. Quant aux operations de suppression et insertion, elles utilisent le m^eme style de schema que les Splay-Trees. L'operation d'insertion de l'element x, de clef x:k et de priorite x:p, commence par rechercher la position ou x devra ^etre insere en suivant le chemin deni par les clefs des nuds rencontres. Elle s'arr^ete des qu'un nud y du chemin a une priorite inferieure a x:p. Le nud x est insere a cette position, en tant que pere de y. Nous pouvons noter que x respecte les deux invariants vis-a-vis du chemin deja parcouru. En revanche, pour que les invariants soient respectes sur l'ensemble de la structure, le sous-arbre de racine y doit ^etre modie. En fait, il sut de construire deux sous-arbres L et R tels que L (resp : R) contienne les elements de clef inferieure (resp : superieure) a x:k. Notons que L et R doivent ^etre construits en respectant l'invariant des tas. L'arbre nal est obtenu en aectant L (resp : R) comme sousarbre gauche (resp : droit) de x. La suppression d'un element de clef k procede comme suit : l'element x tel que x:k = k est recherche. Puis, un sous arbre est construit a partir des sous-arbres These Paris VI, Janvier 1996 A.1. Les structures de recherche 129 gauche L et droit R de x. Brievement, il est obtenu en fusionnant la branche gauche de R et la branche droite de L, de sorte que les elements de la branche obtenue respectent l'invariant des priorites. Nous revenons sur en detail sur cette structure dans le paragraphe 5.2. A.1.3 Les arbres n-aires Il existe plusieurs structures de recherche representees par des arbres n-aire. Nous pouvons citer le B-arbre, le B+arbre. Le 2-3-4 arbre est en fait un cas particulier de B-arbre. Ces stuctures dierent par les proprietes de leur representations. Plusieurs versions des algorithmes des operations de B-arbres existent. La description des dierents algorithmes de B-arbres que nous faisons ici, constitue un resume du chapitre les concernant, dans le livre Introduction to Algorithms de Cormen, Leiserson et Rivest [CoLR89]. hh ii A.1.3.a Representation d'un B-arbre et de ses derives Les proprietes d'un B-arbre sont les suivantes : 1. Chaque nud x contient les champs suivants : x:n, le nombre de clefs actuellement stockees dans x, les x:n clefs stockees dans l'ordre croissant, x:k[1] x:k[2] ::: x:k[x:n], un booleen x:leaf qui est vrai si le nud x est une feuille et faux si x est un nud interne, 2. si x est un nud interne, il contient aussi x:n+1 pointeurs, x:c[1]; x:c[2]; :::; x:c[x:n+ 1]. 3. les clefs x:k[i] et x:k[i + 1] denissent l'intervalle des clefs contenues dans le sous-arbre pointe par x:c[i]. 4. toutes les feuilles sont a la m^eme profondeur. 5. un nombre minimal et un nombre maximal de clefs qu'un nud peut contenir, sont calcules a partir du degre minimal b. tout nud (sauf la racine) a au moins b ? 1 clefs. Les nuds internes ont donc au moins b pointeurs. Si l'arbre est non-vide la racine a au moins une clef. tout nud contient au plus 2b ? 1 clefs. Les nuds internes ont donc au plus 2b ls. Un nud x est dit plein si x contient exactement 2b ? 1 clefs. Un arbre 2-3-4 est un B-arbre avec b egal a 2. Le B-arbre et le B+arbre sont speciques a la gestion des tables d'index en Base de Donnees. Leur inter^et est d'optimiser le nombre d'ecritures et de lectures sur disque, en considerant que la taille d'un nud de B-arbre est la taille d'un bloc sur disque. Le degre minimal b caracteristique de la structure, est donc calcule a partir de la taille d'un bloc sur disque et de la taille d'une clef. La representation du B+arbre stocke tous les elements dans les feuilles. Ces dernieres etant cha^nees, le parcours de tous les elements est eectuee dans une liste de nuds. Le prix a payer est une redondance des clefs dans l'arbre. These Paris VI, Janvier 1996 A.1. Les structures de recherche 130 A.1.3.b Les operations Rechercher un element de clef k consiste a parcourir les nuds en suivant l'ordre des clefs. A partir d'un nud pere x, le pointeur x:c[i] sur le nud ls est trouve par une recherche sur l'ensemble des clefs x:k. Cette recherche peut ^etre sequentielle ou dichotomique. L'insertion de la clef k consiste a rechercher la position de k dans le nud feuille x, puis de l'inserer. L'insertion dans x n'est pas toujours possible, car x peut ^etre deja plein. Dans ce cas, plusieurs algorithmes sont possibles. Nous en citons deux. 1. Operation de separation (split) systematique: la feuille x est separee en deux. Un deuxieme nud feuille x0 est cree puis les clefs de x plus k sont reparties sur x et x0. Le nud x contenant 2b ? 1 clefs, x et x0 contiennent maintenant chacune b clefs. L'operation de separation a un eet de bord sur les nuds peres. Une nouvelle feuille x0 etant creee, il faut inserer la clef x0 :k[1] et le pointeur sur x a la bonne place i dans le nud y pere de x. Si y n'est pas plein, l'insertion est simple. Dans le cas contraire, l'algorithme de separation est eectue sur y. Si tous les nuds du chemin, sont pleins, cela conduit a separer la racine r de l'arbre. Une nouvelle racine est donc creee pour recevoir les pointeurs sur l'ancien r et le nud cree par la separation de r, r0 . 2. Operation de repartition : plut^ot que d'eectuer des separations systematiques, une autre approche consiste a repartir les clefs de x sur ces voisins. Soient les nuds xd et xg les freres respectivement gauche et droit de x. Si xd ou xg ne sont pas pleins, certaines des clefs contenus dans x peuvent ^etre recopier dans xd ou xg . Ceci permet de liberer de la place dans x. Dans le cas ou xd et xg sont aussi pleins, l'operation de separation est eectuee sur x. La suppression d'un element de clef k se decompose en deux phases comme pour l'insertion. Une premiere phase recherche l'element de clef k. Si un tel element existe, il est supprime du nud x ou il se trouve. La phase suivante consiste a restructurer l'arbre si x:n < b ? 1. Des operations inverses a celle de l'insertion sont utilisees dans ce cas : l'operation de repartition entre x et l'un de ses freres et l'operation de fusion (join) de x avec un de ses freres. De m^eme que pour l'operation d'insertion, si tous les nuds y du chemin de la racine r a x sont tels que y:n = b ? 1 et si r:n = 2, la suppression de l'element de clef k dans x conduit a eectuer l'operation de fusion sur tous les nuds du chemin. La racine r doit donc ^etre supprimee. Le nud ls de r devient la nouvelle racine de l'arbre. Il est clair que les algorithmes d'insertion et de suppression sont recursifs, an de faciliter la gestion des deux phases (recherche, restructuration). Plusieurs autres algorithmes ont ete proposes. Ils proposent d'eectuer la separation ou la fusion des nuds a priori. Ceci permet de confondre les deux phases en une seulle. Certes, cette facon de faire n'optimise pas la place occupee par la structure vis-a-vis du nombre de clefs stockees. Mais d'une part la complexite est reduite d'une constante et d'autre part, la gestion des acces concurrents s'en trouve facilitee (voir chapitre 1). These Paris VI, Janvier 1996 A.2. Les les de priorite 131 A.2 Les les de priorite Une le de priorite (FP) est une structure de donnees stockant un ensemble d'elements selon leur priorite. Les operations de base sont : 1. insertion d'un element de priorite quelconque, 2. suppression de l'element ayant la plus forte priorite. Certaines applications necessitent d'autre operations comme: 1. modication de la priorite d'un element, 2. suppression de tous les elements de priorite inferieure a une valeur, 3. obtenir la plus forte priorite (sans suppression). Nous presentons les dierentes FP en les classant selon leur representation. Notations: Un element associe a un nud x est appele x:e. Nous employons les signes <, > pour comparer la priorite des elements. Soient les elements e1 et e2. Si e1 < e2 (respectivement e1 > e2), l'element e1 est moins (respectivement plus) prioritaire que l'element e2. A.2.1 Les tas Le tas est une structure qui au depart a ete utilisee pour implementer un tri, appele le Heapsort [Will64, Knut73, AhHU74]. Denition 19 Un tas est un arbre ou le contenu de chaque nud x respecte l'invariant suivant des tas : pour chaque nud y ls de x x:e y:e: Comme dans tous les arbres, lorsqu'un element est rajoute ou supprime, il faut assurer que l'arbre est "bien" equilibre. Nous pouvons classer les structures representees par des tas dans deux categories : les statiques et les dynamiques. Elles sont aussi appelees respectivement structures a information externe et a information interne. Un tas a information externe a une structure xe. Lorqu'une operation doit inserer ou supprimer un element, l'invariant est respecte, en changeant la localisation des elements dans les nuds. L'arbre est garde equilibre en choisissant de facon appropriee le nud feuille supprime ou ajoute. A notre connaissance, seul le d-heap est a information externe, toutes les autres les de priorite representees par un tas sont a information interne. Les tas a information interne ont une representation modiable. Un element est alors associe a un et un seul nud. Lors d'une operation d'insertion ou de suppression, l'invariant et l'equilibre de l'arbre sont respectes par un jeu de pointeurs. Dans tous les cas, les operations sur chacun de ces tas utilisent une operation elementaire (oe). Nous presentons les dierents algorithmes des operations en insistant sur son oe. Pour certaines FP, nous donnons une gure qui presente trois etats de la structure dans le m^eme contexte d'execution. (a)!(b) (suppression), (b)!(c) (insertion de 39) Dans ces exemples, les valeurs les plus petites sont considerees comme les plus prioritaires. These Paris VI, Janvier 1996 A.2. Les les de priorite 132 A.2.1.a Le d-heap Le d-heap est une structure representee par un tas ou chaque nud a d ls. Elle est aussi appelee Implicit-heap dans le cas ou d est egal a 2. Sa representation est habituellement un tableau note T. Un nud d'indice i et l'element associe sont notes respectivement T[i] et T[i]:e. L'indice du pere d'un nud T[i] est di=de, d etant le nombre de ls. Les indices des ls d'un nud T[i] sont (i ? 1) d+2; (i ? 1) d+3; :: :Min(i d+1; n). L'indice de la racine est 1. L'Insertion L'arbre doit ^etre a tout moment equilibre, pour assurer une complexite des operations en O(log n). L'insertion consiste donc a occuper le premier nud vide, c'est-a-dire le nud T[n + 1]. Deux versions de l'algorithme d'insertion existent. Version ascendante : Lors d'une insertion d'un element e, e est place dans le nud T[n+1]. Pour respecter l'invariant, l'algorithme suit le chemin du nud T[n + 1] jusqu'a la racine (T[1]). L'algorithme est le suivant: i est initialise a n + 1. Tant que i est superieur a 0, l'oe suivante est executee: si T[di=de]:e < T[i]:e, les elements T[di=de]:e et T[i]:e sont echanges. Finalement n est incremente de 1. Version descendante : L'algorithme d'insertion d'un element e consiste donc a suivre ce chemin de T[1] jusqu'au nud T[n + 1]. Tant que i est inferieur a 0, l'oe est : si e > T[i]:e, e est echange avec T[i]:e. Finalement, e est place dans T[n + 1] et n est incremente de 1. La Suppression L'element a retourner est celui place dans la racine. Toujours pour assurer une complexite en O(log n), l'arbre doit ^etre garde exactement equilibre. Pour ce faire, l'element e place dans le nud T[n], est place dans la racine. Puis n est decremente de 1. Il est donc obligatoire maintenant de proceder a la restructuration du tas an qu'il respecte l'invariant. Cette phase est eectuee par un parcours d'une branche de l'arbre, de la racine vers une feuille. Tant que i est inferieur a n, l'oe est : j est l'indice du ls de T[i] contenant l'element de plus forte priorite, Si T[j]:e > T[i]:e, T[j]:e et T[i]:e sont echanges. Le parcours continue avec le nud T[j], c'est a dire que la prochaine oe est executee avec i = j. Le pseudo-code suivant presente les operations d'insertion (version descendante) et de suppression d'un d-heap avec d egal a deux. procedure Insoe(i,e) begin if ( T[i].e<e ) then T[i].e$e endif end Insoe procedure Insertion(e,T) begin NbElem(T)=NbElem(T)+1 i=0 while i<NbElem(T) do These Paris VI, Janvier 1996 A.2. Les les de priorite endo end insert 133 Insoe(i,e) i= CalculChemin(i,NbElem(T)) function Deloe(i) begin if ( T[2i].e<T[2i+1].e ) then Next=2i+1 else Next=2i endif if ( T[i].e<T[Next].e ) then T[i].e$T[Next].e endif return Next end Deloe function Suppression (T) begin if ( T[1]==null ) then return null endif e=T[1] NbElem(T)=NbElem(T)-1 T[1]=T[NbElem(T)] T[NbElem(T)+1]=null return(e) i=0 while (i<NbElem(T)) do i = Deloe(i) endo end Suppression Ameliorations Plusieurs ameloirations ont ete proposees an de reduire la complexite des operations [GoMu86, Carl91, CaCh92]. Dans l'operation d'insertion, le chemin a emprunter est connu a priori. L'algorithme descendant ou ascendant peut donc ^etre choisi en fonction de la valeur de priorite de l'element milieu du chemin. Ce choix permet de reduire la longueur du chemin parcouru. Une autre amelioration consiste a rechercher la position de l'element a inserer, en eectuant une recherche dichotomique sur le chemin. Dans les deux cas, le nombre de decalages a eectuer pour inserer un element reste inchange. L'operation de suppression necessite deux comparaisons en chacun des nuds du parcours : une pour trouver le ls le plus prioritaire, et l'autre pour tester la priorite du ls selectionne avec celle du nud courant. Une amelioration consiste a construire dans une premiere etape le chemin que doit emprunter une suppression. Cette construction est eectuee avec log n comparaisons. Le chemin etant maintenant connu, les m^eme ameliorations que pour l'operation d'insertion peuvent ^etre introduites. A.2.1.b Leftist-heap La representation du Leftist-heap, (Crane [Cran72]), est un tas binaire. Chaque nud contient : These Paris VI, Janvier 1996 A.2. Les les de priorite 134 30 33 31 36 39 33 37 32 36 (a) 31 33 32 36 33 (b) 31 33 32 36 39 35 36 37 39 35 33 37 35 36 39 (c) Figure A.5 : D-Heap 2 Fils 36 32 33 36 32 33 36 32 33 35 35 35 39 39 39 30 33 37 (a) 31 33 (b) 31 33 37 (c) 31 36 36 37 36 39 Figure A.6 : D-Heap 3 Fils These Paris VI, Janvier 1996 A.2. Les les de priorite 135 30 33 36 35 37 36 33 39 33 33 36 35 37 36 33 36 35 37 36 31 32 39 32 39 32 (a) 31 (b) 31 33 39 (c) Figure A.7 : D-Heap 4 Fils These Paris VI, Janvier 1996 A.2. Les les de priorite 136 un element et sa priorite, les pointeurs sur le ls droit et gauche, une valeur representant la dierence de hauteur entre le sous-arbre droit et le sous-arbre gauche. L'operation de base du Leftist-heap est la fusion (Melding)2. Elle consiste a reunir deux tas en un seul, en fusionnant les branches droites de chacun des deux tas par une phase descendante. Puis dans une phase ascendante, a chaque nud, la dierence de hauteurs des deux sous-arbres est calculee. Les pointeurs ls droit et gauche sont echanges si la branche droite du sous arbre droit est plus longue que celle du sous-arbre gauche. L'insertion est realisee en fusionnant le nud avec le tas. Lors d'une suppression, les deux sous-arbres issus de la racine sont fusionnes. La complexite de l'operation de Melding est dans le pire des cas O(log n). 37 39 39 32 36 36 30 33 39 (a) 31 36 36 31 36 35 32 37 35 (b) 31 36 35 (c) 33 33 32 39 33 33 33 37 Figure A.8 : Leftist Heap A.2.1.c Skew-heap Le Skew-heap est une version auto-ajustable du Leftist-heap. Pour garder l'arbre equilibre, le leftist-heap utilise des tests explicites pour equilibrer le tas, alors que le Skew-heap utilise une heuristique realisee systematiquement. Sleator et Tarjan [SlTa86] ont montre que pour la pire sequence de m operations, la complexite est m O(log n), donnant une complexite amortie en O(log n) par operation. L'operation de base utilisee est l'operation de fusion (Melding)3 2 Dans la suite, nous gardons le terme anglais pour d esigner la fusion de deux tas, car le terme de fusion est utilise dans le chapitre 2 pour designe la fusion de deux listes. 3 Pour les m^ eme realisee systematiquementraisons que dans le cas du Leftist-heap, nous gardons le terme anglais These Paris VI, Janvier 1996 A.2. Les les de priorite 137 L'operation d'insertion consiste a fusionner le tas avec l'element a inserer. L'operation de suppression consiste a retourner la racine, le tas etant reconstruit en fusionnant les deux sous-arbres ls. L'algorithme de Melding fusionne les branches droites de deux Skew-heap de facon que les elements de la nouvelle branche respecte l'invariant des tas. A chaque pas du meld (pour chaque oe), l'heuristique utilisee consiste a echanger systematiquement les pointeurs ls droit et ls gauche de chacun des nuds. Tarjan demontre que quelles que soient les valeurs de priorites des elements a inserer, cette heuristique tend a equilbrer l'arbre. La complexite amortie des operations est O(log n). Nous donnons ci-apres le pseudo-code des operations de base du Skew-heap. procedure Insertion(x,h) begin left(x)=null right(x)=null h=meld(x,h) end insert function Suppression (h) begin x=h h=meld(left(x),right(x)) return(x) end deletemin procedure oe(p,h1,h2) if (h1.e>h2.e) then h1$h2 endif left(p)=h1 p=h1 h1=right(p) right(p)=left(p) end oe function meld(h1,h2) begin if (h1==null) then return(h2) else if (h2==null) then return(h1) endif endif if (h1.e>h2.e) then h1$h2 endif /* start melding */ q=h1 p=h1 h1=right(p) right(p)=left(p) while (h16=null) do oe(p,h1,h2) endo left(p)=h2 return(q) end meld These Paris VI, Janvier 1996 A.2. Les les de priorite 138 30 31 35 32 33 33 36 39 36 37 (a) 31 33 35 36 32 39 37 33 36 (b) 31 32 36 39 33 33 35 (c) 36 39 37 Figure A.9 : Skew-Heap These Paris VI, Janvier 1996 A.2. Les les de priorite 139 A.2.1.d Pairing-heap Le Pairing-heap (Fredman, Sedgewick, Sleator et Tarjan [FSST86] puis Stasko et Vitter [StVi87]) est la version auto-ajustable des Binomial-Queue (Vuilemin [Vuil78] et Borwn [Brow78]). La structure de Pairing est representee par un tas n-aire. L'insertion d'un nud x consiste a lui donner la place de premier ls de la racine puis d'echanger l'element de x et celui de la racine s'ils ne respectent pas l'invariant. Cette operation est donc en temps constant. procedure Insertion(x,h) begin if (h=null) then h:=x else PrFr(x):=PrFs(h) PrFs(h):=x if (x.e<h.e) then x.e$h.e endif endif end Insertion La suppression retire la racine du tas puis utilise l'operation de Pairing pour construire un nouveau tas. Cette derniere parcourt les nuds ls de la racine deux a deux. Chacun des groupes de deux nuds est utilise pour creer un sous-arbre. Pendant ce parcours, le nud contenant l'element de plus forte priorite est selectionne pour devenir la racine du nouveau tas. Soit x et y deux nuds consecutifs et r la racine actuellement selectionnee, L'oe est donc : Si y:e > x:e, alors x et y sont echanges. Inserer y en tant que ls a^ne de x. Puis, si r:e est moins prioritaire que x:e, echanger les pointeurs x et r. La prochaine oe est executee avec le frere suivant. La complexite au sens amortie de l'operation de suppression est O(log n). function Suppression(h) begin if (h=null) then return null endif x:=h if (PrFs(h)=null) then h:=null else h:=pairing(PrFs(h)) n:=PrFr(h) PrFr(h):=null if ( PrFs(h)=null) then PrFs(h):=n else PrFr(DeFs(h)):=n endif endif return(x) end Suppression function pairing(h) begin if (h=null) then return null endif if (PrFr(h)=null) then return h endif n:=PrFr(h) These Paris VI, Janvier 1996 A.2. Les les de priorite 140 PrFr(h):=null reste:=PrFr(n) if (h.e<n.e) then h$n endif PrFr(n):=PrFs(h) PrFs(h):=n PrFr(h):=pairing(reste) if (PrFr(h).e<h.e) then tmp:=PrFr(h) PrFr(h):=PrFr(tmp) PrFr(tmp):=h return tmp endif return h end pairing 30 33 36 31 35 36 39 (a) 31 33 36 35 32 36 39 (b) 31 39 35 32 33 37 33 36 (c) 33 37 32 36 39 33 37 Figure A.10 : Pairing Heap A.2.2 Les structures speciques Le comportement de certaines applications est tel que les priorites prennent des valeurs entieres dans un intervalle ni. Ces particularites peuvent ^etre utilisees pour construire des les de priorite ecaces. L'intervalle des priorites est note [min::max]. Sa taille est S. A.2.2.a Funnel-Table Le Funnel-Table [MaRo90] est represente par un tableau T de S les d'attente. Le Funnel-table peut ^etre pris comme une table de hachage a adressage direct, utilisant la plus simple des fonctions de hachage : l'identite. Cette fonction gardant These Paris VI, Janvier 1996 A.2. Les les de priorite 141 le m^eme ordre des cles vis-a-vis de l'ordre des indices de compartiments, trouver le suivant d'un element de priorite p est tres simple. Notons que dans le pire des cas, la complexite d'une telle operation est O(S). Inserer un element e de priorite v dans un Funnel-Table consiste a inserer e dans la le d'attente d'indice v ? min dans le tableau T. L'algorithme de suppression du Funnel-Table maintient une variable appelee B qui contient l'indice de la le de plus petite priorite. Deux cas doivent alors ^etre geres : 1. la le T[B] est non vide, l'operation supprime le premier element de la liste T[B]. 2. la le T[B] est vide, T est parcouru a partir de la le d'indice B, dans l'ordre decroissant des priorites jusqu'a trouver une le non vide. L'indice de cette le est aecte a la valeur B. Si le comportement de l'application est telle que les valeurs de priorite sont non decroissantes, comme dans le cas d'un B&B, alors aucun element de priorite inferieure a B, ne peut ^etre ajoute dans le tableau. A.2.2.b Funnel-Tree Cette structure a ete speciquement concue pour les algorithmes de Branch and Bound. Le Funnel-Tree se compose d'un tableau T de S 0 les d'attente (S 0 est la premiere puissance de deux superieure a S). Comme pour le Funnel-Table, un element de priorite v sera present dans la le d'indice v ? min. Les operations accedent aux les du tableau T par l'intermediaire d'un arbre binaire complet de hauteur log S. Chaque nud de l'arbre contient un entier qui indique le nombre d'elements dans les les feuilles de sous arbre dont il est la racine. Lors de l'insertion d'un element de priorite v, les valeurs des nuds du chemin de la racine vers la le d'indice v ? min sont incrementees. Le parcours de la structure peut se faire soit dans le sens feuille-racine, soit dans le sens racine-feuille. La suppression consiste a chercher la le contenant les elements de plus petite valeur. L'operation emprunte le chemin le plus a gauche an d'atteindre la le contenant les elements de plus forte priorite. Si pour un nud x, la valeur contenue dans son ls gauche est egale a 0, le parcours continue vers le ls droit de x. L'algorithme des operations d'insertion et de suppression parcourt log S nuds. Ces operations ont une complexite en O(log S). A.2.2.c Le Calendar-Queue Le Calendar-Queue a ete propose par Brown [Brow88]. Cette structure, comme le Funnel-Table est representee par un tableau T de les d'attente. Le tableau est xe a une taille arbitraire k. Brown a propose le Calendar-Queue en faisant l'analogie avec un carnet de rendez-vous. Un element est un rendez-vous, sa priorite represente la date du rendezvous. La taille du tableau est 365, de facon a permettre des rendez-vous sur toute l'annee. L'insertion d'un rendez-vous de date d consiste a placer l'element a la n de la le correspondant a cette date. Il faut gerer lors des suppressions, les rendez-vous du m^eme jour mais avec des annees dierentes. Lors d'une consultation du carnet a une date particuliere pour une annee donnee, les rendez-vous d'annees dierentes de celle voulue sont immediatement reinseres a la n de la le. Si l'espace des priorites est xee et est egal a S et si k est choisi egal a S, le Calendar-Queue est equivalent au Funnel-Table. These Paris VI, Janvier 1996 A.2. Les les de priorite 142 A.2.2.d File de priorite en log log n Van Emde Boas, Kaas, Zilstra [BoKZ77] ont propose une le de priorite pour un intervalle de priorite borne par S avec des operations de complexite O(log log S). S est egal a n. Dans une d-heap, la hauteur de l'arbre est log S. Le but recherche par les auteurs est de reduire la longueur de ce chemin, en rendant le nombre de ls de chaque nud dependant de la profondeur du nud. Par exemple, si pour un nud de profondeur k, son nombre de ls est 2k, la le peut contenir k! elements. Pour une structure de n elements, k est egal a logloglogn n . Une autre possibilite est de donner2 2k ls pour chaque nud de profondeur k. La taille de la structure devient O(2 k2 ). La longueur du chemin pour n elements, p est nalement O( log n). p p Une derniere representation consiste a diviser p S en S blocs de taille S. Chaque bloc est une le de priorite de taille S, et l'ensemble de ces blocs forment eux-m^emes une le de priorite de m^eme taille. Les auteurs demontrent que la complexite des operations en O(loglog n). A.2.3 Les structures de recherche modiees Les structures de recherche peuvent ^etre utilisees pour implementer des les de priorites. L'operation d'insertion est la m^eme dans les deux structures. L'operation de suppression des les de priorite n'existe pas dans les structures de recherche, mais elle peut ^etre facilement implementee dans beaucoup de celle-ci, si on considere la valeur de cle comme une valeur de priorite. Il sut de supprimer l'element de plus petite cle. Toutes les structures de recherche ne permettent pas cette possibilite. Les structures dont la representation garde les cles ordonnees peuvent supporter une operation de suppression des les de priorite. Dans ce type de representation, il est en eet possible de trouver le successeur et le predecesseur d'un element de cle donnee, avec une faible complexite. Les arbres, les liste, et certaines tables de hachage sont de ce type. A.2.3.a Le Splay-Tree L'operation d'insertion initiale peut ^etre utilisee sans modication. En revanche, l'algorithme de suppression doit retirer le nud de plus petite priorite et donc de plus petite cle. Le nud a supprimer est place au bout de la branche la plus a gauche de l'arbre. L'operation doit donc parcourir cette branche tout en eectuant les rotations ZIG et ZIG-ZIG. Les gures A.11 et A.12 donnent des exemples de suppression et d'insertion. L'inter^et d'utiliser des structures de recherche pour implementer des les de priorites, est de pouvoir regrouper sous une m^eme entite tous les elements de priorite egale. Par exemple, dans un arbre binaire de recherche, il est possible de n'utiliser qu'un nud de l'arbre par valeur de priorite. Si comme precedemment, les valeurs de priorites sont bornees par S, et si toutes sont representees, la complexite des operations n'est plus O(log n), mais O(log S). Si le comportement de l'application implique un grand nombre d'elements de m^eme priorite, cette forme de structure permettra de reduire la complexite des operations. These Paris VI, Janvier 1996 A.2. Les les de priorite 143 35 33 31 30 36 33 32 37 36 39 (a) 33 31 35 32 36 33 37 36 39 (b) 35 33 31 37 33 32 36 (c) 39 36 39 Figure A.11 : Semi-Splay Tree 33 32 31 36 33 30 37 35 39 36 (a) 32 33 31 36 33 37 35 36 39 (b) 33 32 31 37 33 36 (c) 35 39 36 39 Figure A.12 : Simple-Semi-Splay Tree These Paris VI, Janvier 1996 A.2. Les les de priorite 144 Nous avons implemente cette forme de le de priorite avec les structures de Semi-Splay et de Simple-Semi-Splay. Nous les avons appelees les Single-Semi-Splay et Single-Simple-Semi-Splay. La representation est modiee. Une le d'attente est attachee a chaque nud de la structure. Le nombre d'elements presents dans la le d'un nud de priorite v designe le nombre d'elements de priorite v presents dans l'arbre. Les structures single utilisent les m^emes algorithmes pour la phase de recherche que les non single . En revanche, selon la valeur v, la suppression (respectivement l'insertion) n'entra^ne pas forcement la suppression (respectivement l'insertion) d'un nud dans l'arbre. Les gures A.13 et A.14 donnent des exemples de suppression et d'insertion pour ces deux nouvelles les de priorite. hh ii 33 2 31 1 30 1 36 2 32 1 35 1 37 1 39 1 (a) 31 1 33 2 32 1 36 2 35 1 37 1 39 1 (b) 33 2 31 1 37 1 32 1 36 2 (c) 39 2 35 1 Figure A.13 : Single-Semi-Splay Tree These Paris VI, Janvier 1996 A.2. Les les de priorite 145 33 2 32 1 36 2 31 1 35 1 30 1 37 1 39 1 (a) 32 1 31 1 33 2 36 2 35 1 37 1 39 1 (b) 33 2 32 1 37 1 31 1 36 2 (c) 39 2 35 1 Figure A.14 : Single-Simple-Semi-Splay Tree These Paris VI, Janvier 1996 146 Bibliographie [AFRV+94] Authie (G.), Ferreira (A.), Roch (J.-L.), Villard (G.), Roman (J.), Roucairol (C.) et Virot (B.). { Algorithmique Parallele : Analyse et Conception. { Hermes, Paris, 1994. [AGFR+95] Authie (G.), Garcia (J.-M.), Ferreira (A.), Roch (J.-L.), Villard (G.), Roman (J.), Roucairol (C.) et Virot (B.). { Parallelisme et Applications Irregulieres. { Hermes, Paris, 1995. [AhHU74] Aho (A.V.), Hopcroft (J.) et Ullman (J.). { The Design and Analysis of Computer Algorithms. { Addison-Wesley, New-York, 1974. [ArSe89] Aragon (C.R.) et Seidel (R.G.). { Randomized search trees . FOCS 30, 1989, pp. 540{545. [Bena95a] Benachouche (M.). { Regulation dynamique de la charge pour le B&B distribue : Theorie et implementation. { Rapport technique n 95/21, PRiSM, 1995. [Bena95b] Benachouche (M.). { Resolution parallele de l'aectation quadratique (qap) et de la couverture minimale d'un graphe (vcp) par la methode branch & bound . FRANCORO, Rencontres Francophones de Recherche Operationnelle. { 1995. [Bena96] Benachouche (M.). { Contribution a la parallelisation des methodes de recherche arborescente dans des environnements distribues. { 4, Place Jussieu, 75252 Paris Cedex 05, FRANCE, These de PhD, Universite Pierre et Marie Curie { Paris VI, janvier 1996. In French. [BiBr87] Bitwas (J.) et Browne (J.C.). { Simultaneous update of priority structures . IEEE International conference on parallel computing, 1987, pp. 124{131. [BoKZ77] Van Emde Boas (P.), Kaas (R.) et Zilstra (E.). { Design and implementation of an ecient priority queue . Mathematical System Theory, vol. 10, 1977, pp. 99{127. [Brow78] Brown (M.R.). { Implementation and analysis of binomial queue algorithmms . SIAM Comput., vol. 7, 1978, pp. 298{319. [Brow88] Brown (R.). { Calendar queues: a fast o(1) priority queue implementation for the simulation event set problem . Communication of the ACM, vol. 31, n 10, octobre 1988, pp. 1220{1227. [BuBu93] Bui (M.) et Butelle (F.). { Construction repartie d'un arbre couvrant de diametre minimum. { RR n 2017, INRIA, Rocquencourt, septembre 1993. hh ii hh ii hh ii hh ii hh ii hh ii These Paris VI, Janvier 1996 Bibliographie 147 [BuKR91] Burkard (R.), Karisch (S.) et Rendl (F.). { Qaplib - a quadratic assignment problem library . European Journal of Operational Research, vol. 55, 1991, pp. 115{119. [CaCh92] Carlsonn (S.) et Chen (J.). { The complexity of heaps . ACM-SIAM Symposium on Discrete Algorithm, pp. 393{402. { janvier 1992. [CaFo84] Calhoun (J.) et Ford (R.). { Concurrency control mechanisms and the serializability of concurrent tree algorithms . the 3rd ACM SIGACTSIGMOD Symposium on Principles of Database Systems. { Waterloo Ontario, avril 1984. [Carl91] Carlsson (S.). { An optimal algorithm for deleting the root of a heap . Information Processing Letters, vol. 37, n 2, janvier 1991, pp. 117{120. [CBDW91] Colbrook (A.), Brewer (E. A.), Dellarocas (C. N.) et Weihl (W. E.). { Algorithms for search trees on message-passing architectures. { Rapport technique n MIT/LCS/TR-517, Massachuset Institute of Technology, 1991. [Chen90] Cheng (K.H.). { A simultaneous access queue . Journal of parallel and distributed computing, vol. 9, 1990, pp. 83{86. [CoLR89] Cormen (T.H.), Leiserson (C.E.) et Rivest (R.L.). { Introduction to Algorithms. { MIT Press, McGraw-Hill Book Compagny, 1989. [CoNR92] Cosnard (M.), Nivat (M.) et Robert (Y.). { Algorithmique Parallele. { Masson, etude et recherche en informatique, Paris, 1992. [CoTr93] Cosnard (M.) et Trystram (D.). { Algorithmes et Architectures Paralleles. { InterEdition, Informatique Intelligence Articielle, Paris, 1993. [Cran72] Crane (C.A.). { Linear Lists and priority queues as balanced binary trees. { Rapport technique n 259, Stanford University, 1972. [Crei85] McCreight (E. M.). { Priority search trees . SIAM J Computing, vol. 14, n 2, mai 1985, pp. 257{276. [CuLe94b] Cung (V.-D.) et Le Cun (B.). { An ecient implementation of parallel a* . Lecture Notes in Computer Science, Parallel and Distributed hh ii hh ii hh ii hh ii hh ii hh ii hh ii computing : Theory and Practice, Canada-France Conference on Parallel Computing, pp. 153{168. { mai 1994. [DaHo91] [DeFR90] Das (S.K.) et Horng (W.-B.). { Managing a parallel heap eciently . Proc. PARLE'91-Parallel Architectures and Languages Europe, pp. 270{288. { 1991. Dehne (F.), Ferreira (A.) et Rau-Chaplin (A.). { Parallel branch and bound on ne grained hypercube multiprocessors . Parallel Computing, no15, 1990, pp. 201{209. Delamarre (Dominique). { Etude et conception d'algorithmes paralleles hh ii hh ii [Dela94] d'optimisation combinatoire discrete approchee; implantation sur architecture MIMD. { These de PhD, Universite d'Orleans, decembre 1994. These Paris VI, Janvier 1996 Bibliographie [Deo89] 148 Deo (N.). { Data structures for parallel computation on sharedmemory machine . SuperComputing, pp. 341{345. { 1989. Deo (N.) et Prasad (S.). { Parallel heap: An optimal parallel priority queue . Journal of Supercomputing, vol. 6, n 1, mars 1992, pp. 87{98. Dietz (P. F.). { Heap construction in the parallel comparison tree model . SWAT'92 Third Scandinavian Workshop on Algorithm Theory, Scandinavie. { 1992. Diderich (C.) et Gengler (M.). { Experimental results with synchronized parallel branch and bound algorithms . IFIP WG 10.3, IRhh ii [DePr92] hh ii [Diet92] hh ii [DiGe94] hh ii REGULAR94 : Parallel Algorithms for Irregular Structured Problems, Suisse, ed. par A. Ferreira, J. Rolim (Kluwer Academic). { septembre [Dixo94] 1994. Dixon (B.). { Concurrency in a o(loglogn) priority queue . Lecture hh ii Notes in Computer Science, Parallel and Distributed computing : Theory and Practice, Canada-France Conference on Parallel Computing, pp. 59{72. { mai 1994. [DoRo95a] Dowaji (S.) et Roucairol (C.). { Load balancing strategy and priority of tasks in distributed e nvironments . Fourteenth Annual IEEE Conhh ii ference - International Phoenix Conference on Computers and Communications, pp. 15{22. { Scottsdale, Arizona (USA), mars 1995. [DoRo95b] Dowaji (S.) et Roucairol (C.). { Inuence of priority of tasks on load balancing strategies for distributed branch-and-bound algorithms . hh ii 9th International Parallel Processing Symposium (IPPS'95) - Workshop on Solving Irregular Problems on Distributed Memory Machines, pp. 83{90. { Santa Barbara (USA), avril 1995. [Dowa95] Dowaji (S.). { Contribution a l'etude des problemes d'equilibrage de charge dans des environnements distribues. { 4, Place Jussieu, 75252 Paris Cedex 05, FRANCE, These de PhD, Universite Pierre et Marie Curie { Paris VI, juin 1995. In French. [DuFe94] Duboux (T.) et Ferreira (A.). { Towards a dynamic parallel database machine: databalancing techniques and pipeline. { Rapport technique n 94-47, LIP Ens-Lyon, France, decembre 1994. [DuFG94] Duboux (T.), Ferreira (A.) et Gastaldo (M.). { A scalable design for VLSI dictionary machines. { Rapport technique n 94-33, LIP EnsLyon, France, decembre 1994. [Eck94a] Eckstein (J.). { Control strategies for parallel mixed integer branch and bound . Supercomputing'94, ed. par In I.C.S. Press (editor). { to appear 1994. [Eck94b] Eckstein (J.). { Parallel Branch-and-Bound algorithms for general mixed integer programming on the CM-5. { Rapport technique n TMC-257, Thinking Machines Corporation, 1994. [Elli80] Ellis (C.S.). { Concurrent search and insertion in 2-3 trees . Acta Informatica, vol. 14, 1980, pp. 63{86. [Elli81] Ellis (C.S.). { Concurrent search and insertion in avl trees . IEEE Trans. on Cumputers, vol. C-29, n 9, septembre 1981, pp. 811{817. hh ii hh hh ii ii These Paris VI, Janvier 1996 Bibliographie 149 [FaCh89] Fan (Z.) et Cheng (K.H.). { A simultaneous access priority queue . International conference on parallel processing, 1989, pp. I{95{98. [FlGL93b] Florin (G.), Gomez (R.) et Lavallee (I.). { Recursive distributed programming schemes and shortest paths . OPOPAC, International Workshop on Principles of Parallel Computing. { 1993. [FlGL93c] Florin (G.), Gomez (R.) et Lavallee (I.). { Recursive distributed programming schemes . ISADS'93 Kawasaki Japan. { mars 1993. [FlLa91] Florin (G.) et Lavallee (I.). { La recursivite comme mode de programmation distribuee. { RR n 1536, INRIA, Rocquencourt, 1991. [Fouc93] Fouche (D.). { Parcours paralleles de type a* pour dierents problemes combinatoires diciles. { Memoire d'ingenieur IIE-CNAM, juin 1993. [FrVV78] Francon (J.), Viennot (G.) et Vuillemin (J.). { Description and analysis of an acient priority queue representation . In Proceedings of the 19th Symposium on Fondation of Computer Science. { 1978. [FSST86] Fredman (M.L.), Sedgewick (R.), Sleator (D.D.) et Tarjan (R.E.). { The pairing heap: A new form of self-adjusting heap . Algorithmica, vol. 1, 1986, pp. 111{129. [Gast93] Gastaldo (M.). { Contribution a l'algorithmique Parallele des structures de donnees et des structures discretes : machine dictionnaire et algorithmes pour les graphes. { These de doctorat, E cole Normale Superieure de Lyon et l'Universite Claude Bernard Lyon I, France, decembre 1993. [GeCr93] Gendron (B.) et Crainic (T.G.). { Parallel implementation of a branch-and-bound algorithm for multicommodityuncapacited location with balancing requirements . INFOR, pp. 151{165. { 1993. [GeCr95] Gendron (B.) et Crainic (T.G.). { A Branch-and-Bound algorithm for depot location and container eet management. { Rapport technique n CRT-95-10, Universite de Montreal, C.P 6128, succ. Centreville, Montreal, Quebec, Canada H3C 3J7., CRT, Centre de Recherche sur les Transports et departement d'informatique et de recherche operationnelle, 1995 to appear in Location Science. [Gilm62] Gilmore (P.C.). { Optimal and suboptimal algorithms for the quadratic assignment problem . SIAM Journal on Applied Math., vol. 10, 1962, pp. 305{313. [Gome95] Gomez (R.). { Conception et specication d'algorithmes distribues : la vague recursive. { These de doctorat, Universite Paris 8, avril 1995. [GoMu86] Gonnet (G.H.) et Munro (J.I.). { Heaps on heaps . SIAM Journal of Computing, vol. 15, n 4, novembre 1986, pp. 964{971. [GuSe78] Guibas (L.J.) et Sedgevick (R.). { A dichromatic framework for balanced trees . Proceedings of the 19th Symposium on Fondation of Computer Science. { 1978. [HHM94] Hajian (M.T.), Hai (I.) et Mitra (G.). { A Distributed Processing Algohh ii hh ii hh ii hh ii hh ii hh ii hh ii hh ii hh ii rithm For Solving Integer Programs Using a Cluster Of Workstations. { Rapport technique n TR/14/94, Department of Mathematics and Statistics, 1994. These Paris VI, Janvier 1996 Bibliographie 150 [Huan91b] Huang (Q.). { An evaluation of concurrent priority queue algorithms . Third IEEE Symposium on Parallel and Distributed Processing, pp. 518{525. { decembre 1991. [Isha92] Ishak (R.). { Semantically consistent schedules for ecient and concurrent b-tree restructuring . Eight international Conference on Data Engineering, pp. 184{199. { fevrier 1992. [Jone89] Jones (D.W.). { Concurrent operations on priority queues . ACM, vol. 32, n 1, janvier 1989, pp. 132{137. [JoSh93] Johnson (T.) et Shasha (D.). { The performance of concurrent b-tree algorithms . ACM Transaction on DataBase System, vol. 18, n 1, mars 1993, pp. 51{101. [Kind94] Kindervater (G.). { What is branch and bound ...? from folklore to a computational model and its implementation . IFIP WG 10.3, IRREGULAR94 : Parallel Algorithms for Irregular Structured Problems, ed. par A. Ferreira, J. Rolim (Kluwer Academic). { septembre 1994. [KiTM84] Kitsuregawa (M.), Tanaks (H.) et Moto-Oka (Y.). { Architecture and performance of relational algebra machine grace . the International Conference on Parallel Processing. { 1984. [KiTr88] Kindervater (G.) et Trienekens (H.). { Experiments with parallel algorithms for combinatorial problems . EJOR, European Journal of Operational Research, no33, 1988, pp. 65{81. [Knut73] Knuth (D.E.). { The Art of Programming: Sorting and Searching. { Addison-Wesley, 1973, volume 3. [Korf85] Korf (R. E.). { Depth-rst iterative-deepening : An optimal admissible tree search . Articial Intelligence, no27, 1985, pp. 97{109. [KuLe80] Kung (H.) et Lehman (P.). { Concurrent manipulation of binary search trees . ACM Trans. on Database Systems, vol. 5, n 3, 1980, pp. 354{382. [KwWo83] Kwong (Y.) et Wood (D.). { A new method for concurrency in b-tree . IEEE Trans. Software Engr, vol. SE-8, n 3, mai 1983, pp. 211{221. [LaSa84a] Lai (T.-H.) et Sahni (S.). { Anomalies in parallel branch-and-bound algorithms . Communication A.C.M., vol. 27, june 1984, pp. 594{602. [Laval86] Lavallee (I.). { Contribution a l'algorithmique parallele et distribu ee, application a l'optimisation combinatoire. { These d'etat, Universite Paris XI, Orsay, 1986. [Lavau95c] Lavault (C.). { Evaluation des algorithmes distribues | analyse, complexite, methodes. { Hermes, Paris, janvier 1995. [Lawl63] Lawler (E.). { The quadratic assignment problem . Management Science, vol. 9, 1963, pp. 586{599. [LeMR91] Le Cun (B.), Mans (B.) et Roucairol (C.). { Operations concurrentes et les de priorite. { RR n 1548, INRIA-Rocquencourt, 1991. hh ii hh ii hh ii hh ii hh ii hh ii hh ii hh ii hh ii hh ii hh ii hh ii These Paris VI, Janvier 1996 Bibliographie 151 [LeMR92] Le Cun (B.), Mans (B.) et Roucairol (C.). { Comparison of concurrent priority queues for branch and bound Algorithms. { RR n 92-65, MASI Universite Pierre et Marie Curie, 1992. [LeMR93] Le Cun (B.), Mans (B.) et Roucairol (C.). { Etude de les de priorite concurrentes . OPOPAC, International Workshop on Principles of Parallel Computing, ed. par Y. Paker et I. Lavallee (Hermes France). { novembre 1993. [LeRo94] Le Cun (B.) et Roucairol (C.). { Concurrent data structures for tree search algorithms . IFIP WG 10.3, IRREGULAR94 : Parallel Algorithms for Irregular Structured Problems, ed. par A. Ferreira, J. Rolim (Kluwer Academic), pp. 135{155. { septembre 1994. [LeYa81] Lehman (P.) et Yao (S.). { Ecient locking for concurrent operation on b-tree . ACM trans. on Database Systems, vol. 6, n 4, decembre 1981, pp. 650{670. [LiSR92] Li (J.), Srivastava (J.) et Rotem (D.). { Cmd: A multidimensional declustering method for parallel database systems . the 18th VLDB Conference, Vancouver, Canada. { 1992. [LiWa86a] Li (G.) et Wah (B.W.). { Coping with anomalies in parallel branchand-bound . IEEE Trans. on Computers, vol. C-35, n 6, June 1986, pp. 568{573. [LuM89] Luling (R.) et Monien (B.). { Two strategies for solving the vertex cover problem on a transputer network. . The 3rd Int. Workshop On hh ii hh ii hh ii hh ii hh ii hh ii Distributed Algorithms, number 392 in Lecture Notes Of Computer Sciences., pp. 160{171. { 1989. [LuMo92] Luling (R.) et Monien (B.). { Load balancing for distributed branch and bound algorithms . International Parallel Processing Symposium (IPPS)., pp. 543{549. { 1992. Luling (R.), Monien (B.), Racke (M.) et Tschoke (S.). { Solving the hh ii [LuMo95] TSP with a distributed Branch-and-Bound Algorithms on a 1024 processor network. { Rapport technique n 160, University of Paderborn, 1995. [LuMR91] Luling (R.), Monien (B.) et Ramme (F.). { Load balancing in large network: A comparative study. . 3rd IEEE Symposium on Parallel and Distributed Processing. { 1991. [Mans92] Mans (B.). { Contribution a l'Algorithmique Non Numerique Parallele : Parallelisation de Methodes de Recherche Arborescente. { These de doctorat, Universite Paris VI, Paris, France, juin 1992. [Mans92a] Mans (B.). { Contribution a l'Algorithmique Non Numerique Parallele : Parallelisations de Methodes de Recherche Arborescentes. { 4, place Jussieu, 75252 Paris Cedex 05, These d'universite, Universite Paris VI, juin 1992. [Mans95] Mans (B.). { Portable distributed priority queues with MPI . Web server. { 1995. [MaRo90] Mans (B.) et Roucairol (C.). { Concurrency in Priority Queues for Branch and Bound algorithms. { Rapport technique n 1311, INRIA, Rocquencourt, France, 1990. hh ii hh ii These Paris VI, Janvier 1996 Bibliographie [MaRo93] 152 Mans (B.) et Roucairol (C.). { Theoretical comparisons of parallel best-rst search branch and bound algorithms . OPOPAC, International Workshop on Principles of Parallel Computing, ed. par Y. Paker et I. Lavallee (Hermes France). { novembre 1993. Mautor (T.). { Contribution a la resolution des problemes hh ii [Maut93] [McKe91] d'implantation : algorithmes sequentiels et paralleles pour l'aectation quadratique. { 4, place Jussieu, 75252 Paris Cedex 05, These d'universite, Universite Paris VI, fevrier 1993. McKeown (G.), Rayward-Smith (V.), Rush (S.) et Turpin (H.). { Using a transputer network to solve branch and bound problems . hh ii Transputing 91, Proceedings of the world Transputer User Group Conference, pp. 781{800. { 1991. [Meyb92] Meybodi (M.R.). { Concurrent data structures for hypercube machine . Proceedings of the Conference on Parallel Architectures and Languages Europe (PARLE'92). { juin 1992. [MuPS92] Munro (J.I.), Papadakis (T.) et Sedgewick (R.). { Deterministic skip lists . ACM-SIAM Symposium on Discrete Algorithm, pp. 367{375. { janvier 1992. [NaMe95] Namyst (R.) et Mehaut (JF.). { Pm2 : Parallel multithreaded machine a computing environment for distributed architectures . PARCO. { 1995. [NaMe95b] Namyst (R.) et Mehaut (J.F.). { PM2: Parallel Multithreaded Machine. a Multithreaded Environment on top of pvm . Proceedings de EuroPVM. { Hermes, Sep. 1995. [Nils80] Nilsson (N. J.). { Principles of Articial Intelligence. { Tioga Publishing Co., 1980. [OlWe91] Olariu (S.) et Wen (Z.). { Optimal parallel initialization algorithms for a class of priority queues . IEEE Transactions on Parallel and Distributed Systems, vol. 2, n 4, octobre 1991, pp. 423{429. [OtRS82] Ottman (T.), Rosenberg (A.) et L.Stockmeyer. { A dictionary machine (for vlsi) . IEEE Trans. on Computers, pp. 892{897. { septembre 1983. [Pard94] Pardalos (P.). { Parallel algorithms for nonlinear assignment problems . IFIP WG 10.3, IRREGULAR94 : Parallel Algorithms for Irregular Structured Problems, ed. par A. Ferreira, J. Rolim (Kluwer Academic Publishers). { septembre 1994. [PaVW83] Paul (W.), Vishkin (U.) et Wagener (H.). { Parallel computation on 2-3 tree . RAIRO informatique theorique, France, vol. 17, n 4, 1983, pp. 397{404. [Pear84] Pearl (J.). { Heuristics. { Addison-Wesley, 1984. [Pele90] Peleg (D.). { Distributed data structures: a complexity-oriented view . Proceedings of the 4th International Worshop on Distributed Algorithms (WDAG'90), pp. 71{89. { 1990. hh ii hh ii hh ii hh ii hh ii hh ii hh ii hh ii hh ii These Paris VI, Janvier 1996 Bibliographie 153 [PeMi92] Pekny (J.) et Miller (D.). { A parallel branch and bound algorithm for solving large asymmetric traveling salesman problems . Mathematical Programming, vol. 55, 1992, pp. 17{33. [PiPu92] Pinotti (M.C.) et Pucci (G.). { Parallel algorithm for priority queue operations . SWAT'92 Third Scandinavian Workshop on Algorithm Thoery. { 1992. [PlRo89] Plateau (G.) et Roucairol (C.). { A supercomputer algorithm for the 0-1 multiknapsack problem . Impacts of Recent Computer Advances on Operations Research, 1989, pp. 144{157. [Pugh90] Pugh (W.). { Skip lists: A probabilistic alternative to balanced trees . Communication of ACM, vol. 33, n 6, juin 1990, pp. 686{676. [Quin90] Quinn (M. J.). { Analysis and implementation of branch-andbound algorithms on a hypercube multicomputer. . IEEE Transaction, vol. 39, n 3, March 1990. [QuYo84] Quinn (M. J.) et Yoo (Y. B.). { data structure for the ecient solution of graph theoretic problems on tighly-coupled mimd computers . Proceedings of the International Conference on Parallel Processing, pp. 431{438. { 1984. [RaKR87a] Rao (V. N.), Kumar (V.) et Ramesh (K.). { Parallel Heuristic Search on Shared Memory Multiprocessors : Preliminary Results. { Rapport technique n AI85-45, Articial Intelligence Laboratory, The University of Texas at Austin, juin 1987. [RaKu88] Rao (V.N.) et Kumar (V.). { Concurrent insertions and deletions in a priority queue . IEEE proceedings of International Conference on Parallel Processing, 1988, pp. 207{211. [RaZh91] Rao (N.) et Zhang (W.). { Building heaps in parallel . Information Processing Letter, no37, 1991, pp. 355{358. [Rouc87a] Roucairol (C.). { Du sequentiel au parallele: la recherche arborescente hh ii hh ii hh ii hh ii hh ii hh ii hh ii hh ii et son application a la programmation quadratique en variable 0-1, These d'etat. { These de PhD, Universite Paris VI, juin 1987. [Rouc87b] Roucairol (C.). { A parallel branch and bound algorithm for the quadratic assignment problem . Discrete Applied Mathematics, vol. 18, 1987, pp. 211{225. [Rouc90] Roucairol (C.). { Recherche arborescente en parallele. { RR n M.A.S.I. 90.4, Institut Blaise Pascal - Paris VI, 1990. In French. [SCOOP95] Member (SCOOP). { Scoop. { kluwer Verlag, 1995. [SlTa83] Sleator (D.D.) et Tarjan (R.E). { Self-adjusting trees . 15th ACM Symposium on theory of computing, pp. 235{246. { avril 1983. [SlTa86] Sleator (D.D.) et Tarjan (R.E). { Self-adjusting heaps . SIAM J. Comput., vol. 15, n 1, fevrier 1986, pp. 52{69. [StVi87] Stasko (J.T.) et Vitter (J.S.). { Pairing Heap: Experiments and Analysis. { Rapport technique n 600, INRIA Rocquencourt, France, fevrier 1987. hh ii hh hh ii ii These Paris VI, Janvier 1996 Bibliographie [TaSl85] [TrBr92] [Tsch94] [Vuil78] [Will64] 154 Tarjan (R.E.) et Sleator (D.D.). { Self-adjusting binary search trees . Journal of ACM, vol. 32, n 3, 1985, pp. 652{686. Trienekens (H.) et de Bruin (A.). { Towards a Taxonomy of Parallel Branch and Bound algorihms. { RR n EUR-CS-92-01, Rotterdam, The Netherlands, Erasmus University, Computer Science Departement, 1992. Tschoke (Stefan). { A portable parallel branch-and-bound library . III Annual Implementation Challenge Workshop, DIMACS. { New Brunswick, USA, octobre 1994. Vuillemin (J.). { A data structure for manipulating priority queues . Comm. ACM, vol. 21, 1978, pp. 309{314. Williams (J.W.J.). { Algorithm 232: Heapsort . Communications of the ACM, vol. 7, 1964, pp. 347{348. hh ii hh ii hh ii hh ii These Paris VI, Janvier 1996