Les riches heures de l ordonnancement



Documents pareils
Annexe 6. Notions d ordonnancement.

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

Métriques de performance pour les algorithmes et programmes parallèles

Communications collectives et ordonnancement en régime permanent pour plates-formes hétérogènes

Exemples de problèmes et d applications. INF6953 Exemples de problèmes 1

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

Les indices à surplus constant

V- Manipulations de nombres en binaire

Chapitre 2 Le problème de l unicité des solutions

L utilisation d un réseau de neurones pour optimiser la gestion d un firewall

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.

Julien MATHEVET Alexandre BOISSY GSID 4. Rapport RE09. Load Balancing et migration

Synthèse «Le Plus Grand Produit»

Optimisation for Cloud Computing and Big Data

Concevoir et déployer un data warehouse

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

Chapitre 5 : Flot maximal dans un graphe

Principe de symétrisation pour la construction d un test adaptatif

Programmation linéaire

ÉTUDE DE L EFFICACITÉ DE GÉOGRILLES POUR PRÉVENIR L EFFONDREMENT LOCAL D UNE CHAUSSÉE

Vers une approche Adaptative pour la Découverte et la Composition Dynamique des Services

INFO-F-425 Modèles mathématiques et algorithmes pour l ordonnancement. Bernard Fortz

Francis BISSON ( ) Kenny CÔTÉ ( ) Pierre-Luc ROGER ( ) IFT702 Planification en intelligence artificielle

Limites finies en un point

LE PROBLEME DU PLUS COURT CHEMIN

Le produit semi-direct

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Logiciel Libre Cours 3 Fondements: Génie Logiciel

Rapport d activité. Mathieu Souchaud Juin 2007

CHAPITRE 5. Stratégies Mixtes

Fonctions de plusieurs variables

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Enseignant: Lamouchi Bassem Cours : Système à large échelle et Cloud Computing

Ordonnancement temps réel

Contributions à l expérimentation sur les systèmes distribués de grande taille

Image d un intervalle par une fonction continue

Ordonnancement. N: nains de jardin. X: peinture extérieure. E: électricité T: toit. M: murs. F: fondations CHAPTER 1

Programmation parallèle et distribuée

Initiation au HPC - Généralités

Conception des systèmes répartis

Cours de Génie Logiciel

Optimisation for Cloud Computing and Big Data

Evaluation des performances de programmes parallèles haut niveau à base de squelettes

Chp. 4. Minimisation d une fonction d une variable

Optimisation non linéaire Irène Charon, Olivier Hudry École nationale supérieure des télécommunications

Communications performantes par passage de message entre machines virtuelles co-hébergées

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping

Développement itératif, évolutif et agile

Baccalauréat ES/L Amérique du Sud 21 novembre 2013

1 Recherche en table par balayage

Définitions. Numéro à préciser. (Durée : )

IRL : Simulation distribuée pour les systèmes embarqués

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Asynchronisme : Cadres continu et discret

4.2 Unités d enseignement du M1

Comment optimiser l utilisation des ressources Cloud et de virtualisation, aujourd hui et demain?

Partie 7 : Gestion de la mémoire

3 Approximation de solutions d équations

Vision industrielle et télédétection - Détection d ellipses. Guillaume Martinez 17 décembre 2007

Contexte. Pour cela, elles doivent être très compliquées, c est-à-dire elles doivent être très différentes des fonctions simples,

Comment se servir de cet ouvrage? Chaque chapitre présente une étape de la méthodologie

Analyse stochastique de la CRM à ordre partiel dans le cadre des essais cliniques de phase I

Sujet proposé par Yves M. LEROY. Cet examen se compose d un exercice et de deux problèmes. Ces trois parties sont indépendantes.

Ne laissez pas le stockage cloud pénaliser votre retour sur investissement

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Rappels sur les suites - Algorithme

Objectifs du cours d aujourd hui. Informatique II : Cours d introduction à l informatique et à la programmation objet. Complexité d un problème (2)

Les simulations dans l enseignement des sondages Avec le logiciel GENESIS sous SAS et la bibliothèque Sondages sous R

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Nom de l application

Gé nié Logiciél Livré Blanc

I Stabilité, Commandabilité et Observabilité Introduction Un exemple emprunté à la robotique Le plan Problème...

Chapitre 7. Récurrences

Garantir une meilleure prestation de services et une expérience utilisateur optimale

LES CARTES À POINTS : POUR UNE MEILLEURE PERCEPTION

Fibonacci et les paquerettes

Equilibrage de charge pour les grilles de calcul : classe des tâches dépendantes et indépendantes.

La fonction exponentielle

Jade. Projet Intelligence Artificielle «Devine à quoi je pense»

Consolidation de stockage

Nombres, mesures et incertitudes en sciences physiques et chimiques. Groupe des Sciences physiques et chimiques de l IGEN

Représentation des Nombres

Cryptographie et fonctions à sens unique

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB Olivier Augereau Formation UML

Atteindre la flexibilité métier grâce au data center agile

En face du commanditaire, on met un chef de projet qui connait le domaine (banque, administration, etc.)

INTELLIGENCE ECONOMIQUE : ENJEUX ET RETOUR D EXPERIENCE PILOTE DANS SEPT PMI DE BOURGOGNE

Regard sur hybridation et infogérance de production

Sciences de Gestion Spécialité : SYSTÈMES D INFORMATION DE GESTION

Parallélisme et Répartition

Biostatistiques Biologie- Vétérinaire FUNDP Eric Depiereux, Benoît DeHertogh, Grégoire Vincke

physicien diplômé EPFZ originaire de France présentée acceptée sur proposition Thèse no. 7178

Gestion de projets logiciels. Xavier Dubuc

Programmation linéaire et Optimisation. Didier Smets

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Date : Tangram en carré page

CORBA haute performance

Transcription:

Les riches heures de l ordonnancement Denis Trystram Grenoble INP 51 avenue J. Kuntzmann, F-38330 Montbonnot St. Martin Institut Universitaire de France trystram@imag.fr RÉSUMÉ. Paralléliser c est exécuter des opérations (instructions ou programmes) sur plusieurs ressources simultanément. Gérer efficacement la répartition de tâches sur ces ressources est un problème qui se pose quel que soit le support d exécution matériel, le système d exploitation ou le langage cible choisi pour exécuter une application et à tous les niveaux (instructions élémentaires, composants de bibliothèque, applications). De plus, on peut envisager ce problème de différents points de vue (utilisateurs, administrateurs système). L ordonnancement est au cœur de la gestion efficace de ressources. Il s agit de déterminer où et quand exécuter les tâches en optimisant si possible un ou plusieurs objectifs avec des contraintes variées. C est un problème qui s est posé dès l introduction des premières machines vectorielles et parallèles dans les années 1970 et qui reste aujourd hui toujours d actualité, souvent avec des déclinaisons bien plus larges comme nous allons essayer de le montrer dans cet article. L objectif ici est de dresser un bilan des recherches menées lors des dernières décénies autour du thème de l ordonnancement dans le contexte du parallélisme et d en discuter les principaux enjeux aujourd hui. Nous défendons en particulier une approche de conception d algorithmes bien fondée sur le plan théorique, permettant à faible coût d obtenir des garanties de performance. ABSTRACT. Parallelizing means executing simultaneously multiple operations. The efficient management of the assignment of tasks on available computing resources is a challenging problem. Whatever the considered execution support, this problem is crucial at any level from basic instructions, library components to full applications. Moreover, it can be studied from various points of view (users, system administrators). Scheduling is the main part for efficient resource management. It consists in determining where and when to execute the tasks while optimizing one or several objectives under hardware constraints. This is an old problem which arised with the first vector machines in the early seventies. Today, it is still a challenging problem since many new constraints should be considered. The purpose of this paper is to review the main constraints and to show how to take them into account in the scheduling policies. We defend a position of well-founded approaches for designing scheduling algorithms that allow to obtain guaranteed performances at a reasonable cost. MOTS-CLÉS : parallélisme, optimisation combinatoire, gestion de ressources, ordonnancement. KEYWORDS: parallelism, combinatorial optimization, resource management, scheduling. DOI:10.3166/TSI.31.1021-1047 c 2012 Lavoisier Technique et science informatiques n o 8-9-10/2012, 1021-1047

1022 TSI. Volume 31 n o 8-9-10/2012 1. Introduction Le thème de l ordonnancement est transversal à la plupart des disciplines du parallélisme. Il s y décline de nombreuses manières. Informellement, on peut présenter l ordonnancement comme l allocation de travail (instructions élémentaires d un programme ou grosses applications de simulation numériques) sur des ressources (registres, CPU, co-processeurs de calcul, mémoires ou liens de communication). La difficulté provient de ce que les ressources sont limitées et ont leurs propres contraintes. Domaine ancien, l ordonnancement reste parfaitement d actualité. Il a motivé des recherches dans diverses disciplines depuis l apparition des premières machines parallèles il y a plusieurs dizaines d années. Il est encore plus ancien (et reste toujours très actif) dans la communauté de la recherche opérationnelle pour ses applications aux systèmes manufacturiers. Des liens étroits se sont tissés entre ces communautés au fil des années. La recherche opérationnelle fournit des outils puissants pour la résolution, le parallélisme (comme les réseaux, télécommunications, systèmes embarqués, etc.) offre une ouverture sur de nouveaux domaines d applications. Il existe un groupe de travail au sein du GdR ASR sur les modèles de calcul, l algorithmique parallèle et l ordonnancement, et plusieurs projets concernant le parallélisme ont également été soutenus par le GdR RO (en particulier, étude de flexibilité et robustesse pour l ordonnancement, génération aléatoire de graphes de précédence, ordonnancement hétérogène sur des GPU, etc.). Nous proposons ici une extension de la présentation donnée lors des vingtièmes rencontres du parallélisme en mai 2011 à Saint-Malo qui dresse les grandes lignes de l évolution du domaine de l ordonnancement depuis l apparition du parallélisme en Informatique. Dans un premier temps, nous présentons l évolution des platesformes de calcul parallèles. Ceci permettra de dégager les principales caractéristiques et contraintes intervenant dans les problèmes d ordonnancement et de discuter des modèles et de leur pertinence. En effet, il s agit de construire des outils qui suivent (et quelquefois même anticipent) les évolutions technologiques. Nous détaillons les principaux résultats obtenus en ordonnancement (complexité, approximation) sur des problèmes simples et présentons comment les généraliser à la plupart des hypothèses réalistes. Cet article se termine par une ouverture et une discussion sur des enjeux actuels. 2. Un peu d histoire... 2.1. Evolution des plates-formes parallèles Bien que très ancienne, l idée du parallélisme en Informatique s est développée au milieu des années 1970 sous des formes primitives dans les premières machines vectorielles, ciblées sur des applications numériques (manipulant des données régulières, organisées en tableaux ou matrices). Les unités de calcul étaient pipelinées et quelques périphériques d entrées-sorties fonctionnaient déjà en parallèle des calculs. On a vu se développer beaucoup de travaux pour rendre efficaces les codes numériques. Le

Les riches heures de l ordonnancement 1023 principe commun est d organiser un découpage fin des codes pour tirer parti au mieux des caractéristiques architecturales (taille des registres, temps de cycle des unités de calcul, bande passante mémoire, etc.). Des résultats de ce type ont été rapidement intégrés dans les compilateurs. L évolution naturelle de ces systèmes a consisté à regrouper entre elles quelques unités vectorielles communicant par une grande mémoire partagée. Les supercalculateurs ont évolué en faisant appel à des processeurs de plus en plus sophistiqués. La décennie des années 1980 est caractérisée par un foisonnement d idées et de réalisations concrètes de machines parallèles. Parmi les plus significatives, citons les machines construites à base du processeur anglais Transputer issu de projets européens. Ce processeur possédait 4 liens physiques pour connecter directement d autres transputers à sa mémoire locale. N ayant pas de matériel adapté au calcul flottant, il a connu plus de succès pour programmer les machines à laver que pour le calcul scientifique. C est également à cette époque qu est sortie la Connection Machine (CM2) avec ses 2 16 processeurs 1-bit (en pratique, chaque carte de 32 bits formait une unité flottante). Chaque constructeur de microprocesseurs a proposé sa propre version d une machine parallèle en adaptant les processeurs à de nouvelles fonctionnalités et à un réseau d interconnexion avec de bonnes propriétés. Les livres (Leighton, 1992) (Cosnard, Trystram, 1993) permettront de satisfaire les lecteurs les plus curieux. Les contraintes économiques ont vite remis de l ordre dans cette période qui a duré quelques années. Ce foisonnement d idées a conduit à la convergence vers des machines distribuées de quelques centaines à milliers de processeurs reliés physiquement par un réseau d interconnexion physique structuré. Elles ont été développées dans le cadre de quelques grosses entreprises. C était en quelque sorte les ancêtres des grappes actuelles. L idée de la grille, proposée dans les années 1990 (Foster, Kesselmann, 2004), était à l origine de construire une infrastructure de calcul distribuée pour faire tourner des applications à distance. Une telle plate-forme est constituée de multiples systèmes mutualisés, possédant chacun leur administration propre, ces systèmes étant dispersés géographiquement et hétérogènes. Le succès de l entreprise est d en avoir permis l accès à de nombreux chercheurs partout dans le monde, en particulier dans certains pays défavorisés. La grille a évolué rapidement vers de grosses infrastructures lourdes à gérer (et pas seulement du seul point de vue technique...). Cette idée a pu être réalisée en particulier grâce au développement d Internet et des réseaux rapides. Le concept de grille s est décliné de diverses façons. A la fin des années 1990, naît le projet NOW (Networks of Workstations) à Berkeley qui regroupe plusieurs centaines de stations de travail connectées localement et qui dépassent la puissance de calcul des gros supercalculateurs. Un peu plus tard, apparaît le calcul volontaire (volunteer computing) conçu pour des calculs spécifiques à parallélisme massif et simple à gérer (par exemple pour la recherche de grands nombres premiers ou pour les projets seti@home, folding@home, etc.). Ces dispositifs regroupent des centaines de milliers de machines et ont largement contribué à populariser le calcul parallèle auprès du grand public (Anderson, Fedak, 2006). Dans ces systèmes, les

1024 TSI. Volume 31 n o 8-9-10/2012 mécanismes sont simples : un programme client est déployé sur chaque machine volontaire lorsqu elle est inutilisée. Ils sont bien adaptés à certains types d applications avec peu de communications et plusieurs infrastructures logicielles permettent de gérer ces systèmes comme BOINC ou le projet français xtremweb. Cette présentation ne serait pas complète si l on n évoquait pas certaines plates-formes de calcul issues du pair-à-pair, caractérisées par leur gestion décentralisée. Les grappes de PC (ou clusters) constituent une alternative flexible et à moindre coût aux autres formes de calcul. Beaucoup de machines de ce type figurent au Top500 des infrastructures de calcul les plus puissantes au monde. Les processeurs sont souvent standard, relativement homogènes, reliés par un réseau local et placés sous une administration centralisée unique. Plus récemment, les progrès technologiques ont permis d intégrer plusieurs cœurs sur une même carte. On décline ainsi les plates-formes précédentes à partir de ces nouveaux processeurs multicœurs et de plus en plus de many-cores selon le nombre mis en œuvre. Comme dans beaucoup d autres domaines, l histoire bégaie : on assiste aujourd hui à un retour aux sources avec l ajout de coprocesseurs pour accélérer les calculs. En particulier, les processeurs graphiques GPU pour exploiter certaines parties de code, notamment celles à parallélisme régulier. En plus des caractéristiques précédentes et des niveaux supplémentaires de hiérarchies, il faut donc gérer en plus l hétérogénéité des unités de calcul (Bader, 2007). Ainsi, on parle aujourd hui plutôt de supports d exécution et non plus de machines pour souligner la diversité des composants dans les systèmes de calcul : les ressources deviennent totalement virtualisées. Cette idée qui était à la base des grilles se retrouve en particulier dans les nuages (clouds) qui sont des architectures de services. Imaginez dans votre salon ou dans une PME des prises permettant de se connecter à des ressources de calcul extérieures pour effectuer toute sorte de traitements. Cette vision de l informatique est dans la continuité des grilles de calcul, mais les masses immenses de données et l ouverture au marché grand public créent de nouveaux défis scientifiques (Foster et al., 2009). 2.2. Synthèse : vers une méthodologie générique Cette longue introduction a permis de rappeler la grande diversité des systèmes de calcul parallèle disponibles aujourd hui. Face à cette complexité croissante, l attitude des développeurs d applications a dû s adapter. Ces utilisateurs experts dans leur domaine se concentrent sur le cœur scientifique de leurs métiers plutôt que sur des questions techniques liées à la machine, mais il faut être en mesure de prévoir l évolution de leurs codes, l idée étant de créer des interfaces de programmation de haut niveau qui permettent de les libérer des tâches difficiles (et parfois fastidieuses) de l ordonnancement, de gestion des ressources et autres opérations de bas niveau. On trouve ci-après une liste des principaux caractères communs aux ressources des différents types de plates-formes parallèles actuelles. Selon les cas, certains pa-

Les riches heures de l ordonnancement 1025 ramètres sont plus importants que d autres, ils prennent des valeurs extrèmes qui influencent plus ou moins les politiques d ordonnancement : ordre de grandeur du nombre d unités de calcul, caractère distribué, hiérarchisé, hétérogène ou volatile des ressources, opérant sur des données incertaines (mal connues ou sujettes à perturbations), etc. Toutes ces caractéristiques conduisent à un accroissement de la complexité des supports d exécution. Pour y faire face, la recherche s est organisée en couches plus ou moins indépendantes qui nécessitent chacune une expertise toujours plus poussée (Culler, Singh, 1999). Les systèmes actuels sont caractérisés par l existence d une forme ou une autre de parallélisme à chaque niveau (Hwang, 1993). Devenir LE spécialiste du portage d un code numérique sur une machine donnée n a plus beaucoup de sens aujourd hui, on doit se focaliser sur quelques sous-problèmes (allocation de registres, gestion des niveaux de mémoire, optimisation de la bande passante, déploiement du code, etc.) en gardant si possible une vue d ensemble cohérente. On ne peut pas réécrire le code d une application à chaque nouvelle génération de machines! La recherche de pointe en parallélisme se fait dans des équipes où l on trouve des compétences multiples. Les problèmes sont décomposés en couches successives et on dialogue aux interfaces. Ainsi, l ordonnancement est découplé de l algorithmique proprement dite et s appuie sur des mécanismes mis au point dans les intergiciels. Il reste bien sûr nécessaire de s attaquer aussi à des problèmes transversaux qui se retrouvent à chaque niveau (gérer la diversité des utilisateurs, l adaptivité, le passage à l échelle, la gestion des données incertaines, etc.). Quel que soit le niveau, la gestion du parallélisme revient à ordonnancer des tâches, ce qui peut s exprimer comme un problème d optimisation combinatoire, c est-à-dire, d une fonction objectif discrète à optimiser sous contraintes. La méthodologie classique pour l analyse est rappelée ci-dessous : 1. Etude et caractérisation de l environnement modélisation 2. Définition formelle du problème 3. Etude de la complexité (NP-complétude, inapproximation) 4. Conception d algorithme(s) 5. Analyse (bornes au pire des cas, en moyenne) 6. Validation par simulations ou tests en vraie grandeur. Selon la formation scientifique de base et la communauté d appartenance, certaines étapes sont implicites ou tout simplement ignorées... Les algorithmiciens auront tendance à se focaliser sur les étapes 2 à 5 en laissant tomber la validation expérimentale, les chercheurs en Système développeront plutôt les points 4 et 6 (heuristiques souvent astucieuses, mais pas forcément garanties, destinées à tourner dans des conditions réelles). Peu d équipes de recherche au monde peuvent prétendre couvrir l ensemble de ces points.

1026 TSI. Volume 31 n o 8-9-10/2012 2.3. L ordonnancement dans une perspective historique L évolution des architectures de systèmes parallèles que nous venons de présenter a été étroitement liée aux progrès en algorithmique, au développement de méthodes et d outils pour gérer le parallélisme, d environnements de programmation ou encore de langages permettant d exprimer la concurrence (Blazewicz et al., 2000). Les solutions que l on cherche à concevoir pour gérer les ressources doivent être flexibles, c est-àdire, composées de mécanismes pas trop compliqués pour pouvoir évoluer rapidement tout en restant performants. On distingue deux approches possibles pour cela. On peut soit faire évoluer les mécanismes existants d une génération à la suivante, c est ce qui s est passé pendant longtemps, soit en imaginer de nouveaux mieux adaptés aux besoins des systèmes actuels (et futurs). Reprenons l évolution des supports d exécution sous cet angle. Historiquement, les développeurs de codes numériques se sont appropriés leur vision propre du domaine de l ordonnancement. Les premières recherches en algorithmique parallèle ne faisaient pas appel à l ordonnancement proprement dit. Le vectoriel et le parallélisme sur les supercalculateurs à mémoire partagée du début des années 1980 ont conduit à une algorithmique ad hoc. Comme le monsieur Jourdain du Bourgeois Gentilhomme, les développeurs faisaient de l ordonnancement sans le savoir... Les stratégies de découpage des données et d allocation d opérations se faisaient à la main directement dans le code avec l objectif d équilibrer les calculs. Puis, on a cherché rapidement à rendre cette opération extérieure aux programmes en remplaçant les directives explicites par des mécanismes de plus haut niveau. Formulé de cette manière, cela revenait d une certaine manière à déplacer le problème vers les couches Système. On rejoignait là une des préoccupations importantes d équilibrage de charge. Informellement, le problème de l ordonnancement consiste à optimiser l exécution sur des ressources limitées d un graphe qui représente une application ou des processus. L apparition des architectures à mémoire distribuée où les communications ne sont plus simplement des mouvements internes sur la mémoire (souvent négligeables), mais deviennent un facteur prépondérant dans la performance, a fait évoluer les modèles d ordonnancement (Bampis et al., 1997). Le plus répandu est le modèle délai (voir section 6.1). L idée est d ajouter un délai de communication entre deux tâches allouées sur des unités de calcul différentes. On voit bien ici comment le choix de l allocation influence l ordonnancement. En général, les communications peuvent être recouvertes par du calcul si une tâche est disponible localement. Pendant plus d une décennie, les communications ont ainsi été prises en compte explicitement et l école française a été une des plus actives sur ce thème. Dans le modèle de base introduit par Rayward-Smith, les temps de communication étaient unitaires, mais de nombreuses variantes ont été proposées. En particulier, si les temps de communication sont affines (start-up plus un terme proportionnel au volume de données à transférer), il est amusant ici de remarquer que l on retrouve de façon plus systématique de nombreuses analyses menées quelques années auparavant (Leighton, 1992).

Les riches heures de l ordonnancement 1027 On a continué à raffiner le modèle délai pour se rapprocher encore des caractéristiques physiques des architectures parallèles. Un des achèvements les plus aboutis est le modèle LogP (Drozdowski, 2009). L idée est de distinguer les phases élémentaires dans les opérations de communication (empaquetage, transfert sur le réseau, réception) et de considérer une latence constante pour tous les messages jusqu à une certaine taille. Deux communications successives sur le même processeur doivent attendre un certain temps (gap). On retrouve le modèle délai pour les valeurs particulières de surcoût d empaquetage-réception et sans gap. Malheureusement, les analyses sur de quelques structures particulières de graphes ont montré les limites de ce modèle. Les problèmes pour les modèles à communications explicites comme LogP deviennent rapidement trop sophistiqués et donc, pratiquement impossibles à résoudre efficacement. Par exemple, le problème d ordonnancer un simple graphe Fork avec des temps d exécution quelconques sur un nombre non borné de processeurs identiques est déjà NP-difficile! De plus, les meilleurs facteurs d approximation connus sur ces modèles dépendent des paramètres du problème, en particulier, il n existe pas de garantie constante pour des grands temps de communication. Dans ces conditions, déterminer le meilleur ordonnancement devient hasardeux. On peut toujours utiliser les algorithmes de liste dont le principe est détaillé plus loin, mais la qualité du résultat n est pas toujours garantie... 2.4. Modèles alternatifs On vient de voir que la voie qui consiste à raffiner les modèles à communications explicites avait en quelque sorte conduit à une impasse pour l ordonnancement. C est pourquoi on a eu recours à des solutions alternatives que nous allons rapidement présenter et discuter. Un des modèles les plus significatifs est BSP (Bulk Synchronous Programming), apparu à la fin des années 1980. Il était destiné à faire un pont entre les architectures et les modèles d exécution. Le principe est d organiser les tâches en étapes de calcul pur (super-steps) séparées par de grosses barrières de synchronisation. Ainsi, le modèle peut être considéré du point de vue théorique comme une PRAM à gros grain (Cosnard, Trystram, 1993). Du côté pratique, les algorithmes écrits en BSP sont faciles à implémenter et conduisent à de bonnes performances pourvu que le découpage en super-steps soit bien adapté. Un autre intérêt de ce modèle est qu il est associé à un modèle de coût relativement simple à évaluer. Actuellement, des articles faisant référence à ce modèle sortent régulièrement. Il pourrait en particulier connaître une renaissance avec la programmation sur les accélérateurs de type GPU. L idée restant la même : contraindre l écriture des programmes pour obtenir une structure plus simple à paralléliser en particulier en regroupant les communications. Notons également que ce modèle est très en vogue actuellement dans la communauté du cloud computing (Malewicz, 2009).

1028 TSI. Volume 31 n o 8-9-10/2012 L autre modèle alternatif important est celui des tâches parallèles. Partant du constat que la gestion explicite des communications au niveau fin d un programme rendait le problème vraiment difficile, ce modèle propose de changer de granularité en considérant des tâches plus grosses, elles-mêmes parallélisables, sans se préoccuper des caractéristiques internes trop fines. On distingue deux types de tâches parallèles : les tâches rigides (pour lesquelles le nombre de processeurs alloués est fixé à l avance) et les tâches modelables (lorsque ce nombre est variable) (Feitelson, 2010). La figure 1 présente un exemple d ordonnancement de tâches parallèles rigides indépendantes sur une grappe de processeurs. Pour les tâches modelables, des algorithmes d approximation efficaces ont été développés (Leung, 2004). Figure 1. Exemple d ordonnancement d applications (tâches parallèles rigides). Les niveaux de gris correspondent à différents utilisateurs De nombreuses recherches ont aussi été menées pour des classes d applications particulières. Une des plus importantes est sans doute les tâches divisibles (divisible load ou la variante de bag of tasks). Ceci correspond à des applications constituées d un grand nombre de tâches élémentaires indépendantes. Cette structure particulière permet de simplifier l analyse et de se focaliser sur certains points (comme la topologie de communications). On distingue le comportement transitoire et le régime permanent. On s intéresse alors à de nouveaux objectifs comme la minimisation du throughput qui représente le débit (nombre de tâches effectuées par unités de temps). Des détails peuvent être trouvés dans (Robert, Vivien, 2009). Une discussion plus approfondie portant sur une comparaison des différents modèles est présentée dans (Trystram, 2001). 3. Résultats classiques en ordonnancement 3.1. Préliminaires A l apparition des premiers calculateurs parallèles, les utilisateurs ont développé leurs codes en les optimisant au cas par cas, sans référence explicite au domaine de la recherche opérationnelle. A l époque, on les a parfois accusés de réinventer la roue, ce qui n était pas toujours faux... Avant de présenter le problème central de l ordonnancement, voyons comment sont représentées les applications. On utilise généralement un graphe G = (V, E)

Les riches heures de l ordonnancement 1029 dont les sommets V correspondent aux instructions (ou à un grain plus grossier des procédures) et les arêtes E représentent les liens entre ces tâches (associés au volume des données à transférer). Il existe plusieurs variantes : statique lorsque la structure, les opérations et le volume des calculs sont connus a priori (par exemple pour la parallélisation de composants de bibliothèques numériques (Cosnard, Trystram, 1993)) ou graphes à flots de données (data flow) construits dynamiquement où les tâches se découvrent au fur et à mesure du déroulement des calculs. Notations. La plate-forme d exécution cible est composée de m ressources de calcul identiques (que l on appellera processeur pour simplifier). Supposons que l on cherche à paralléliser une application composée de n tâches séquentielles de durées p j pour 1 j n. Les tâches sont liées par une relation de précédence, c est une relation d ordre partiel qui représente les contraintes de chronologies entre les tâches. Si certaines tâches ne sont pas disponibles dès le début, on parle de release dates. On suppose ici que toutes les données sont connues à l avance (off-line). On note p max le temps d exécution de la plus grande tâche. Le problème de l ordonnancement revient à résoudre deux questions : l allocation des tâches aux processeurs et leur séquencement (date d exécution). Plus formellement : DÉFINITION 1. Ordonnancer un système de tâches, c est déterminer les deux applications π et σ où π associe un processeur à chaque tâche et σ leur associe un temps de début d exécution. Parmi tous les ordonnancements possibles, on cherche à déterminer un ordonnancement réalisable (c est-à-dire qui satisfasse les contraintes) ayant le temps d exécution global le plus petit possible. Le makespan, noté C max, est défini comme le maximum des temps de complétion C j (c est-à-dire, le temps où toutes les tâches sont terminées) C max = max j=1,...,n (σ(j) + p j ). La figure 2 illustre ces notions. p j processeur π(j) j r j σ(j) C j d j temps Figure 2. Illustration d un ordonnancement (fonctions π et σ). La tâche j est soumise à la date r j et elle a une date d échéance d j La faisabilité de l ordonnancement est donnée par les contraintes suivantes : σ(j) σ(i) + p i + γ(i, j) pour tous les couples de tâches (i, j) E (telles que i précède j).

1030 TSI. Volume 31 n o 8-9-10/2012 Cette expression traduit simplement le fait que la tâche j ne peut commencer son exécution que lorsque i est terminée. Dans le cas de processeurs hétérogènes, le temps d exécution dépend du processeur π(i) sur lequel est allouée la tâche. Les temps de communication peuvent être paramétrés selon le support d exécution sous-jacent. Par exemple, dans la version simple du modèle délai à temps de communication unitaires, on a γ(i, j) = 1 i et j tels que π(i) π(j), dans le modèle LogP, on distingue les surcoûts pour l empaquetage et le désempaquetage des messages plus la latence de traversée du réseau d interconnexion : γ(i, j) = O send +L+O rec. Le modèle général étant le modèle affine β+l i,j τ avec un temps d initialisation (start-up β) et un facteur proportionnel à la taille des messages (où τ est l inverse de la bande passante du lien). 3.2. Classification des problèmes Le problème central précédent est une base que l on peut décliner selon les problèmes cibles. Une manière commode pour présenter et manipuler les nombreuses variantes est d utiliser la notation dite à trois champs α β γ où chaque champ représente une caractéristique du problème (Lawler et al., 1982), plus précisément, α représente les diverses ressources : on distingue les ressources identiques (α = P ) fixées, arbitraires non fixées ou non bornées, uniformes, hétérogènes ou dédiées ; β contient les hypothèses sur les tâches et les contraintes imposées sur l exécution. On y décrit le type d applications ciblées : on distingue par là la structure (qualitative) et les valeurs des données (quantitatives) ; γ précise les fonctions objectifs. Historiquement, beaucoup de travaux concernent le makespan (maximum des temps de complétion), c est d ailleurs essentiellement ce que nous étudions dans cet article, mais les performances importantes des systèmes actuels ont conduit à diversifier de plus en plus les objectifs étudiés. Ainsi, on étudie aussi la fiabilité que l on cherche à maximiser ou la consommation énergétique que l on cherche à minimiser. Notons que l optimisation simultanée de plusieurs objectifs est un domaine en pleine expansion depuis quelques années. Par exemple, Q tree, p j = 1 Cmax correspond à ordonnancer sur un nombre arbitraire de machines uniformes (champ Q) une application dont la structure des tâches est un arbre (tree) avec des tâches unitaires (p j = 1). Enfin, on vise à minimiser le makespan (Cmax). On pourrait également rajouter des caractéristiques pertinentes comme le contrôle (il est en général centralisé, mais on cherche de plus en plus à concevoir des algorithmes efficaces avec contrôle décentralisé) ou la diversité des utilisateurs (traditionnellement, les utilisateurs sont tous considérés de la même manière, ce qui se reflête dans la fonction objectif et l on cherche plutôt à optimiser le comportement global du système que celui de chaque utilisateur. Cette dimension nouvelle est de plus en plus considérée dans les travaux récents).

Les riches heures de l ordonnancement 1031 4. Cas particulier des tâches indépendantes Afin d illustrer la méthode de résolution, considérons le problème central le plus simple possible qui consiste à ordonnancer n tâches indépendantes sur un nombre arbitraire de processeurs identiques en minimisant le makespan C max. En utilisant la notation à trois champs précédente, il est noté P Cmax. 4.1. Complexité Il est facile de remarquer que ce problème est NP-difficile au sens faible pour 2 machines (il est en effet équivalent à une 2-Partition de l ensemble des entiers qui sont les temps d exécution des tâches). On peut aller un peu plus loin en montrant qu il est NP-difficile au sens fort pour un nombre arbitraire de processeurs. Ce problème peut se réduire à partir du problème 3-Partition qui est rappelé ci-dessous (Garey, Johnson, 1979) : Instance. Un entier B et un ensemble fini de 3n entiers tels que i B 4 < i < B 2 Question. Existe-t-il une partition en n sous-ensembles S j de 3 entiers telle que j i S j i = B? La contrainte de taille sur les indices i impose qu il y a exactement trois entiers par ensemble S j. La réduction consiste à fixer le nombre de processeurs m = n et considérer 3n tâches indépendantes, chaque entier correspondant au temps d exécution d une tâche à ordonnancer. L ordonnancement optimal a un makespan égal à B où chaque processeur exécute 3 tâches de chaque sous-ensemble. De plus, comme nous le verrons à la section 5.1 en présence de contraintes de précédence, le problème est NP-difficile au sens fort à partir de 2 machines. Comme le problème est difficile, on ne peut attendre de solutions exactes pour des instances trop grandes. On cherche alors à concevoir des algorithmes efficaces, en particulier ceux dont on peut borner le rapport à l optimal dans le pire des cas. Pour cela, on introduit la mesure suivante (Hochbaum, 1995). DÉFINITION 2. Le rapport d approximation d un algorithme A pour un problème de minimisation est défini de la façon suivante : ρ A = inf{r 1 tel que ρ A (I) r} pour toutes les instances I du problème où le terme ρ A (I) est le rapport de la valeur de l objectif de A à l optimal pour l instance I : ρ A (I) = ω A(I) ω (I) Comme le problème P Cmax est difficile, la plupart des variantes plus sophistiquées seront aussi NP-difficiles (avec précédences, avec communications, pour des processeurs non identiques, pour des tâches parallèles, etc.). Pour un nombre constant de processeurs, le problème admet un schéma d approximation polynômial (PTAS) c est-à-dire un rapport d approximation 1 + ɛ dont la complexité est polynomiale en

1032 TSI. Volume 31 n o 8-9-10/2012 1 ɛ. Notre objectif est de concevoir des algorithmes de faible coût en gardant un bon rapport d approximation. En particulier, il existe une recette générale que nous allons développer dans la suite et analyser dans différents contextes : les ordonnancements de liste (Leung, 2004 ; Sinnen, 2007). 4.2. Algorithmes de liste Dans cette section, nous détaillons le principe et l analyse de ce schéma algorithmique général, puis nous montrons comment le généraliser sous différentes hypothèses plus générales. Principe. L algorithme de liste de Graham dans sa forme originale date de 1969, il est basé sur une liste des tâches prêtes. On pioche dans cette liste tant qu il y a des ressources (processeurs) libres. Cet algorithme n est pas optimal, mais il possède une garantie dans le pire des cas (facteur d approximation constant égal à 2). La preuve est simple, mais elle mérite que l on s y arrête car la plupart des extensions suivent le même schéma. PROPOSITION 3. L algorithme de liste est une 2-approximation. Preuve. La preuve est basée sur un argument géométrique sur le diagramme de Gantt (ressources-temps) qui est schématisé dans la figure 3. On exprime que la surface du rectangle global est égale à la surface des tâches plus celle des temps d inactivité, soit m.c max = W + S idle (où W = Σ j=1,n p j ) et S idle est la surface cumulée de tous les moments d inactivité (en gris sur la figure 3). p max m k C max Figure 3. Ordonnancement de liste pour des tâches indépendantes Il existe deux bornes inférieures triviales de la durée d un ordonnancement : Cmax W m et C max p max

Les riches heures de l ordonnancement 1033 Le premier terme de la somme C max = W m + S idle m correspond exactement à la borne inférieure sur le travail W. Borner le second terme n est pas difficile, il suffit de remarquer que suivant le principe de liste, les moments d inactivité se trouvent tous regroupés à la fin. Considérons une des tâches qui se termine en dernier (la tâche k sur la figure 3). Dans le pire des cas, seul le processeur qui exécute k est actif, ainsi S idle (m 1)p k (m 1)p max. Compte tenu que p max est une borne inférieure de l optimum, on obtient finalement : C max (1 + m 1 m )C max 2Cmax. Remarquons que dans le pire des cas, les deux bornes s équilibrent et se cumulent, d où le facteur 2. De plus, la borne de 2 est atteinte pour cet algorithme. Plus généralement, remarquons que l algorithme de liste est générique et simple à mettre en œuvre. Dans le cas de tâches indépendantes, le principe de liste garantit que les temps d inactivité sont regroupés à la fin. Ceci permet d améliorer la borne d approximation de 2 si l on place à la fin les petites tâches. C est l idée derrière la politique LPT (Largest Processing Time) qui trie les tâches par temps d exécution décroissants avant de les ordonnancer par l algorithme de liste (Leung, 2004). Sans perte de généralité, on renumérote les tâches dans cet ordre, p n désigne la plus petite tâche. On peut alors démontrer le résultat suivant. PROPOSITION 4. LPT est une 4 3 -approximation. Preuve. L analyse de ce résultat vient de ce que l algorithme est optimal pour un petit nombre de tâches. On considère la tâche qui termine en dernier que l on note k comme précédemment et on élimine les tâches d indices supérieurs (ici, 10 et 11 sur la figure 4 de gauche). On considère alors deux cas : C max < 3p k. Ici, chaque processeur a au plus 2 tâches à exécuter dans l instance réduite. Il n est alors pas difficile de montrer que la solution est optimale. C max 3p k. Comme dans la précédente preuve, on décompose l ordonnancement en deux phases (pleine activité suivie d une zone avec des temps d inactivité). Dans le pire des cas, l inactivité est majorée par (m 1)p k. La surface totale du diagramme de Gantt est m.c max = W + S idle. Ainsi, C max = W m + S idle m C max + (m 1)p k m. Comme p k C max 3, on obtient en reportant dans l expression précédente : C max C max + (m 1)C max 3m ( 4 3 1 3m )C max A partir de la situation simple que l on vient de décrire, on peut faire le bilan suivant sur l algorithme de liste :

1034 TSI. Volume 31 n o 8-9-10/2012 1 10 2 9 π(k) k 3 8 4 5 6 7 11 Figure 4. Adaptation de la preuve de l algorithme de liste général à LPT t C max il est peu coûteux (outre un tri initial si l on considère des priorités, l algorithme est linéaire en nombre de tâches) ; il est asymptotiquement optimal pour un grand nombre de tâches, car p max devient alors arbitrairement petit au regard du makespan ; enfin, il fonctionne indifféremment pour une gestion de la liste statique (offline) ou dynamique (on-line). Dans ce dernier cas, la garantie de LPT pour des tâches indépendantes passe à 3 2 avec une borne inférieure en 1.347 (i.e. aucun algorithme en-ligne ne peut avoir une meilleure borne) (Chen, Vestjens, 1997). Le rapport est un peu plus mauvais que LPT, mais reste acceptable. Ici aussi, la borne est atteinte pour une famille particulière d instances. 4.3. Schémas d approximation polynômiaux Pour un nombre constant de processeurs, le problème P m Cmax admet un PTAS (schéma d approximation polynômial en 1 ɛ où ɛ est une valeur fixée). Plus précisément, (Hochbaum, Shmoys, 1988) proposent une famille d algorithmes d approximation A ɛ qui réalisent chacun une approximation en (1 + ɛ) en temps appartenant à O( n 1 ɛ ɛ 2 ). Cet algorithme est très coûteux lorsque l on cherche des valeurs d approximation proches de 1. Par exemple, si l on cible comme pour LPT une 4 3 -approximation (correspondant à ɛ = 1 3 ), le PTAS est en O(n9 )! Nous allons développer rapidement dans cette section un autre PTAS avec un rapport d approximation aussi près que possible de l optimal. Ce résultat est classique, il est coûteux, mais aussi plus simple à comprendre à partir de l analyse que nous avons faite pour LPT. L idée de base pour construire le PTAS consiste à essayer systématiquement toutes les positions possibles des q plus grandes tâches. Soit ɛ un réel positif, la valeur de l entier q sera fixée plus tard en fonction de ɛ et du nombre de processeurs m. On suppose que les tâches sont triées par temps d exécution décroissants. Le PTAS consiste en deux phases successives : on génère tout d abord en brute force toutes les partitions possibles des q premières tâches en m

Les riches heures de l ordonnancement 1035 parties (ce qui coûte de l ordre de mq m!. C est polynômial si q est fixé), puis on complète l ordonnancement obtenu en appliquant LPT sur les n q tâches restantes. On se place dans le cas où la valeur du makespan du PTAS est strictement supérieure à celle du makespan de la première phase (sinon, le PTAS est tout simplement optimal). Comme pour les analyses précédentes, on considère la dernière tâche à être exécutée (notée k), on a alors l expression suivante : C max C max + (1 1 m p k) En considérant la charge des processeurs (nombre de tâches allouées) après la première phase, on peut montrer : p k (1 + q m )C max En reportant dans la majoration de C max, on obtient : C max (1 + 1 1 m 1+ q m )C max On choisissant q = 1 ɛ ɛ m, on obtient un rapport d approximation en 1 + ɛ. 5. Graphes avec précédences 5.1. Complexité Le cas des tâches indépendantes que nous venons d exposer correspond soit à des grosses applications, soit à un cas particulier pas toujours réaliste. A grain fin, la plupart des codes parallèles ont des instructions dont l exécution dépend de résultats d autres instructions. Comme évoqué précédemment, la complexité du problème est NP-difficile au sens fort dans le cas de tâches avec précédences. La preuve mérite que l on s y arrête. PROPOSITION 5. P prec Cmax est NP-difficile au sens fort. Preuve. Remarquons tout d abord que le problème appartient évidemment à N P. Nous allons le réduire à partir du problème 3-Partition (introduit à la section 4.1) pour m = 2. Pour cela, considérons le graphe de précédence particulier décrit à la figure 5 composé d une succession de n 1 diamants et de 3n tâches indépendantes de durées p i. Ces dernières tâches correspondent à l instance de 3-Partition cherchée. Les n tâches de jonctions des diamants ont une durée égale à B, les autres tâches parallèles deux à deux sont de durées unitaires. Pour ordonnancer optimalement l ensemble des tâches, il n y a pas d autre solution que d exécuter les blocs de diamants au plus tôt, comme le montre la figure 6. On peut montrer une borne d inapproximation en 4 3, sauf si P = N P.

1036 TSI. Volume 31 n o 8-9-10/2012 (n 1) 1 1 1 B B B... B B 1 1 1 Figure 5. Graphe de base pour la réduction proc.1 proc.2...... B 1 B 1 1 B B Figure 6. Gantt final d un algorithme optimal. Les tâches grisées correspondent à la 3-Partition B 5.2. Résolution par algorithme de liste Le principe de l algorithme de liste reste valide et efficace pour ordonnancer des tâches avec précédences. Plutôt que de disposer de la liste de toutes les tâches au début, la liste sera mise à jour au fur et à mesure. Le facteur d approximation de cet algorithme reste le même que précédemment, mais la preuve est un peu plus délicate. PROPOSITION 6. L algorithme de liste est une 2-approximation pour P prec Cmax. Preuve. Comme pour le cas des tâches indépendantes, l idée repose sur un argument géométrique sur la surface du diagramme de Gantt m.c max = W +S idle. Cependant, la preuve est plus difficile car les relations de précédence peuvent induire des temps d inactivité n importe où et pas seulement à la fin. On dispose de deux bornes inférieures : W m C max et le chemin critique, c està-dire, la plus longue chaîne du graphe (notée t ). Sur l exemple du graphe de la figure 8, la chaîne de tâches (4)-(5)-(8)-(10) constitue un des chemins critiques. La principale difficulté ici est de borner le second terme de cette somme (et donc, S idle ). Pour cela, on considère une des tâches qui se termine en dernier (par exemple la tâche (10) sur l exemple de la figure 9) et on construit à rebours une chaîne de tâches sur chaque intervalle où il existe un temps d inactivité, comme indiqué dans la figure 7. La dernière tâche est forcément successeur d une tâche en cours d exécution dans l intervalle précédent où il y a un temps d inactivité, sinon, d après le principe de liste,

Les riches heures de l ordonnancement 1037 Figure 7. Principe de construction d une chaîne sur les périodes d inactivité elle aurait été exécutée à ce moment-là. Ainsi, en considérant qu il y a au plus (m 1) processeurs inactifs, on obtient S idle (m 1).L où L est la longueur de la chaîne que l on vient de construire. Bien sûr, cette longueur est inférieure au chemin critique t (qui est la plus longue des chaînes) qui est une borne inférieure du makespan optimal. Au final, on obtient : C max W m + m 1 m (2) (3) (4) (1) (5) (8) t Cmax+ m 1 m C max (2 1 m )C max Figure 8. Exemple de graphe de précédence. (3) et (8) sont de durées unitaires, (1), (5), (6) et (10) de durées 2 et (2), (4), (7) et (9) de durées 3 (6) (7) (9) (10) (1) (2) (5) (8) (10) (6) (9) (3) (4) (7) Figure 9. Ordonnancement de liste du graphe de la figure 8 5.3. Pour aller un peu plus loin... L algorithme de liste est simple, rapide et possède une garantie de performance. Le principe reste valable pour d autres objectifs standard comme la somme des C i (ici, la meilleure priorité de liste est d ordonnancer les tâches par temps d exécution croissants, c est-à-dire l inverse de LPT) ou les retards dans le cas d ordonnancements avec dates d échéances (Leung, 2004). La limite de ces algorithmes vient de leur caractère glouton, où une fois qu une décision est prise, elle ne sera jamais remise en cause dans la suite.

1038 TSI. Volume 31 n o 8-9-10/2012 On peut contrer cela en considérant des algorithmes simples par approximation duale (Hochbaum, 1995). L idée ici est de fixer une borne pour le makespan (un guess noté λ) que l on ajustera par dichotomie. En effet, si la valeur de l optimal est connue, on peut utiliser des algorithmes de bin packing qui possèdent de bonnes bornes d approximation (par exemple FFD First Fit Decreasing) (Coffman et al., 1978). Ici, on cherche le nombre minimum de boîtes (bins) pour placer n objets. Rappelons que l algorithme FFD approxime asymptotiquement la solution optimale à un facteur 11 9 = 1.22. Plus précisément, N 11 9 N + 4 où N est le nombre de boîtes. On voit clairement une relation entre la valeur du makespan du problème d ordonnancement de n tâches indépendantes et le nombre de boîtes (nombre de processeurs m). Considérons la borne inférieure naturelle du problème : LB = max( W m, p max) et fixons une borne supérieure UB = max(2 W m, p max) où W = Σ 1 j n p j. On peut construire une heuristique garantie (appelée multifit) en appliquant itérativement FFD par dichotomie sur les bornes LB et UB, la valeur de λ correspond au milieu de l intervalle [LB, U B]. Si FFD nécessite plus de m processeurs, la solution n est pas réalisable, et on relance alors FFD sur un intervalle restreint à [ UB LB 2, UB]. Sinon, on peut améliorer la valeur de λ en relançant FFD sur [LB, UB LB 2 ]. On peut alors montrer la borne finale obtenue après k itérations : C max (k) ( 11 9 + 1 2 k )C max Cet algorithme n est plus un glouton, il possède une meilleure borne asymptotique que LPT, mais il est aussi un peu plus coûteux (il nécessite k appels à FFD). 6. Extensions Le principe des algorithmes de liste peut être étendu à de nombreuses autres situations que celles que nous avons présentées (processeurs identiques et tâches indépendantes ou avec précédences). De plus, dans la plupart des cas il est possible de prouver des garanties sur les facteurs d approximation. Même dans les cas où ces facteurs sont importants (voire non bornés), le comportement est en général très bon en moyenne. 6.1. Précédences et communications explicites Dans le cas de tâches avec précédences et avec communications, le facteur d approximation dépend des communications. La figure 10 illustre schématiquement pourquoi (un délai est introduit entre les tâches (4) et (5) et entre (5) et (9)). Du point de vue géométrique à partir du diagramme de Gantt, la surface des temps d inactivité S idle est constituée de deux types de slots : les temps d inactivité structurels dus aux précédences (comme précédemment, en gris sur la figure) et ceux induits par l attente de communications (en noir sur la figure). L analyse de l algorithme de liste est la même que dans le cas sans communication : on construit de proche en

Les riches heures de l ordonnancement 1039 (1) (5) (8) (10) (2) (6) (9) (3) (4) (7) Figure 10. Ordonnancement de liste pour des tâches avec précédences et délais de communication (en noir) proche une chaîne de tâches à partir de la dernière tâche le long des périodes d inactivité. Comme le temps d attente peut provenir des communications, il nous faut rajouter un terme supplémentaire. On obtient dans le pire des scénarios la majoration suivante : C max W m + m 1 m.t + γ. où γ est le maximum des sommes des temps de communications sur une chaîne du graphe. Pour les petits temps de communication (c est-à-dire si (i, j) γ(i, j) min(p j )), on peut borner le dernier terme par un facteur constant de C max. Par contre, pour des grands temps de communication, ce terme n est pas borné (le meilleur facteur connu est en log de la plus grande communication). En complément à ces analyses algorithmiques, plusieurs implémentations pratiques ont été proposées. Une des plus utilisées est sans doute l algorithme de liste ETF (Earliest Task First) dont le principe consiste à chercher la meilleure date d exécution possible parmi les tâches prêtes : q (processeur) max j (σ(j) + p j + γ(i, j)) pour (i, j) E et π(j) q. Le temps de cet algorithme est en O(m.n 2 ). 6.2. Processeurs non identiques Considérons maintenant le cas d une machine parallèle dont les processeurs sont hétérogènes. On distingue deux configurations selon que les processeurs ont des vitesses différentes uniformes ou sans liens unrelated (une opération peut prendre plus ou moins de temps sur tel ou tel processeur). Les deux problèmes correspondants sont connus dans la littérature respectivement comme Q Cmax et R Cmax. Bien sûr, en tant que généralisation de P Cmax, ces problèmes sont au moins aussi difficiles. Nous présentons rapidement les principaux résultats dans l esprit du reste de l article. Sur processeurs uniformes, une tâche j aura un temps d exécution qui dépend p du processeur où elle est allouée : j v où v π(j) i est la vitesse du processeur i. Pour m fixé, il existe un PTAS basé une sur technique d approximation duale (obtenu à partir du problème de bin packing avec des boîtes de tailles variables) (Hochbaum, Shmoys, 1988). On peut généraliser l algorithme de liste LPT. L analyse de la performance est plus technique, elle conclut à un rapport d approximation compris entre 1.52 et 5 3 (Friesen, 1987). Pour des tâches avec précédence, on perd la garantie de performance (facteur

1040 TSI. Volume 31 n o 8-9-10/2012 d approximation constant). Ce cas est plus difficile que pour des processeurs identiques car il faut redéfinir la notion de chemin critique (ici, elle dépend de l allocation). Une solution possible est de considérer une vitesse moyenne. Nous invitons le lecteur intéressé à consulter l article de (Chekuri, Bender, 2001). L idée est de décomposer le graphe en chaînes de longueurs décroissantes et d allouer les plus grandes aux processeurs les plus rapides. Pour des processeurs hétérogènes quelconques, on peut montrer que le problème n est pas approximable à moins d un rapport 3 2 (sauf si P = N P) (Lenstra et al., 1990). Par contre, il existe un PTAS coûteux pour m fixé, basé sur une technique d arrondi d une formulation en programme linéaire en nombres entiers. Pratiquement, il existe une heuristique sans garantie pour le cas de tâches avec précédences (Topcuoglu et al., 1999). HEFT (Heterogeneous Earliest Finish Time) procède en deux phases : calcul de priorités sur les tâches en fonction de leurs profondeurs dans le graphe, puis sélection des processeurs sur lesquels la date de terminaison est la plus petite. HEFT n est pas un algorithme de liste au sens où certaines ressources de calcul peuvent rester inactives bien qu une tâche soit disponible. Pour terminer cette section, arrêtons-nous un moment sur le problème d ordonnancement sur des plates-formes parallèles mixtes (multicœurs avec accélérateurs type GPU). Il existe beaucoup de résultats récents qui étudient des implémentations pour des applications particulières et conduisent parfois à de bonnes bornes théoriques. L ordonnancement n est pas toujours explicite. L enjeu est de proposer des ordonnancements efficaces qui prennent en entrée des structures quelconques de tâches. Le modèle de machines consiste en deux familles de processeurs identiques (m processeurs classiques et k GPU). C est un cas particulier du problème R prec Cmax pour lequel on pourrait attendre des bornes plus fines. 6.3. Tâches parallèles (communications implicites) Le principe de liste s applique également bien aux tâches parallèles, c est-à-dire aux tâches nécessitant plusieurs processeurs. Comme nous l avons évoqué à la section 2.4, il existe plusieurs types de tâches parallèles selon la façon dont est déterminé le nombre de processeurs. Si ce nombre est fixé à l avance (comme par exemple dans une application écrite en MPI), les tâches sont rigides. Il peut alternativement être déterminé par l algorithme d ordonnancement, on parle alors de tâches modelables. Si de plus, ce nombre peut évoluer au cours de l exécution, la tâche est dite malléable. Nous allons passer en revue les principaux résultats d approximabilité sous ces différentes hypothèses. 6.3.1. Tâches parallèles rigides En utilisant la notation à trois champs, ce problème se note P p j, size j Cmax. Le nombre de processeurs nécessaires à l exécution de la tâche j est noté q j. Il faut rajouter une contrainte supplémentaire par rapport au cas standard des tâches séquen-

Les riches heures de l ordonnancement 1041 tielles : t > 0, Σ j It q j m où I t = {i telle que σ(i) t σ(i)+p i } (pour chaque slot de temps, les tâches en cours d exécution utilisent au plus m processeurs). Il y a deux façons d étudier ce problème : comme un ordonnancement avec contraintes de ressources supplémentaires ou comme un problème de strip packing où les tâches rigides j sont vues comme des rectangles de côtés p j par q j. La différence vient essentiellement de la contrainte de contiguïté dans les ressources que l on impose dans le strip packing. Le problème est inapproximable polynômialement à moins de 3 2. Dans le premier cas, (Garey, Graham, 1975) ont proposé un algorithme de liste dans le cas de multiples contraintes de ressources dont la démonstration a été simplifiée par une analyse continue (Eyraud-Dubois et al., 2007). La borne d approximation de 2 est conservée pour des tâches indépendantes. Dans le second cas, il existe également des algorithmes 2-approchés. Comme précédemment, on peut raffiner les approximations en construisant un schéma en 3 2 + ɛ coûteux. On peut montrer des propriétés de dominance intéressantes pour des politiques particulières. Par exemple, HF (Highest First) est la politique qui alloue les tâches par ordre décroissant des q j, c est une généralisation de LPT à la dimension des ressources. Un tel ordonnancement est constitué de deux phases successives où la plateforme parallèle est d abord chargée à plus de 50 %, puis, à moins de 50 % (Pascual et al., 2009). Malheureusement, ceci ne permet pas semble-t-il de réduire le facteur d approximation. On peut étendre ces résultats au cas de plates-formes hiérarchiques, composées de k multicœurs de n i processeurs chacunes. La figure 11 montre une allocation de tâches dans ce cas. Ce problème est plus difficile, il est notamment inapproximable à moins d un facteur 2 de l optimal. On peut construire une 5 2-approximation (Bougeret et al., 2010b) en appliquant une technique d approximation duale ou même un schéma en 2 + ɛ (Bougeret et al., 2010a). Figure 11. Allocation initiale de tâches parallèles rigides et ordonnancement local sur une plate-forme hiérarchique Par contre, un algorithme glouton très efficace peut être appliqué en pratique comme le montre la figure 12, mais pour lequel il n existe pas de borne théorique garantie dans le cas général. L idée ici est d ordonner les multicœurs depuis celui qui possède la charge minimale jusqu au plus chargé et de la répartir en équilibrant les

1042 TSI. Volume 31 n o 8-9-10/2012 charges deux à deux de proche en proche par un simple glouton. Sur l exemple de la figure 11, on commence ainsi par répartir les tâches de la machine 5 vers la 4, puis les tâches de fin de la machine 3 sur 4 et 5, etc. C est l algorithme ILBA (Iterative Load Balancing) qui est décrit et analysé dans (Pascual et al., 2009). Figure 12. Ordonnancement final en appliquant ILBA 6.3.2. Tâches parallèles modelables Passons maintenant au cas de tâches qui peuvent s exécuter en parallèle sur un nombre quelconque de processeurs. Ce problème a été étudié sous l hypothèse réaliste de monotonie des tâches, c est-à-dire que le temps d exécution diminue si l on considère plus de processeurs, mais le travail augmente car on a alors plus de synchronisations et de communications. Les algorithmes connus procèdent en deux phases : détermination du nombre adéquat de processeurs pour chaque tâche, puis ordonnancement rigide correspondant. Le meilleur algorithme connu pour ce problème est une approximation duale basée sur un algorithme de sac à dos pour sélectionner les tâches à exécuter dans deux étagères successives (Mounie et al., 2007). Une technique analogue a conduit avec succès à des approximations pour le cas de tâches parallèles avec précédences. 6.3.3. Retour sur le volet pratique Nous avons montré jusqu à présent en quoi le principe de liste était universel dans le sens où il s adapte à la plupart des situations, y compris pour les tâches parallèles rigides. Dans la plupart des cas, il possède une garantie de performance et se comporte très bien en moyenne. Par contre, il convient de noter que si l on analyse les outils existants, on constate que les algorithmes de liste sont finalement peu employés. Pratiquement, la gestion de ressources des gros systèmes parallèles est très rudimentaire. Les tâches sont soumises en-ligne et l ordonnancement est construit à partir de plusieurs files de priorité qui gèrent les tâches avec une politique très simple du premier arrivé premier servi (FCFS). Au fil du temps, on a imaginé des mécanismes pour en améliorer les performances comme le back filling où l idée est d avancer l exécution d une tâche si cela ne retarde pas d autres tâches plus prioritaires (Feitelson,

Les riches heures de l ordonnancement 1043 2010) (illustrée dans la figure 13). Ces politiques sont arbitrairement mauvaises. On peut en effet facilement construire une instance qui a une garantie de performance non bornée : successions de longues tâches séquentielles et courtes tâches occupant toute la machine. Notons également que dans le cas de tâches séquentielles, FCFS est un algorithme de liste particulier car dès qu un processeur se libère, on pourra toujours exécuter la tâche suivante dans la queue... L avantage de FCFS et ses variantes est clairement la simplicité et une garantie que toutes les tâches soient exécutées (pas de famine), mais c est au prix d une perte conséquente de performance, même si l on bricole toujours de nouvelles fonctionnalités pour s adapter aux évolutions des systèmes (queues multiples par priorités ou par tailles de tâches, etc.). Figure 13. Principe de l algorithme FCFS classique (gauche) et FCFS avec back filling (droite) 6.4. Liste décentralisée et vol de travail La dernière extension que nous présentons ici concerne l impact d un contrôle décentralisé. Le principe même d un ordonnancement de liste nécessite une vision unique centralisée de toutes les tâches. L algorithme de vol de travail (work stealing) introduit par (Arora et al., 1998) est un algorithme en-ligne avec une politique décentralisée où les processeurs qui n ont plus de travail à effectuer localement vont voler des tâches à d autres processeurs. Cette politique est particulièrement bien adaptée aux machines actuelles avec un grand nombre de processeurs regroupés autour de mémoires partagées. L algorithme de vol de travail peut être vu comme un principe de liste décentralisé, où des listes partielles sont délocalisées sur chaque processeur. Il n y a pas de vision globale. Un processeur inactif cherche aléatoirement un processeur cible, puis lui vole le cas échéant une partie des tâches prêtes. Une analyse théorique complète a été faite récemment pour différents scénarios (Tchiboukdjian et al., 2012). La figure 14 montre un diagramme de Gantt obtenu par simulations pour le cas de tâches indépendantes unitaires. Initialement, seul le premier processeur possède des tâches à effectuer. On remarque que rapidement, tous les processeurs ont réussi à voler du travail et qu à la fin de l ordonnancement, il apparaît des temps d inactivité. Même sur un cas aussi simple qu ordonnancer des tâches unitaires indépendantes, on constate que même si les processeurs démarrent rapidement, des temps d inactivités

1044 TSI. Volume 31 n o 8-9-10/2012 apparaissent sporadiquement et de façon de plus en plus importante à mesure que l on s approche de la fin de l ordonnancement. L analyse est élégante (elle est basée sur des fonctions de potentielle adéquates) et conduit à des approximations garanties asymptotiquement : Pour des tâches unitaires, C max W m + 3.24log 2(W ) + 2.59 Pour des tâches indépendantes, C max W m + m 1 m p max + 3.24log 2 (W ) + 2.59 Pour des tâches avec précédences, C max W m + 5.5t + 1 Ces valeurs montrent un comportement proche des bornes inférieures classiques dans le cadre centralisé. Ici encore, le principe de liste glouton est simple et efficace. Figure 14. Diagramme de Gantt d un ordonnancement de vol de travail sur des tâches indépendantes unitaires 7. Conclusion : l ordonnancement aujourd hui 7.1. Quelles leçons retenir? Comme nous l avons montré dans cet article, le domaine de l ordonnancement pour le parallélisme a fait de gros progrès au fil des années. Du côté théorique, les modèles et algorithmes actuels permettent de tenir compte efficacement des nouvelles caractéristiques des plates-formes modernes. Du côté pratique, les ordonnanceurs existants ont aussi été enrichis avec de nouvelles fonctionnalités et sont opérationnels. Nous avons défendu ici l idée qu il est possible d étudier les différentes variantes du problème avec des outils communs à partir de la notion d algorithme de liste. Les analyses suivent le même schéma qui consiste à borner les temps d inactivité par des bornes inférieures. La plupart des extensions sont adaptables et efficaces sur le papier, c est-à-dire compte tenu de conditions souvent idéalisées (bonne connaissance des temps d exécution des tâches, existence d un modèle de communication réaliste, caractéristiques des mémoires et unités de calcul, etc.). Il est indispensable aujourd hui de renforcer le pont entre ces deux approches.

Les riches heures de l ordonnancement 1045 7.2. Les enjeux actuels La première série d enjeux est d ordre scientifique et technique. Elle concerne la prise en compte efficace des nouvelles fonctionnalités pour les ordonnanceurs, tant du point de vue théorique que pratique. En particulier : tenir compte au mieux de la disponibilité sporadique des ressources, réduire l impact des données mal estimées sur la qualité des ordonnancements, concevoir des méthodes adaptées aux ressources hétérogènes et hiérarchiques, renforcer la sûreté des calculs, développer des mécanismes autoconfigurables qui détectent les ressources inutilisées et sont capables de les réallouer, diversifier les objectifs pour gérer des ressources non conventionnelles (voire, optimiser simultanément plusieurs objectifs), prendre en compte l utilisateur dans le dispositif, par exemple en développant des mécanismes d équité. Le second enjeu porte sur l évolution des outils par des méthodes performantes qui ne soient pas trop compliquées pour pouvoir être déclinées et compatibles aux différents niveaux. En effet, le parallélisme est présent à tous les niveaux d une machine sous une forme ou une autre. Les techniques pour le gérer sont souvent différentes et les décisions prises à un niveau ont évidemment des incidences sur les autres. Des mécanismes comme les algorithmes de liste sont de bons candidats, car ils se déclinent facilement et permettent un interfaçage relativement aisé. Remerciements J aimerais exprimer toute ma reconnaissance à mes nombreux co-auteurs avec une mention spéciale à Marin Bougeret et Daniel Cordeiro pour leur relecture assidue et leur retour constructif. Ce travail a été soutenu partiellement par Google. Bibliographie Anderson D., Fedak G. (2006). The computational and storage potential of volunteer computing. In Ccgrid. Arora N., Blumofe R., Plaxton G. (1998). Thread scheduling for multiprogrammed multiprocessors. In Tenth ACM symposium on parallel algorithms and architectures. Bader D. (Ed.). (2007). Petascale computing. CRC press. Bampis E., Guinand F., Trystram D. (1997). Some models for scheduling parallel programs with communication delays. Discrete Applied Maths, vol. 72. Blazewicz J., Ecker K., Plateau B., Trystram D. (Eds.). (2000). Handbook on parallel and distributed computing. Springer Verlag. Bougeret M., Dutot P.-F., Jansen K., Otte C., Trystram D. (2010a). Approximation algorithms for multiple strip packing. In 7th internat. workshop on approximation and online algorithms, vol. 5893. Copenhagen, Denmark, Springer.

1046 TSI. Volume 31 n o 8-9-10/2012 Bougeret M., Dutot P.-F., Jansen K., Otte C., Trystram D. (2010b). A fast 5/2-approximation algorithm for hierarchical scheduling. Springer. Chekuri C., Bender M. (2001). An efficient approximation algorithm for minimizing makespan on uniformly related machines. J. Algorithms, vol. 41. Chen B., Vestjens A. (1997). Scheduling on identical machines: How good is LPT in an on-line setting? OR Letters, vol. 21. Coffman E., Garey M., Johnson D. (1978). An application of bin packing to multiprocessor scheduling. SIAM journal of Computing, vol. 7. Cosnard M., Trystram D. (1993). Algorithmes et architectures parallèles. InterEditions. Culler D., Singh J. (1999). Parallel computer architectures: A hardware-software approach. Morgan Kaufmann. Drozdowski M. (2009). Scheduling for parallel processing. Springer Verlag. Eyraud-Dubois L., Mounie G., Trystram D. (2007). Analysis of scheduling algorithms with reservations. In 18th IEEE international parallel and distributed processing symposium (IPDPS). San Diego, USA. Feitelson D. (2010). Workload modeling for computer systems performance evaluation. available on-line. (last release) Foster I., Kesselmann C. (2004). The grid 2, blueprint for a new computing infrastructure. Morgan Kaufmann. Foster I., Zhao Y., Raicu I., Lu S. (2009). Cloud computing and grid computing 360-degree compared. CoRR. Friesen D. (1987). Tighter bounds for LPT scheduling on uniform processors. SIAM journal of Computing. Garey M., Graham R. (1975). Bounds for multiprocessor scheduling with resource constraints. SIAM journal of Computing, vol. 4. Garey M., Johnson D. (1979). Computers and intractability: a guide for NP-completeness. Freeman NY. Hochbaum D. (Ed.). (1995). Approximation algorithms for NP-hard problems. Chapman and Hall, CRC press. Hochbaum D., Shmoys D. (1988). A polynomial approximation scheme for scheduling on uniform processors: a dual approximation approach. SIAM journal on Computing, vol. 17. Hwang K. (1993). Advanced computer architecture: Parallelism, scalability, programmability. Mc Graw-Hill. Lawler E., Lenstra J., Kan A. R. (1982). Recent development in deterministic sequencing and scheduling: a survey. In Nato advanced study. Reidel pub. company. Leighton T. (1992). Introduction to parallel algorithms and architectures. Morgan Kaufmann. Lenstra J., Shmoys D., Tardos E. (1990). Approximation algorithms for scheduling unrelated parallel machines. Mathematical Programming. Leung J. (Ed.). (2004). Handbook of scheduling. algorithms, models and performance analysis. Chapman and Hall, CRC press.

Les riches heures de l ordonnancement 1047 Malewicz G. (2009). Pregel: a system for large-scale graph processing. In 21st ACM symposium on parallel algorithms and architectures. Mounie G., Rapine C., Trystram D. (2007). A 3/2-dual approximation algorithm for scheduling independent monotonic malleable tasks. SIAM Journal on Computing, vol. 37. Pascual F., Rzadca K., Trystram D. (2009). Cooperation in multi-organization scheduling. Concurency and Computation: Practice and Experience, n o 21. Robert Y., Vivien F. (Eds.). (2009). Introduction to scheduling. CRC-press. Sinnen O. (2007). Task scheduling for parallel systems (A. Zomaya, Ed.). Wiley. Tchiboukdjian M., Gast N., Trystram D. (2012). Decentralized list scheduling. Annals of Operations Research. Topcuoglu H., Hariri S., Wu M. (1999). Task scheduling algorithms for heterogeneous processors. 8th IEEE workshop on Heterogeneous Computing Computing. Trystram D. (2001). Scheduling parallel applications using malleable tasks. In Proceedings of the 15th IEEE international parallel and distributed processing symposium (IPDPS).