Title: EPSN : premiers pas Intgration de LOSS4D Olivier Coulaud
1EPSN premiers pasIntégration de
LOSS4DOlivier Coulaud
Journées MASSIM 13 nov. 2006
2Plan
- Lenvironnement EPSN
- Modèle
- Plate forme
- Intégration dune simulation
- API F90 et le fichier XML
- Équation de la chaleur
- Intégration de loss4d
3EPSN un environnement de pilotage de simulation
parallèle
4Objectifs de lenvironnement EPSN
- Utilisation
- Intégration facile dune simulation parallèle
(SPMD) déjà existante - Approche dirigée par le pilote, la visualisation
(système de requête)? - Plusieurs niveaux de pilotage dans le code
- Représentation de la simulation (positionner les
données dans la simulation)? - Validation sur des applications de grande taille
- Filtrage des données et/ou algorithme multi
niveaux - Performance
- Ne pas trop perturber la simulation
- Pas être intrusif thread pour lenvironnement
de pilotage (requêtes). - Extraction des données
- Nécessite de recouvrir Calculs/Communications
(plages daccès)? - Flux de transfert parallèle
- Réactivité
5Points clés de lenvironnement
- Interactions à distance
- Contrôle de lavancement de la simulation
- Accès en mémoire aux données
- Déclenchement des actions développées par
lutilisateur - Performance
- Ni traitement ni synchronisation hors des
requêtes de lutilisateur - Recouvrement des communications vers la
visualisation par le calcul de la simulation - Planification à la volée des traitements de
pilotage - RedSYM bibliothèque de redistribution des
données scientifiques - Scalaire, tableaux, particules, maillages non
structurés - Bloc cyclique, rectilinéaire, partitionnement de
maillage - Flux parallèles - MxN
6Le modèle Abstrait de pilotage
- Coté simulation
- Décrire la simulation (données, structure du
code) - Description des actions possibles
- Coté client
- Pilotage basé par un jeu réduit de requêtes
- Annotation des sources
- Région pilotable (plage dinteraction)?
7Modèle de description la structure du code (1)?
- Idée représentation hiérarchique du code
- Graphe de tâches hiérarchiques (HTG)?
- Inspiré des travaux de Girkar Polychronopoulos
(1994)? - Modèles Hiérarchiques de Tâches
- Arbre de tâches
- Capture du CFG
8Modèle de description la structure du code (2)?
- Les tâches du modèle
- Basic (bloc de lignes)?
- Boucle (while, for)?
- Conditionnel (if, switch)?
- Interaction
- breakpoint
- action point
- writing point
MHT permet de définir un système de datation du
flot dexécution
9Modèle de description accès aux données (1)?
- Modèle daccès aux données
- spécifie si une donnée est accessible, protégée
ou modifiée - automatise le processus dinstrumentation pour
les régions - accès et des dates de release des données
- transfert efficace recouvrement des
communications zero-copy sending
10Modèle de description accès aux données (2)?
11Modèle de description accès aux données (3)?
12Modèle de description cas dun code parallèle
- Structure du code
- Tous les processus suivent le même MHT
- On passe par la même structuration du code
- On a le même type et structure des dates
- Il faut coordonner les requêtes
- Éviter la synchronisation
- Planifier une date dans un futur proche
13Transferts de données / Redistribution
Approche générique de la redistribution de données
- Flux parallèle
- Découpe les messages pour maximiser le débit
- Description symbolique des données
- Distribution des données entre les processeurs
- Organisation en mémoire des données sur un
processeur.
M
Matrice de communications
- Approche modulaire et performante
14Le modèle de données dans EPSN
- Objets complexes
- Scalaires, tableaux, particules, maillages non
structurés - Plusieurs séries de données (vitesse, pression,
)? - Distributions
- Objets réguliers approche spatiale HPF,
rectilinéaire, implicite - Objets irréguliers
15Le modèle de données dans EPSN
- Description symbolique des données approche
spatiale - Distribution des données entre les processeurs
- Organisation en mémoire des données sur un
processeur - 3 étapes
- Décrire le domaine global
- Bloc (0,0) (N,M)?
- Décrire les domaines (blocs) que lon possède
- Bloc (X,Y) (Xa,Yb)?
- Décrire lagencement mémoire de ces blocs
- Bloc (X-offset,Y-offset) (Xaoffset,Yboffset)
?
(X,Y)?
16LArchitecture EPSN
17Architecture en couche
- Deux APIs
- Description de la structure du code (MHT) - EPSN
- Description des données - RedSYM
18Architecture EPSN
- Modèle de tâches hiérarchiques
- Cohérence en temps
- Synchronisation faible
Redistribution MxN RedGRID
19Le client générique SImulation MONitoring
interface for Epsn
20L'intégration d'une simulation
21Processus dintégration
Annotation des sources
Code de simulation
Code de simulation annoté
Construction
Compilation
Code de simulation Pilotable
Description XML du MHT
Données Identifiant, distribution,
Modélisation de la simulation Identifiant des
tâches, contexte des données Interactions
Écriture, modifications, actions
Lecture
22API Fortran 90
- Deux types KIND
- EPSN_KIND_STATUS
- EPSN_KIND_HANDLE
- Trois groupes de procédures
- Procédures générales
- EPSN_F90_Init
- EPSN_F90_Finalise
- EPSN_F90_Print
- Gestion des données
- EPSN_F90_Ready
- EPSN_F90_AddData
- EPSN_F90_UpdateData
- Description de la structure du code
- EPSN_F90_BeginHTM
- EPSN_F90_EndHTM
- EPSN_F90_BeginTask
- EPSN_F90_EndTask
- EPSN_F90_BeginLoop
- EPSN_F90_EndLoop
- EPSN_F90_Point
- Une variable globale
- EPSN_Status
- EPSN_SUCCES
- EPSN_FAILURE
23API Fortran 90 (1)?
- EPSN_F90_init( simulationName, xmlFilename,
myrank, totalNumberOfProcs, proxyNode)?
Initialise l'environnement EPSN création de la
thread EPSN associée au processus de simulation
ainsi que le proxy. Inscription de la simulation
dans le service de nommage
24API Fortran 90 (2)?
- subroutine EPSN_F90_Finalize()
- ferme l'environnement, supprime la simulation
dans le service de nomage.
subroutine EPSN_F90_Print() Affiche des
informations sur la simulation EPSN Data
Simulation name loss4d XML
file name loss4d.xml Number of
processes 4 my rank 0 Proxy on
node 0
25API Fortran 90 gestion des données
- subroutine EPSN_F90_AddData( handle_var )?
- INTEGER(EPSN_KIND_HANDLE), intent(IN)
handle_var - Ajoute un descripteur d'une variable décrite par
ReDSym dans EPSN.
subroutine EPSN_F90_UpdateData(name)? Spécifie
à l'environnement que la structure de donnée
associée à l'identifiant name a changé.
Nécessaire pour le caractère dynamique des
variables, cela peut impliquer de reconstruire la
matrice de communication.
subroutine EPSN_F90_Ready()? Spécifie à
l'environnement que les données sont accessibles
et allouées. A partir de cette fonction on peut
récupérer les données depuis un client.
26API Fortran 90 Description du MHT (1)?
- EPSN_F90_BeginHTM() Marque le début de la zone
modélisée par le MHT - EPSN_F90_EndHTM() Marque la fin de la zone
modélisée par le MHT
Exemple CALL EPSN_F90_BeginHTM()? DO J Jdeb,
Jfin DO I 1, NX Unp1(I,J)
ENDDO CALL EPSN_F90_EndHTM()?
Description en XML lthtm gt lt/htm gt
27API Fortran 90 Description du MHT (2)?
- EPSN_F90_BeginTask(name) Marque le début d'une
tâche nommée name - EPSN_F90_EndTask(name) Marque la fin d'une tâche
nommée name - name est l'identifiant de la tâche
- Permet de définir une plage pour le traitement
des requêtes
Exemple CALL EPSN_F90_BeginTask("update")? DO
J Jdeb, Jfin DO I 1, NX
Unp1(I,J) ENDDO CALL EPSN_F90_EndTask("u
pdate")?
Description en XML lttask id" update "gt lt/task
gt
28API Fortran 90 Description du MHT (3)?
- EPSN_F90_BeginLoop(name) Marque le début d'une
boucle nommée name - EPSN_F90_EndLoop(name) Marque la fin d'une
boucle nommée name - name est l'identifiant de la boucle
- Permet de définir un compteur d'itérations
(évolution des variables pilotables) - De plus, il faut mettre le corps de la boucle
dans une tâche.
Exemple CALL EPSN_F90_BeginLoop(
"timeLoop")? DO t 1, NB_ITERMAX !
Time loop CALL EPSN_F90_BeginTask("bodyLoop")?
.. CALL EPSN_F90_BeginTask(" bodyLoop
")? END DO CALL EPSN_F90_EndLoop( "timeLoop")?
Description en XML ltloop id"timeLoop"gt lttask id
" bodyLoop " /gt lt/loopgt
29API Fortran 90 Description du MHT (3)?
- EPSN_F90_Point(name) tâche ponctuelle
- name fait référence au non de la tâche
ponctuelle décrite dans le MHT - Forcément un surcoût si une requête est traitée
ou si une action est activée
Exemple CALL EPSN_F90_Point( " BeforeTimeLoop
")? DO t 1, NB_ITERMAX ! Time
loop .. END DO
Description en XML ltpoint id"BeforeTimeLoop" /gt
30Le fichier XML
- Décrit le modèle de pilotage
- data décrit les données du code
- interaction décrit les actions successibles
dêtre lancées - htm capture la structure du code et spécifie le
contexte des données - Structure du MHT
lt?xml version"1.0" encoding"UTF-8"
?gt ltsimulation id"heat"gt ltdatagt lt/datagt ltintera
ctiongt lt/interactiongt lthtm gt lt/htmgt lt/simulati
ongt
31Le fichier XML (Les données)
- Le groupe data représente les objets complexes de
RedSYM - Différents types scalar, grid, points, mesh
- lttype id"name" label"texte" /gt
- A chaque objet on peut associer une ou plusieurs
séries - Série une variable du code
- ltserie id"name" label"texte" /gt
- Exemple
ltdatagt ltpoints id"particles"gt
ltserie id"XYZ"/gt ltserie id"Charge"/gt
ltserie id"Mass"/gt ltserie
id"Velocity"/gt ltserie
id"Acceleration"/gt lt/pointsgt lt/datagt
32Le fichier XML (Les interactions)
- Le groupe interaction représente les actions que
l'on pourra effectuer dans une tâche - ltaction id"name" distribution-kind
"(locatedreplicated)" label"texte" /gt - Les champs
- distribution-kind spécifie comment est lancée
l'action - Exemple
ltinteractiongt ltaction id"particles"gt lt/i
nteraction gt
33Le fichier XML (la structure du code)
- Le groupe htm représente la structure du code
- Déclaration lthtm auto-start"truefalse"gt
- auto-start spécifie si la simulation démarre
toute seule ou si elle est stoppée sur la
procédure EPSN_F90_BeginHTM(). Dans ce cas elle
devra être débloquée par un client EPSN. - Les différents attributs
- Structure du code
- task, loop, switch, point
- Contexte
- data-context, action-context, bench-context
34Le fichier XML (la structure du code)
- Les attributs de contrôle task, loop, switch,
point - lttype synchronize(noautoblock) id"name"
label"texte" /gt - Les champs
- type task, loop, switch, point
- synchronize spécifie si on doit synchroniser
lorsque l'on rentre ou l'on sort de la structure,
attribut optionnel. Par défaut la valeur est à no - auto synchronise équivalent à MPI_BARRIER
- block arrête la simulation sur la tâche
Exemple lttask id"A" synchronize"no"gt lt/taskgt
35Le fichier XML (la structure du code)
- Les attributs de contexte data-context
- ltdata-context ref"name" context
(readablewritableprotectedmodified)/gt - Les champs
- ref identifiant de la variable. Il doit exister
dans le groupe data - context spécifie si dans la portée ou tâche le
statut de la variable - readable la variable est accessible en
lecture - writable la variable est accessible en
écriture - protected la variable n'est pas accessible
- modified la variable n'est pas accessible
et a été modifiée. Cette valeur permet de
spécifier qu'une nouvelle valeur de la série a
été produite
Exemple lttask id"advection"gt ltdata-context
ref"density" context"modified"/gt lt/taskgt
36Le fichier XML (la structure du code)
- Les attributs de contexte action-context
- ltaction-context ref"name" context
(allowedforbidden)/gt - Les champs
- ref identifiant de laction. Il doit exister
dans le groupe interactions - context spécifie si dans la portée ou tâche le
statut de la variable - Allowed laction est autorisée dans la
tâche - Forbidden laction est interdite dans la tâche
Exemple lttask id"advection"gt ltdata-context
ref"density" context"modified"/gt lt/taskgt
37Le fichier XML (la structure du code)
- Les attributs de contexte bench-context
- ltbench-context frequency "freq"/gt
- Le champ
- frequency fréquence en nombre de step de la
prise de temps, par défaut la valeur est à 1.
Exemple lttask idtimeLoop"gt ltbench-context
frequency 2"/gt lt/taskgt
38Un exemple
39Un exemple académique
- Équation de la chaleur
- Différences finies, grille structurée
- Deux étapes
- Mise à jour
- Swap
- Parallélisme MPI, maître, esclaves
- Esclaves SPMD, distribution en ligne
40Exemple annotation
CALL EPSN_F90_BeginLoop( "timeLoop")? DO t 1,
NB_ITERMAX ! Boucle en temps CALL
EPSN_F90_BeginTask("bodyLoop")? CALL
EPSN_F90_BeginTask("update")? DO J Jdeb,
Jfin DO I 1, NX Unp1(I,J)
ENDDO CALL EPSN_F90_EndTask("up
date")? CALL EPSN_F90_BeginTask("swap")?
Un(,) unp1(,) ! Swap
CALL EPSN_F90_EndTask("swap")? CALL
EPSN_F90_Point("after_update")? CALL
EPSN_F90_EndTask( "bodyLoop")? END DO CALL
EPSN_F90_EndLoop( "timeLoop")?
DO t 1, NB_ITERMAX ! Boucle en temps
DO J Jdeb, Jfin
DO I 1, NX Unp1(I,J)
ENDDO Un(,)
unp1(,) ! Swap
END DO
41Exemple annotation
DO t 1, NB_ITERMAX ! Boucle en temps
DO J Jdeb, Jfin DO I 1,
NX Unp1(I,J) ENDDO
Un(,) unp1(,) ! Swap
END DO
CALL EPSN_F90_BeginLoop( "timeLoop")? DO t 1,
NB_ITERMAX ! Boucle en temps CALL
EPSN_F90_BeginTask("bodyLoop")? DO J
Jdeb, Jfin DO I 1, NX
Unp1(I,J) ENDDO CALL
EPSN_F90_BeginTask("swap")? Un(,)
unp1(,) ! Swap CALL
EPSN_F90_EndTask("swap")? CALL
EPSN_F90_Point("after_update")? CALL
EPSN_F90_EndTask( "bodyLoop")? END DO CALL
EPSN_F90_EndLoop( "timeLoop")?
42Exemple description des données
- USE redsym
- INTEGER(EPSN_KIND_HANDLE) GlobalDomain,
LocalDomain, AllocatedLocalDomain - INTEGER(EPSN_KIND_HANDLE) Distribution1D,bloc
ks(1),grid - lower(1) 0 lower(2) 0 upper(1) Nx-1
upper(2) Ny-1 - call RedSYM_BlockInt_create(GlobalDomain,nb_dims,l
ower,upper)? - NBB Ny/ NB_PROCS lower(2) NBBrank
upper(2) lower(2)NBB - call RedSYM_BlockInt_create(blocks(1),nb_dims,lowe
r,upper)? - call RedSYM_DistributionInt_create(Distribution1D,
GlobalDomain, nb_blocks,blocks) - call RedSYM_Grid_create( grid, "heat",my_rank,
nb_procs, nb_dims ) - call RedSYM_Grid_addSerie(grid,"temperature",
REDSYM_DOUBLE ,1) - call RedSYM_Grid_setDistribution(grid,
Distribution1D)? - !
- Lower(2) Lower(2) offset upper(2) upper(2)
offset ! offset 1 - call RedSYM_BlockInt_create(AllocatedLocalDomain,n
b_dims,lower,upper)? - call RedSYM_Grid_wrapAllocatedBlock(grid,0,0,U(0,0
),AllocatedLocalDomain)?
43Exemple Fichier XML
lt?xml version"1.0" encoding"UTF-8"
?gt ltsimulationgt ltdatagt ltgrid
id"heat" label"champ des temperatures"gt
ltserie id"temperature" /gt lt/gridgt
lt/datagt
lthtm auto-start"false" gt ltdata-context
ref"heat" context"readable"/gt ltloop
id"timeLoop"gt lttask id"bodyLoop"gt
lttask id"update" /gt
lttask id"swap"gt
ltdata-context ref"heat" context"modified"/gt
lt/taskgt ltpoint
id"after_update" /gt lt/taskgt
lt/loopgt lt/htmgt lt/simulationgt
44Intégration de LOSS4D
45Quelques modifications pour GRID5000 et EPSN
- Portage pour gfortran, mpich-mx
- Remplacement de l'extension .f90 en .F90
- fft, comm, loss, poisson2dpp
- Makefile.include et MakeFile
- Développement dune visualisation simple dans
SIMONE pour la densité - Projection
46Modification make.include
- Création de l'entrée linuxEPSN EPSN
GRID5000 image EPSN gcc, g et gfortran 4.1
EPSN_FFLAGS -I(EPSN_TOP)/include
-I(REDGRID_TOP)/include EPSN_LDFLAGS
-L(EPSN_TOP)/lib -L(REDGRID_TOP)/lib
\
-Wl,-rpath,(EPSN_TOP)/lib,-rpath,(REDGRID_TOP)/l
ib EPSN_LIBS -lEpsnSimulation -lredsym
-lmetis MAKEmake LDFLAGS FFLAGS -O3
-D_FFTPACK_ -D__EPSN__ F90FLAGS -D_FFTPACK_
-D__EPSN__ -O3 -free-form ARFLAGS
FCmpif90 F90mpif90
47Modification Makefile
- Ajout de la variable et de la règle FFTLIB
dfftpack/libdfftpack.a - .F90.o verif (F90) (F90FLAGS) -c
(_at_.o.F90) - Création d'une dépendance particulière pour
comm.o - comm.o comm.F90 (F90) (F90FLAGS) -c
comm.F90 - Création d'une entrée pour compiler loss4d avec
EPSN - lossEPSN.o lossEPSN.F90
- (F90) (F90FLAGS) -c lossEPSN.F90
- lossEPSN verif fft (OBJS) comm.o lossEPSN.o
- (F90) (EPSN_LDFLAGS) (OBJS) (FFTLIB)
(EPSN_LIBS) (LIBS)-o _at_ _at_.o
48Notre approche
- Données
- densité décomposition bloc dans les 2 dernières
variables - Grille régulière 4d objet grid de RedSYM
- champs Ex, Ey, rho répliqués sur tous les
processus - On décide de mapper une décomposition bloc pour
récupérer les données en parallèle - Grille régulière 2d objet grid de RedSYM
- MHT
- Utiliser une plage daccès pour récupérer plutôt
quun point. - Point avant la boucle en temps
- plage calcul de E et les diagnostiques
49Exemple Fichier XML
Description des données
Description du code
ltdatagt ltgrid id"density" label"Density
function"gt ltserie id"fn0" /gt
lt/gridgt lt/datagt
lthtm auto-start"false"gt ltdata-context
ref"density" context"protected"/gt lttask
id"initStep"/gt ltpoint id"BeforeTimeLoop"gt
ltdata-context ref"density"
context"readable"/gt lt/pointgt ltloop
id"timeLoop"gt lttask id"bodyLoop"gt
lttask id"advection"gt
ltdata-context ref"density" context"modified"/gt
lt/taskgt lttask
id"computeEandDiagnostiques"gt ltdata-context
ref"density" context"readable"/gt
lt/taskgt lt/taskgt lt/loopgt lt/htmgt
Loss4d.xml
50Intégration dans loss4d
- Initialisation dEPSN dans le module
communication via la procédure - subroutine comm_initEPSN(dom,simulationName,xmlFi
lename,proxyNode)? - type(domain), INTENT(IN) dom
- CHARACTER(), intent(in) simulationName
- CHARACTER(), intent(in) xmlFilename
- integer, intent(in)
proxyNode - Instrumentation des données et du MHT uniquement
dans loss4d.F90
Comm.F90
lossEPSN.F90
51Le modèle de données dans EPSN
- Description symbolique des données approche
spatiale - Distribution des données entre les processeurs
- Organisation en mémoire des données sur un
processeur - 3 étapes
- Décrit le domaine global GlobalDomain
- Bloc (0,0,0,0) (Nvx,Nvy,Nx-1,Ny-1)?
- Nvx domproc_vxdomdom_vx-1
- Décrit le sous domaine (bloc) que lon possède
LocalDomain - Bloc (jstart,istart,0,0) (jend,iend,Nx-1,Ny-1)?
- Décrit lagencement mémoire du bloc
- Prise en compte des fantômes
(X,Y)?
52Exemple description des données
- USE moduleEPSN
- INTEGER(EPSN_KIND_HANDLE) GlobalDomain,
LocalDomain, AllocatedLocalDomain - INTEGER(EPSN_KIND_HANDLE) LastBlock2DDistribu
tion,blocks(1),grid -
- call RedSYM_BlockInt_create(GlobalDomain,nb_dims,l
ower,upper) -
- call RedSYM_BlockInt_create(LocalDomain,nb_dims,lo
wer,upper) - Blocks(1) LocalDomain nb_blocks 1
- call RedSYM_DistributionInt_create(LastBlock2DDist
ribution,GlobalDomain, nb_blocks,blocks) - call RedSYM_Grid_create( filed4d, "density",
domlocal_id, domnbprocs, nb_dims) - call RedSYM_Grid_addSerie(filed4d,"fn0",
REDSYM_DOUBLE ,1) -
- call RedSYM_BlockInt_create(AllocatedLocalDomain,n
b_dims,lower,upper)? - call RedSYM_Grid_setDistribution(field4d,
LastBlock2DDistribution)? - call RedSYM_Grid_wrapAllocatedBlock(
field4d,0,0,fn0(lower(1),lower(2),lower(3),lower(4
)), AllocatedLocalDomain)?
Création du domaine global
Création du domaine local
Création de la distribution
Construction des données un objet field4d, une
série fn0
Lien entre la distribution et la donnée
loss4dEPSN.F90
53Premier résultat (1)?
- Simulation cas test SGU40 - 32x32x64x64 16
processeurs - Client SIMONE (séquentiel chromium)?
54Premier résultat (2)?
- Simulation cas test SGU40 - 32x32x64x64 16
processeurs
plage trop petite pour le transfert
(sort-last)? Taille des données, paralléliser le
traitement