La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "Gilles.grospellier@cea.fr benoit.lelandais@cea.fr laurent.colombet@cea.fr gilles.grospellier@cea.fr benoit.lelandais@cea.fr."— Transcription de la présentation:

1 gilles.grospellier@cea.fr benoit.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 2 objectifs permanents :
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 Arcane prend en charge les services suivants:
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 Fonctionnement général
<? xml version='1.0' encoding ='ISO - 8859 1'?> <cas codeversion ='1.4' codename = Code 3D' : lang =' fr '> <arcane> <titre> Implosion d une aiguille : ablateur partiel + DT cryo </titre> <boucle en temps>Hydro</boucle temps> </arcane> <maillage> <fichier format=" unf ">lmj1.unf</fichier> </maillage> <hydrodynamique> < methode calcul cqs > Pracht </ recalcul masse nodale false </conditions aux limites> bloquage interface temperature <interface>INTERFACE1</interface> >0.05</ <synchrone> true </synchrone> hydro seule . 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 Exemple de génération de module
descripteur de module génération ArcaneHydroObject m_density : VariableCellReal m_velocity : VariableNodeReal computeForces() modeNodes() CaseOptionsHydro cfl : double développement void HydroModule::moveNodes() { ENUMERATE_NODE(i_node,allNodes()){ const Node& node = *i_node; m_node_coord[node] += m_deltat() * m_velocity[node] } HydroModule computeForces() modeNodes()

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 Exemple: boucle en temps «HydroThermique»: Nom du point d’entrée
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»: Nom du point d’entrée Module CalculDesForces Hydro ContributionPression ContributionPressionThermique Thermique PseudoViscosité ConditionsAuxLimites DéplacementDesNoeuds MiseAJourDesVolumes DiffusionNonLinéaire SortiesDépouillement PostTraitement

14 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: Description Nom point d’entrée Calcul des forces aux noeuds ComputePressureForce Calcul de la vitesse ComputeVelocity Application des conditions aux limites ApplyBoundaryCondition Déplacement des nœuds MoveNodes Calcul des nouvelles informations géométriques (volumes, positions, …) ComputeGeometricValues Mise à jour de la densité UpdateDensity Application de l’équation d’état ApplyEquationOfState Calcul du nouveau deltat ComputeDeltaT

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 <variable field-name=‘density’ name=‘Density’ data-type=‘real’ item-kind=‘cell’ dim=‘0’ /> <variable field-name=‘velocity’ name=‘Velocity’ data-type=‘real3’ item-kind=‘node’ dim=‘0’ /> <entry-point method-name=‘computeVelocity’ name=‘ComputeVelocity’ where=‘compute-loop’ /> <entry-point method-name=‘moveNodes’ name=‘MoveNodes’ where=‘compute-loop’ /> génération

20 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
Descripteur de service Jeu de données <service name=‘PerfectGaz’/> <interface name=‘IEquationOfState’ /> <options> <simple type=‘real’ name=‘adiabatic-constant’/> </options> </service> <hydro> <eos name=‘PerfectGaz’> <options> <adiabatic-constant>1.4</adiabatic-constant> </options> </hydro> Gaz parfait <service name=‘StiffenedGaz’/> <interface name=‘IEquationOfState’ /> <options> <simple type=‘real’ name=‘adiabatic-constant’/> <simple type=‘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 n sous-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 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
4

36 La simulation est arrêtée lorsque le tiers du tube est “chaud”
Speed up et efficacité La simulation est arrêtée lorsque le tiers du tube est “chaud” Nombre de processeurs Speed up Efficacité 8 6.84 0.855 32* 24.31 0.75 64 41.07 0.64 * 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
Nombre de processeurs User time (s) Itanium 2 Speed : 1.5GHz Alpha EV68 Speed : 1Ghz Nombre de mailles 1 908* 1110 8500 ( particules) 16 1096 * 1313 136000 (5M particules) 32 1116 * 1299 272200 (10M particules) 80 1210 * na 680000 (20M particules) 256 1318 * 1424 2,16 M (80M particules) 1024 1467* 1632 8.7 M (350M particules) * 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 Arcane core Arcane tools Arcane numeric tools
É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 tools Langages de compilation à la volée Tests unitaires Bibliothèques de profiling Arcane numeric tools Matrices, vecteurs Solveur Composant Newton

41 Utilisation de langages de compilation à la volée (C#)
É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


Télécharger ppt "Gilles.grospellier@cea.fr benoit.lelandais@cea.fr laurent.colombet@cea.fr gilles.grospellier@cea.fr benoit.lelandais@cea.fr."

Présentations similaires


Annonces Google