La plate-forme Arcane 

Implémentation et performances

La plate-forme Arcane 

Arcane est une plate-forme de développement pour les codes de simulation numérique volumes/éléments finis 2D/3D parallèles. Initiée en 2000 par le CEA/DAM, IFPEN collabore depuis 2007 à son développement. A l’opposé d’une plate-forme d’intégration, Arcane vise à proposer un ensemble d’outils et abstractions dédié au développement d’applications scientifiques de simulation pouvant s’exécuter sur des machines massivement parallèles. La plate-forme est aujourd’hui utilisée à IFPEN pour la mise au point d’applications de nouvelle génération en géosciences (modélisation de bassin, simulateurs de réservoir, stockage de CO2, . . .) à vocation industrielle. La plate-forme Arcane a pour objectifs principaux de : – simplifier au maximum l’écriture des modules numériques et d’environnement par la prise en charge des aspects informatiques, – garantir de bonnes performances sur les machines parallèles actuelles et limiter l’impact des évolutions matérielles futures, assurer un cadre de développement de qualité : outils de mise au point, temps de compilation réduit, simplicité de mise en œuvre. 

Architecture de la plate-forme

 Arcane est écrite en C++ et fait environ 200 mille lignes de code. Le code est écrit pour être le plus simple possible pour les non-spécialistes du C++ en limitant les techniques complexes du langage (par exemple les expressions templates). La plate-forme fonctionne sous Unix et Windows. Arcane est construite sur une architecture logicielle type component. Chaque fonctionnalité est fournie par un composant appelé service dans la terminologie Arcane. Un service doit se conformer à un comportement défini par un contrat. Un contrat est ici défini par un ensemble d’opérations et de contraintes que l’on appelle interface (au sens informatique). Un service donné implémente une telle interface. Par exemple, Arcane fournit une interface de maillage IMesh avec des opérations standards comme obtenir le nombre de mailles ou ajouter/retirer des mailles. Un service peut accéder à d’autres interfaces et ainsi utiliser d’autres services. De fait, un service agit comme un plugin. En utilisant cette approche, Arcane est hautement adaptable et n’est pas liée à une implémentation spécifique. Arcane prend en charge par défaut une multitude de services dont en particulier : – la gestion des structures liées au maillage, – la gestion des grandeurs portées par le maillage à travers une base de données, – le parallélisme, – l’aide à la construction de briques logicielles utilisateurs, – la gestion de ces briques logicielles et de leurs interactions, – les options de configuration des briques utilisateurs (jeu de données), – le mécanisme de protections / reprises, – la fourniture de fonctions utilitaires (mathématiques, listing, temps d’exécution, . . .), – les outils d’analyse et d’aide à la mise au point, – le mécanisme de retour-arrière, – les sorties spécifiques de dépouillement (courbes et historiques). 

Maillage et variable 

Un élément central proposé par la plate-forme est la gestion des maillages. Arcane prend en charge les maillages non-structurés 2D ou 3D. Les différents éléments du maillage sont appelés des entités. Il existe 4 genres d’entités : nœuds (0D), arêtes (1D), faces (2D), et mailles (2D ou 3D). Arcane définit un grand nombres de types de face ou maille (triangle, tétraèdre, pyramide, quadrangle, etc) et il est possible de spécifier d’autres types. De plus, le maillage est complètement dynamique, c’est-à-dire qu’il est possible d’ajouter ou retirer des éléments durant la simulation. La structure de données sous-jacente au maillage a été conçue pour que l’utilisation du maillage soit la plus indépendante possible de la dimension de l’espace. En particulier, un développeur pourra, si l’application s’y prête, écrire un code similaire pour traiter les cas à deux dimensions et à trois dimensions. Ainsi, une maille peut être un élément 2D ou 3D. Une face est toujours le bord d’une maille. Par exemple, un hexaèdre est composé de 6 faces et un quadrangle de 4 faces. Il est possible de définir des grandeurs portées par les éléments du maillage. On parle alors de variable. Typiquement, ce sont les objets manipulés par l’utilisateur pour conceptualiser des quantitiés physiques, par exemple, une pression définie aux centres des mailles ou une vitesse définie au centre des faces. Arcane propose des outils d’énumérations et d’accès à la connectivité des entités permettant d’écrire des algorithmes génériques par rapport à la dimension du maillage. Une variable est définie par : – Un type de donnée comme entier, réel ou booléen, – Une dimension pouvant être scalaire, tableau 1D ou 2D, – Une entité de maillage supportant les données : maille, nœud, face ou arête. On présente ici un exemple d’utilisation de cette structure de maillage. Ce code définit le profil du système linéaire obtenu en résolvant une équation d’advection avec un schéma de type volumes finis à deux points.

Parallélisme

 Arcane a été conçue pour s’exécuter sur des supercalculateurs composés de plusieurs milliers (et bien plus) de cœurs de calcul. Dans ce cas, le choix a été fait de partitionner le maillage en sous-domaines répartis sur chaque cœur de calcul. Chaque élément du maillage est possédé par un et un seul cœur de calcul. Chaque variable portée par le maillage est donc distribuée à travers tous les cœurs. On parle alors de la distribution des données. Les algorithmes calculant ces variables peuvent nécessiter l’utilisation d’un voisinage, les sous-domaines sont donc complétés par une ou plusieurs couches de mailles représentant une duplication d’éléments du maillage. Ces mailles dites fantômes sont la recopie des mailles voisines au sous-domaine. Cela forme donc une couche de recouvrement entre les sous-domaines. Modèles de programmation parallèle Les communications entre les sous-domaines sont effectuées suivant le paradigme échange de messages par l’utilisation d’un gestionnaire de parallélisme IParallelMng. Un sous-domaine peut donc envoyer et recevoir des messages des autres sous-domaines. Arcane met à disposition plusieurs implémentations du gestionnaire de parallélisme permettant une adaptation fine à l’architecture matérielle sous-jacente de la machine utilisée. Mode distribué Ce mode est adapté aux architectures à mémoire distribuée. L’implémentation par défaut est basée sur MPI [WD96]. Ainsi, chaque sous-domaine est associé à un processus MPI ayant un espace d’adressage mémoire privé par rapport aux autres sous-domaines. Les communications se font à bas niveau par l’appel de routines MPI dédiées. Mode partagé Ce mode est adapté aux architectures à mémoire partagée. L’implémentation par défaut est basée sur TBB [Rei07]. Ici, chaque sous-domaine est associé à un thread, c’est-à-dire un processus léger. Au lancement d’Arcane, autant de threads que de sous-domaines sont crées. Chaque thread gère ensuite indépendamment des autres le sous-domaine et les communications entre sous-domaines partagent le même formalisme qu’en mode distribué. L’avantage ici est de pouvoir substituer les appels MPI par des copies mémoires. De plus, chaque thread gérant la mémoire nécessaire pour les données associées au sous-domaine, les conflits mémoire sont réduits. 

Cours gratuitTélécharger le document complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *