1 / 42

laurent.colombet@cea.fr gilles.grospellier@cea.fr benoit.lelandais@cea.fr

laurent.colombet@cea.fr gilles.grospellier@cea.fr benoit.lelandais@cea.fr. Plan exposé. Présentation Le fonctionnement général Les notions de base Exemple d’un code d’hydrodynamique Le traitement du parallélisme L’équilibrage de charge Évolutions et conclusion. Présentation.

feleti
Download Presentation

laurent.colombet@cea.fr gilles.grospellier@cea.fr benoit.lelandais@cea.fr

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. laurent.colombet@cea.fr gilles.grospellier@cea.frbenoit.lelandais@cea.fr

  2. Plan exposé • Présentation • Le fonctionnement général • Les notions de base • Exemple d’un code d’hydrodynamique • Le traitement du parallélisme • L’équilibrage de charge • Évolutions et conclusion

  3. Présentation • Arcane est une plate-forme de développement pour les codes de simulations volumes/éléments finis 2D/3D parallèles • 2 objectifs permanents : • Simplifier et accélérer au maximum l’écriture des modules numériques et d’environnement en prenant en charge les aspects informatiques • Utilisation d’objets métiers de haut niveau : variables, maillage… • Fourniture d’outils de mise au point, temps de compilation réduits, simplicité de mise en œuvre • Favoriser la réutilisation • Obtenir de bonnes performances • En séquentiel et … • … sur machines parallèles (grappes de SMP)

  4. Fonctionnalités • Arcane prend en charge les services suivants: • gestion des structures liées au maillage • gestion des variables (Température, Pression, …) à travers une base de donnée • parallélisme • gestion des modules et de leurs interactions • options de configuration des modules (jeu de données) • protections / reprises • fourniture de fonctions utilitaires (mathématiques, listing, temps d’exécution, …) • outils d’analyse et d’aide à la mise au point • retour-arrière • sorties spécifiques de dépouillement • courbes • historiques

  5. Maillage • Arcane gère les maillages non-structurés 2D et 3D; • les différents éléments du maillage sont appelés des entités; • il existe 5 genres d’entités: • nœuds (0D), arêtes (1D), faces (2D); • mailles (2D ou 3D); • particules • plusieurs types d’entités: • triangle, quadrangle, pentagone, hexagone (2D); • tétraèdre, pyramide, prisme, hexaèdre, heptaèdre, octaèdre (3D); • possibilité d’ajouter d’autres types d’entités.

  6. Plan exposé • Présentation • Le fonctionnement général • Les notions de base • Le traitement du parallélisme • L’équilibrage de charge • Évolutions et conclusion

  7. <? xml version='1.0' encoding ='ISO - 8859 - 1'?> <cas codeversion ='1.4' codename = ’ Code 3D' xml : lang =' fr '> <arcane> <titre> Implosion d ’ une aiguille : ablateur partiel + DT - cryo </titre> <boucle - en - temps>Hydro</boucle - en - temps> </arcane> <maillage> <fichier format=" unf ">lmj1.unf</fichier> </maillage> … <hydrodynamique> < methode - calcul - cqs > Pracht </ methode - calcul - cqs > < recalcul - masse - nodale > false </ recalcul - masse - nodale > </conditions - aux - limites> < bloquage - interface > < bloquage - en - temperature > <interface>INTERFACE1</interface> < temperature >0.05</ temperature > <synchrone> true </synchrone> < hydro - seule > true </ hydro - seule > </ bloquage - en - temperature > … . Fonctionnement général Modules Boucle en d’entrée temps Calcul des forces Gestionnaire de modules Calcul impulsion Gestionnaire de variables Architecture ARCANE Déplacement noeuds Parallélisme Calcul énergie Structures maillage Calcul pression Modules de sortie Autres codes Protections

  8. Plan exposé • Présentation • Le fonctionnement général • Les notions de base • Exemple d’un code d’hydrodynamique • Le traitement du parallélisme • L’équilibrage de charge • Évolutions et conclusion

  9. Concepts • Le code est constitué d’un ensemble de modules • hydrodynamique • thermique • post-traitement • … • Chaque module est indépendant et possède • ses variables, qui représentent les données traitées par le module (ex: température, vitesse, t) • ses options de configuration (jeu de données) • ses points d’entrée, qui représentent les opérations effectuées par le module (ex: calcul des forces, déplacement des nœuds) • Les modules peuvent partager du code via les services • Les modules peuvent partager des données via les variables

  10. Module • Un module est un composant logiciel. Il comporte du code source et un fichier de définition (XML), appelé descripteur de module, qui contient : • la liste des variables, • la liste des points d’entrée, • les options de configuration. • A partir du descripteur de module, Arcane génère • une classe de base pour le module • une classe pour accéder aux options de jeu de données concernant le module • Les modules communiquent via les variables : deux modules utilisant une variable publique de même nom partagent sa valeur

  11. HydroModule computeForces()modeNodes() ArcaneHydroObject m_density : VariableCellRealm_velocity : VariableNodeReal computeForces()modeNodes() CaseOptionsHydro cfl : double Exemple de génération de module descripteur de module génération développement void HydroModule::moveNodes() { ENUMERATE_NODE(i_node,allNodes()){ const Node& node = *i_node; m_node_coord[node] += m_deltat() * m_velocity[node]}

  12. Variable • Une variable est caractérisée par : • son nom, • son type de donnée, • entier, • réel, coordonnées 2D, coordonnées 3D, tenseur 2x2, tenseur 3x3 • chaîne de caractères • son support, • aucun, • nœud, arête, face ou maille • sa dimension, • scalaire (0) • tableau (1) • tableau 2D avec deuxième dimension variable (2). • Il est possible de créer des dépendances entre variables • Pour chaque variable, Arcane gère : • la mémoire • les protections / reprises • la prise en charge du retour-arrière • le traitement du parallélisme

  13. Points d’entrée • L’enchaînement des calculs du code est décrit par une succession de points d’entrée: la boucle en temps. • Les boucles en temps sont décrites dans un fichier de configuration externe (ne nécessite pas de recompilation) • Exemple: boucle en temps «HydroThermique»:

  14. Service • Un service est un plug-in implémentant une interface • technique • lecture et structure du maillage • sorties pour le dépouillement • algorithme de repartitionnement • fonctionnel • vecteur, matrice, solveur • trajectographie • schéma numérique • Présente les mêmes caractéristiques que le module excepté les points d’entrée • Se configure comme un module

  15. Avantages de la conception • Les interfaces entre les modules sont • explicites: boucle en temps • distinctes: réduction de la complexité du code • Compilation et tests par module/service • Ajouter/modifier un module/service ne perturbe par les autres • Plusieurs versions d’un même module/service peuvent coexister (namespace) • Un module/service qui n’est pas utilisé n’est pas créé et ne prend aucune ressource (variables non allouées, …)

  16. Exemple d’un code hydrodynamique • Code d’hydrodynamique simplifié • lagrangien • Un seul module • hydrodynamique • Fluide de type gaz, selon deux modèles • Gaz parfait • Gaz de type «stiffened» • Fonctionnement sur des tubes à choc.

  17. Exemple d’un code hydrodynamique : boucle en temps • La boucle en temps contient uniquement des points d’entrées du module hydrodynamique • Ordre des opérations:

  18. Exemple d’un code hydrodynamique : liste des variables • Variables aux mailles • Pression, Volume, Energie interne, Masse, vitesse du son, résultante • Variables aux nœuds • Position, Force, Vitesse, Masse nodale • La masse aux mailles et aux nœuds est constante (lagrange)

  19. Exemple d’un code hydrodynamique : code généré descripteur de module <variablefield-name=‘density’ name=‘Density’ data-type=‘real’ item-kind=‘cell’ dim=‘0’ /> <variablefield-name=‘velocity’ name=‘Velocity’ data-type=‘real3’ item-kind=‘node’ dim=‘0’ /> <entry-pointmethod-name=‘computeVelocity’ name=‘ComputeVelocity’ where=‘compute-loop’ /> <entry-pointmethod-name=‘moveNodes’ name=‘MoveNodes’ where=‘compute-loop’ /> génération

  20. Calcul des forces • Calcul des forces: contribution de la pression sur la force aux nœuds: ENUMERATE_CELL(icell,allCells()){ Real pressure = m_pressure[icell]; for( NodeEnumerator inode(icell.nodes()); inode.hasNext(); ++inode) force[inode] += pressure * cell_cqs[icell] [inode.index()]; } • Application du principe de la dynamique, puis calcul de la vitesse ENUMERATE_NODE(inode, allNodes()){ Real node_mass = m_node_mass[inode]; Real3 old_velocity = velocity[inode]; velocity[inode] = velocity[inode] + (global_deltat/node_mass) * force[inode]; }

  21. Déplacement des nœuds • Application des conditions aux limites • Vitesse normale nulle sur les faces frontières • Déplacement des nœuds: • Calcul des nouvelles informations géométriques: • Mise à jour des volumes • Calcul des résultantes • Application de l’équation d’état • Calcul du nouveau pas de temps • Application des contraintes CFL

  22. Application des équations d’état • Calcul de la densité, énergie interne, pression et vitesse du son Gaz Parfait: Gaz « stiffened »:

  23. Utilisation d’un service pour les équations d’état • Un service respecte un contract, défini par une interface • en C++, une classe ne contenant que des méthodes publiques virtuelles pures • Pour le service d’équation d’état:

  24. Utilisation des services descripteur de module <options> <service type=‘IEquationOfState’name=‘eos’default=‘PerfectGaz’ /> </options> génération void HydroModule::applyEquationOfState() { … options.eos.applyEos(); … }

  25. Utilisation des services Jeu de données Descripteur de service <servicename=‘PerfectGaz’/> <interfacename=‘IEquationOfState’ /> <options> <simpletype=‘real’ name=‘adiabatic-constant’/> </options> </service> <hydro> <eos name=‘PerfectGaz’> <options> <adiabatic-constant>1.4</adiabatic-constant> </options> </hydro> Gaz parfait <servicename=‘StiffenedGaz’/> <interfacename=‘IEquationOfState’ /> <options> <simpletype=‘real’ name=‘adiabatic-constant’/> <simpletype=‘real’ name=‘limit-tension’/> </options> </service> <hydro> <eos name=‘StiffenedGaz’> <options> <adiabatic-constant>1.4</adiabatic-constant> <limit-tension>1.4</limit-tension> </options> </hydro> Gaz ‘stiffened’

  26. Plan exposé • Présentation de Arcane • Le fonctionnement général • Les notions de base • Exemple d’un code d’hydrodynamique • Le traitement du parallélisme • L’équilibrage de charge • Évolutions et conclusion

  27. Stratégie de parallélisme • Le parallélisme est géré par échange de messages. • le maillage est partitionné en nsous-domaines. • chaque sous-domaine est éventuellement complété d’une ou plusieurs couches de mailles fantômes • ces mailles fantômes représentent une duplication d’entités pour lesquelles il faudra effectuer une synchronisation • chaque processeur effectue les calculs sur un sous-domaine et synchronise ses variables régulièrement avec d’autres processeurs • le code s’exécute en parallèle comme en mode séquentiel avec des synchronisations et des réductions explicites

  28. Partitionnement • Deux possibilités pour le partitionnement : • comme un outil externe séquentiel (interne DIF/DSSI/SNEC) • plusieurs algorithmes (Métis, Chaco, Party, …) • plusieurs niveaux de couches fantômes • fournit les informations nécessaires pour les communications entre sous-domaines • pas de pondération pour orienter le partitionnement • comme un service d’Arcane • algorithme de partitionnement parallèle • utilisable pour l’équilibrage de la charge des processeurs (algorithmes de diffusion de mailles)

  29. Prise en charge du parallélisme • Sous certaines conditions, la conception de l’architecture assure que le résultat d’un calcul ne dépend ni du partitionnement ni du nombre de sous-domaine : • exécution déterministe • mise au point plus aisée • développement d’un outil permettant de vérifier que les exécutions parallèles et séquentielles donne exactement les mêmes résultats (comparaison bit à bit). • Le développeur utilise les services génériques d’Arcane • synchronisation des valeurs d’une variable sur l’ensemble des sous-domaines • réductions m_temperature.synchronize(); m_delta_t.reduce(Parallel::ReduceMin);

  30. Autres services de parallélisme • Services génériques pouvant être implémentés avec différentes bibliothèques de parallélisme (actuellement uniquement MPI) • barrières • envois / réceptions (send / recv) • regroupements (gather) • réductions • diffusion (broadcast) • sérialisation (pack / unpack) • Statistiques d’exécutions • liste et nombre des appels parallèles • pourcentage du temps de calcul par rapport au temps des communications

  31. Performance code hydro

  32. Plan exposé • Présentation de Arcane • Le fonctionnement général • Les notions de base • Exemple d’un code d’hydrodynamique • Le traitement du parallélisme • L’équilibrage de charge • Évolutions et conclusion

  33. Équilibrage de charge • Arcane fournit des mécanismes permettant de réaliser un équilibrage dynamique de charge : • analyse du déséquilibre de charge • migration des entités et des variables d’un sous-domaine vers un autre • calcul des entités fantômes • incorporation d’algorithmes d’équilibrage de charge (ex:ParMetis, Zoltan) avec plusieurs contraintes

  34. Simulation Monte-Carlo Exemple de décomposition en 64 sous-domaines Matériau léger Matériau lourd Flux entrant • Test difficile pour l’extensibilité • Répartition dynamique de charge par échange de mailles • Mailles >350000, 30M de particules, 8/32/64 processeurs

  35. Évolution du sous domaine du processeur 1/32 1 2 3 4

  36. Speed up et efficacité • La simulation est arrêtée lorsque le tiers du tube est “chaud” * Speed up sans répartition dynamique de la charge : 7.41 (dépendant du partitionnement initial)

  37. Test d’extensibilité Monte Carlo • Description du test : • Transport et interaction de particules (Monte Carlo) • A T0, tous les processeurs gèrent le même nombre de mailles Dépôt d’énergie sur la surface

  38. Test d’extensibilité Monte Carlo * Ces résultats sont obtenus sans option de compilation spécifique INTEL et sans directive #pragma

  39. Plan exposé • Présentation de Arcane • Le fonctionnement général • Les notions de base • Exemple d’un code d’hydrodynamique • Le traitement du parallélisme • L’équilibrage de charge • Évolutions et conclusion

  40. Évolutions prévues • 3 directions d’évolution respectant les 2 objectifs (cf. transparent 3) Arcane core Optimisations IA64 Amélioration du load balancing Parallélisme multi niveaux Raffinement/Déraffinement (AMR) Arcane numeric tools Matrices, vecteurs SolveurComposant Newton Arcane tools Langages de compilation à la volée Tests unitaires Bibliothèques de profiling

  41. Évolutions prévues • Utilisation de langages de compilation à la volée (C#) • plus simple d’utilisation que le C++ • développement rapide • compilation • environnement de programmation • performances correctes • Parallélisme multi-niveaux • Code hybride MPI/pthread • Code uniquement pthread

  42. Évolutions prévues • Collaboration avec l’Institut Français du pétrole (IFP) • support pour les éléments de maillage d’ordre 2 • algorithme de glissement/impact en 3D en parallèle • environnement de test • documentation • portage

More Related