Upload
claire-delattre
View
110
Download
1
Embed Size (px)
Citation preview
École CEA/EDF/INRIA 08/11/2006 Page 1
École CEA/EDF/INRIA 08/11/2006 Page 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
École CEA/EDF/INRIA 08/11/2006 Page 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)
École CEA/EDF/INRIA 08/11/2006 Page 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
École CEA/EDF/INRIA 08/11/2006 Page 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.
École CEA/EDF/INRIA 08/11/2006 Page 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
École CEA/EDF/INRIA 08/11/2006 Page 7
Fonctionnement général
Gestionnaire demodules
Structures maillage
Gestionnaire devariables
Parallélisme
Architecture ARCANE
Autres codes Protections
Calcul des forces
Calcul impulsion
Déplacement noeuds
Calcul énergie
Calcul pression
Boucle entemps
Modules de sortie
Modulesd’entrée
<?xmlversion='1.0' encoding='ISO-8859-1'?><cas codeversion='1.4' codename=’ Code 3D' xml:lang='fr'><arcane>
<titre>Implosion d’une aiguille : ablateurpartiel + 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>
….
École CEA/EDF/INRIA 08/11/2006 Page 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
École CEA/EDF/INRIA 08/11/2006 Page 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
École CEA/EDF/INRIA 08/11/2006 Page 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
École CEA/EDF/INRIA 08/11/2006 Page 11
Exemple de génération de module
<module name=‘Hydrodynamique’><variables><variable field-name=‘velocity’ name=‘Velocity’ data-type=‘real3’
item-kind=‘node’ dim=‘0’/><variable field-name=‘density’ name=‘Density’ data-type=‘real’
item-kind=‘cell’ dim=‘0’/></variables><entry-points><entry-point method-name=‘computeForces’ name=‘CalculDesForces’
where=‘compute-loop’ /><entry-point method-name=‘moveNodes’ name=‘DeplacementDesNoeuds’
where=‘compute-loop’ /></entry-points><options><simple name=‘cfl’ type=‘real’ default=‘0.5’><description>Définition de la CFL</description>
</simple></options>
</module>
void HydroModule::moveNodes()
{
ENUMERATE_NODE(i_node,allNodes()){
const Node& node = *i_node;
m_node_coord[node] += m_deltat() * m_velocity[node]}
ArcaneHydroObject
m_density : VariableCellRealm_velocity : VariableNodeReal
computeForces()modeNodes()
CaseOptionsHydro
cfl : double
HydroModule
computeForces()modeNodes()
descripteur de module
génération
développement
École CEA/EDF/INRIA 08/11/2006 Page 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
École CEA/EDF/INRIA 08/11/2006 Page 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»:
Nom du point d’entrée Module
CalculDesForces Hydro
ContributionPression Hydro
ContributionPressionThermique Thermique
PseudoViscosité Hydro
ConditionsAuxLimites Hydro
DéplacementDesNoeuds Hydro
MiseAJourDesVolumes Hydro
DiffusionNonLinéaire Thermique
SortiesDépouillement PostTraitement
École CEA/EDF/INRIA 08/11/2006 Page 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
École CEA/EDF/INRIA 08/11/2006 Page 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, …)
École CEA/EDF/INRIA 08/11/2006 Page 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.
École CEA/EDF/INRIA 08/11/2006 Page 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
École CEA/EDF/INRIA 08/11/2006 Page 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)
qscsmevp
,,,,,
MVFX ,,,
École CEA/EDF/INRIA 08/11/2006 Page 19
Exemple d’un code hydrodynamique : code généré
<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’ />
descripteur de module
génération
École CEA/EDF/INRIA 08/11/2006 Page 20
Calcul des forces
• Calcul des forces: contribution de la pression sur la force aux nœuds:
cell
qsip cpF
.,
• Application du principe de la dynamique, puis calcul de la vitesse
FAM
FM
tVV nn
1
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()]; }
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]; }
École CEA/EDF/INRIA 08/11/2006 Page 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
VtXX nn
.1
École CEA/EDF/INRIA 08/11/2006 Page 22
Application des équations d’état
ps
ep
)1(
)/11(1
)1(1
)1(5.0
vrx
vrxe
xV
m
Gaz Parfait:
Gaz « stiffened »:
)(
)1(
s
s
Tps
Tep
• Calcul de la densité, énergie interne, pression et vitesse du son
École CEA/EDF/INRIA 08/11/2006 Page 23
• 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:
Utilisation d’un service pour les équations d’état
IEquationOfStateInterface
Methods
applyEOS
OtherGazEquationOfStateClass
Methods
applyEOS
PerfectGazEquationOfStateClass
Methods
applyEOS
StiffenedGazEquationOfStateClass
Methods
applyEOS
IEquationOfStateIEquationOfState IEquationOfState
École CEA/EDF/INRIA 08/11/2006 Page 24
Utilisation des services
<options> <service type=‘IEquationOfState’ name=‘eos’ default=‘PerfectGaz’ /></options>
descripteur de module
génération
void HydroModule::applyEquationOfState(){ … options.eos.applyEos(); …}
École CEA/EDF/INRIA 08/11/2006 Page 25
Utilisation des services
<service name=‘PerfectGaz’/> <interface name=‘IEquationOfState’ /> <options> <simple type=‘real’ name=‘adiabatic-constant’/> </options></service>
Gaz
parfait
<service name=‘StiffenedGaz’/> <interface name=‘IEquationOfState’ /> <options> <simple type=‘real’ name=‘adiabatic-constant’/> <simple type=‘real’ name=‘limit-tension’/> </options></service>
Gaz
‘stiffened’
<hydro> <eos name=‘PerfectGaz’> <options> <adiabatic-constant>1.4</adiabatic-constant> </options></hydro>
<hydro> <eos name=‘StiffenedGaz’> <options> <adiabatic-constant>1.4</adiabatic-constant><limit-tension>1.4</limit-tension> </options></hydro>
Descripteur de service Jeu de données
École CEA/EDF/INRIA 08/11/2006 Page 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
École CEA/EDF/INRIA 08/11/2006 Page 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
École CEA/EDF/INRIA 08/11/2006 Page 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)
École CEA/EDF/INRIA 08/11/2006 Page 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);
École CEA/EDF/INRIA 08/11/2006 Page 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
École CEA/EDF/INRIA 08/11/2006 Page 31
Performance code hydro
Performance code hydro
0
500
1000
1500
2000
2500
0 500 1000 1500 2000 2500
Nombre de processeurs
Sp
ee
d-U
p
Speed-Up
Speed-Up nominal
École CEA/EDF/INRIA 08/11/2006 Page 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
École CEA/EDF/INRIA 08/11/2006 Page 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
École CEA/EDF/INRIA 08/11/2006 Page 34
Simulation Monte-Carlo
Matériau lourd
Matériau léger Exemple de décomposition en 64 sous-domaines
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
École CEA/EDF/INRIA 08/11/2006 Page 35
Évolution du sous domaine du processeur 1/32
2
4
1
3
École CEA/EDF/INRIA 08/11/2006 Page 36
Speed up et efficacité
Nombre de processeurs
Speed up Efficacité
8 6.84 0.855
32* 24.31 0.75
64 41.07 0.64
• 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)
École CEA/EDF/INRIA 08/11/2006 Page 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
École CEA/EDF/INRIA 08/11/2006 Page 38
Test d’extensibilité Monte Carlo
Nombre de processeurs
User time (s)
Itanium 2
Speed : 1.5GHz
User time (s)
Alpha EV68
Speed : 1Ghz
Nombre de mailles
1 908* 1110 8500
(330000 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
École CEA/EDF/INRIA 08/11/2006 Page 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
École CEA/EDF/INRIA 08/11/2006 Page 40
Évolutions prévues
• 3 directions d’évolution respectant les 2 objectifs (cf. transparent 3)
Arcane core
Optimisations IA64Amélioration du load balancing
Parallélisme multi niveauxRaffinement/Déraffinement (AMR)
Arcane tools
Langages de compilation à la voléeTests unitaires
Bibliothèques de profiling
Arcane numeric tools
Matrices, vecteurs Solveur
Composant Newton
École CEA/EDF/INRIA 08/11/2006 Page 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
École CEA/EDF/INRIA 08/11/2006 Page 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