• Nenhum resultado encontrado

2.6.2 Objectifs et approche

Dans ce manuscrit, nous nous intéressons tout particulièrement à la composition de codes parallèles qui visent à produire un graphe de tâches. L’un des objectifs majeurs de cette approche est de pouvoir composer deux codes parallèles, qui seuls, exploitent efficacement les ressources à disposition et dont la composition engendre une exécution utilisant pleinement toutes les ressources nécessaires. Par exemple, en composant un code limité par la mémoire avec un code de calcul intensif, il est possible d’engendrer un code plus efficace que si chaque code est considéré indé- pendamment, notamment en régulant l’utilisation de la mémoire par l’exécution de tâches de calcul intensif (évitant ainsi la saturation d’une ressource partagée).

Dans les sections 2.2 et 2.3, nous avons vu que les applications HPC exploitent massivement le parallélisme de données afin de pouvoir passer à l’échelle. Pour cela, les applications HPC partitionnent généralement les données traitées. De plus, nous avons pu voir que bon nombre de supports exécutifs d’ordonnancement de graphes de tâches permettent de porter des dépendances entre les tâches par le biais de données. Ainsi, offrir des mécanismes de composition de codes HPC centrés sur des données pouvant être partitionnées semble être une bonne direction de recherche pour aborder ce problème.

Notre objectif est donc d’étudier la faisabilité d’une méthode de composition de codes parallèles à base de tâches préservant les propriétés suivantes :

— deux codes efficaces composés ensemble doivent être au moins aussi efficaces (c.-à-d. utilisation efficace des ressources après composition) ;

— deux codes ayant recours à des distributions de données différentes doivent être facilement composés sans introduire de synchronisations artificielles (c.-à-d.

indépendance des codes composés et présence de mécanisme de redistribution des données entre les codes) ;

— une exécution entrelacée des codes parallèles doit être possible avec de faibles surcoûts (c.-à-d. composition de codes à grain fin).

2.7 Conclusion

Ce chapitre a présenté en six sections le contexte et l’état de l’art de la thèse qui se concentrent sur le calcul de haute performance et la composition de code parallèle à travers l’utilisation de modèles de composants.

Pour cela, la première section a étudié les architectures matérielles pour le cal- cul de haute performance. Cette section a montré en particulier leur complexité et leur variabilité ainsi que leur capacité à pouvoir exécuter des codes massivement parallèles en mettant en œuvre différentes formes de parallélisme.

La seconde section de ce chapitre a analysé les applications HPC s’exécutant tout naturellement sur les architectures matérielles présentées avant. Elle s’est concen- trée plus particulièrement sur le cas de l’application de physique des plasmas par confinement magnétique pour la fusion Gysela, dont des sous-parties sont étudiées dans ce manuscrit. Cette section a fait ressortir plus spécifiquement les compromis

réalisés dans Gysela liant les performances du code à sa maintenabilité.

La troisième section a présenté les catégories de paradigmes de programmation les plus utilisés pour programmer des applications HPC. Elle a mis en évidence la va- riabilité des modèles de programmation existants et leurs singularités. Cette section a présenté plus particulièrement les approches à base de graphe de tâches particu- lièrement utiles pour utiliser efficacement les ressources de calcul des plateformes HPC ainsi que pour s’abstraire de la variabilité du matériel.

La quatrième section s’est concentrée sur la conception des applications HPC et plus précisément sur la structuration des codes HPC et les interactions qui lient les différentes parties d’une même application. Elle a présenté les approches à base de composants logiciels et a décrit les méthodes pouvant être employées pour composer des codes indépendamment de la présence du parallélisme en leur sein.

La cinquième section a décrit plus précisément les méthodes existantes permet- tant de composer des codes HPC. Elle a souligné que l’usage d’une méthode de composition plutôt qu’une autre dépend des codes à composer, en particulier du paradigme de programmation utilisé dans les codes composés.

Enfin, la dernière section a repris l’ensemble du contexte et de l’état de l’art exposé dans ce manuscrit afin d’évoquer les motivations de cette thèse ainsi que ces objectifs. En particulier, elle s’est intéressée au cas de la composition de codes paral- lèles utilisant des approches à base de graphes de tâches qui, à notre connaissance, n’est pas traitée dans les modèles de composants existants.

Le chapitre suivant présente Comet, un modèle de composants pour le calcul de haute performance supportant l’ordonnancement de graphes de tâches et offrant des mécanismes pour la composition de ces graphes de tâches.

Chapitre 3

Le modèle Comet

Contents

2.1 Plateformes . . . 7 2.1.1 Aperçu . . . 8 2.1.2 Architectures à mémoire partagée. . . 9 2.1.3 Architectures à mémoire distribuée . . . 14 2.1.4 Conclusion . . . 14 2.2 Applications. . . 15 2.2.1 Conception et analyse d’applications parallèles . . . 15 2.2.2 Domaines applicatifs . . . 16 2.2.3 Équations aux dérivées partielles . . . 17 2.2.4 Conception et maintenance . . . 18 2.2.5 Focus : Gysela . . . 18 2.2.6 Conclusion . . . 22 2.3 Paradigmes et modèles de programmation . . . 22 2.3.1 Parallélisme de données et de tâches . . . 22 2.3.2 Interaction : mémoire partagée et passage de messages . . 24 2.3.3 Modèles de programmation parallèle . . . 25 2.3.4 Conclusion . . . 32 2.4 Programmation par composition . . . 32 2.4.1 De la programmation structurée aux modèles de composants 32 2.4.2 Définitions . . . 35 2.4.3 Concepts . . . 38 2.4.4 Formes de composition. . . 39 2.4.5 Conclusion . . . 41 2.5 Programmation parallèle par composition . . . 42 2.5.1 Forme de composition de codes parallèles . . . 42 2.5.2 L2C : un modèle de composants minimaliste pour le HPC 46 2.5.3 Conclusion . . . 47 2.6 Discussion . . . 47

51

2.6.1 Analyse . . . 48 2.6.2 Objectifs et approche. . . 49 2.7 Conclusion. . . 49 Cette section présente une des contributions de la thèse : un modèle à composant avec support de l’ordonnancement de tâches. La section 3.1 donne un aperçu du modèle Cometet de sa structure. La section3.2 présente les entités fondamentales deComet. La section3.3montre comment construire une application en composant les entités fondamentales du modèle. Enfin, la section 3.5 conclut ce chapitre.

3.1 Aperçu

Cometest un modèle de composants dédié au calcul haute performance et sup- portant l’ordonnancement de graphes de tâches. Il vise à assembler simplement des codes parallèles indépendants tout en permettant une exécution efficace. Pour cela, Comet se base sur le modèle de composants existant L2C qui supporte la compo- sition use-provide et MPI. Il l’étend en supportant une nouvelle forme d’interaction entre les composants à base de flux de données manipulant des données partitionnées ainsi qu’en ajustant les ports use-provide. Cette extension permet de construire un graphe de tâches en composant successivement des morceaux de graphe de tâches.

Cometcible en particulier les architectures à mémoire partagée. Néanmoins, il supporte aussi les architectures à mémoire distribuée en se basant sur MPI pour la communication entre les nœuds de calcul.