Précédent : Environnement exécutif Athapascan-0
Remonter : Résultats nouveaux Suivant :
Outils pour le débogage
et
Participants : J.-L. Roch, M. Castaneda, G. Cavalheiro, M.
Doreille, T. Gautier, B. Plateau, C. Rapine, D. Trystram.
ATHAPASCAN-1 permet une description explicite et dynamique du parallélisme par création asynchrone de tâches parallèles. Pratiquement, ATHAPASCAN-1 se présente comme une interface de programmation impérative (bibliothèque C++) où tout appel de procédure ATHAPASCAN-1 se traduit par la création potentielle d'une tâche parallèle. La création effective dépend de la stratégie de régulation (par exemple, si certains processeurs sont inactifs); sinon, la tâche est exécutée comme un appel de procédure en séquence. Ces procédures sont sans effet de bord et les paramètres effectifs sont soit des valeurs, soit des références à des données globales du programme qui sont traitées comme les données à assignation unique du modèle de calcul dataflow. Les accès effectués sur ces objets définissent les relations de dépendance entre les tâches. Quatre droits d'accès sont offerts : les données admettent des lectures et des écritures (le cas le plus courant qui impose des contraintes de séquencement entre les tâches), ou bien des lectures uniquement (donc potentiellement concurrentes), ou encore des écritures exclusivement et enfin des écritures par accumulation uniquement. La sémantique est que toute lecture d'un objet partagé (i.e. lecture-écriture) voit la dernière écriture dans l'ordre séquentiel d'appel des tâches. Cet ordre est une exécution séquentielle possible du programme ATHAPASCAN-1 correspondant à un parcours en profondeur d'abord du graphe des appels. Des restrictions sur les droits d'accès permettent que des exécutions parallèles (largeur d'abord) respectent la sémantique. De plus, cette sémantique facilite la construction de programmes parallèles corrects (sans d'interblocage).
La création de tâche est asynchrone, car l'instant d'activation de la tâche lors d'une exécution dépend de la satisfaction des contraintes de cohérence sur les données et de la répartition de charge qui peut retarder l'activation d'une tâche voire l'exécuter localement et séquentiellement. Un prototype ATHAPASCAN-1 est en cours de test.
L'interface permet l'interprétation d'un programme sous forme d'un graphe de tâches (graphe macro data-flow). L'exécution d'une tâche est conditionnée par la terminaison d'autres tâches et/ou la disponibilité de données. Nous appelons transitions de telles conditions d'exécution. Une tâche passe à l'état prêt lorsque toutes les transitions qui conditionnent son exécution sont franchies.
La construction du graphe est dynamique et distribuée sur l'ensemble des processeurs. Sur chaque noeud, un état local et partiel de l'application est maintenu. Cet état évolue en fonction des actions des tâches en cours d'exécution sur le noeud. Celles-ci accèdent à des données, créent de nouvelles tâches et de nouvelles données, puis se terminent. L'état local enregistre ces modifications. Cet état évolue aussi à l'initiative de l'ordonnanceur local qui décide des tâches à exécuter parmi les tâches prêtes. C'est lui aussi qui, coopérant avec les ordonnanceurs distants, décide d'exporter (respectivement importer) des tâches. Un module local de gestion des transitions coopère avec ses correspondants distants pour déterminer globalement les transitions franchies. La détermination du franchissement global d'une transition à partir de la détection de franchissements locaux est un algorithme distribué de la classe des algorithmes de détection de terminaison globale.
La qualité d'une stratégie de répartition de charge dépend de la connaissance de l'application (i.e. du graphe de tâches associé) et de la machine d'exécution. Le système est donc ouvert : la stratégie de répartition peut être substituée par une autre qui respecte une même spécification d'interface avec le module de gestion du graphe de tâches d'une part et avec le module de mise en oeuvre des tâches (sous forme de processus légers ATHAPASCAN-0) d'autre part.
Le choix de la stratégie de répartition et les informations de coût se font par annotation du code, et ceci pour chaque tâche. Ces informations peuvent aussi être héritées. Les expérimentations développées sur ATHAPASCAN-0 ont montré la pertinence de telles informations pour répartir efficacement certaines applications, en particulier des algorithmes de Branch and Bound.
Il existe une bibliothèque qui comporte pour l'instant des
stratégies naïves (aléatoire, cyclique) et des stratégies de
répartition justifiées sur le plan théorique par la théorie de
l'ordonnancement en ligne (ordonnancement -compétitif). Ces stratégies cherchent à minimiser
l'inactivité des noeuds (algorithmes de liste, ``work
stealing''). Certaines de ces stratégies utilisent des
informations annotées sur les tâches (coût estimé, priorité ou
localité). L'utilisation de telles informations de coût permet le
calcul, dans un cadre dynamique, d'un ordonnancement qui analyse
le graphe des tâches à exécuter dans un futur proche. Ainsi,
Emmanuel Jeannot (projet REMAP) a intégré dans la bibliothèque de
régulation le code du domaine public DSC (Dominant Sequence
Clustering). Cet ordonnancement devra être testé sur des
applications en calcul scientifique, applications pour lesquelles
il a spécialement été conçu.
Cette bibliothèque doit s'enrichir dans l'avenir. Une perspective est d'offrir une interface de programmation pour différentes politiques, suivant un certain consensus en ce qui concerne l'implantation des algorithmes de répartition en terme de composants.