Version 45 (modified by acosce, 12 years ago) (diff) |
---|
Intégration de la parallélisation mixte MPI-OpenMP dans les configurations de l'IPSL
- Intégration de la parallélisation mixte MPI-OpenMP dans les configurations …
Objectif == Utiliser au maximum les machines de type SMP (vargas, titane, platine, jade) en s’affranchissant de la limitation du nombre de processus MPI (3 bandes de latitudes par process MPI)
et des problèmes éventuels de mémoire intra-nœud en particulier lorsqu’on monte en résolution grâce à l'utilisation de la parallélisation mixte MPI-OpenMP (MPI inter-noeud, OpenMP intra-noeud).
Description du travail == Voir le document là : OpenMP.pdf
Commandes et entêtes des différentes machines
Les entêtes des jobs et les commandes sont détaillés pour les différentes machines. Il y a le lancement d'un exécutable séquentiel ou parallèle et de plusieurs exécutables.
- Entêtes et commandes SX9 : IntegrationOpenMP/EnteteCommandesSX
- Entêtes et commandes vargas : IntegrationOpenMP/EnteteCommandesVargas
- Entêtes et commandes jade : IntegrationOpenMP/EnteteCommandesJade
- Entêtes et commandes titane : IntegrationOpenMP/EnteteCommandesTitane
- Entêtes et commandes curie : IntegrationOpenMP/EnteteCommandesCurie
Intégration dans libIGCM - Evolution du travail
Exemple de config.card
ATM= (gcm.e, lmdz.x, 16MPI, 2OMP)
libIGCM
- Voir branche dédiée : https://forge.ipsl.jussieu.fr/libigcm/browser/branches/libIGCM_MPI_OpenMP
- 29 mars 2012 : merge avec libIGCM trunk. https://forge.ipsl.jussieu.fr/libigcm/browser/trunk/libIGCM
Réunion "cahier des charges" le 7/10/2010 au LSCE
Présents : Anne, Olivier, Yann, Martial, Arnaud
Une discussion autour des premiers développements de Martial a abouti aux conclusions suivantes :
- On part sur l'idée d'avoir des informations dans le config.card relatives au nombre de process MPI et tâches openMP pour chaque exécutable.
Ce config.card est donc propre à une configuration et à une machine par défaut, ce qui signifie qu'une configuration particulière tournera "sans rien changer" sur une seule machine. Pour adapter ce config.card en vue de tourner sur une machine différente de la machine par défaut, il faudra modifier à la main le config.card grâce à de l'information disponible soit sur une page wiki soit dans chacune des configurations (mais un peu lourd à entretenir !).
- L'utilisation de ces informations se fera ensuite en deux étapes grâce à des fonctions/scripts (définies dans libIGCM_sys/libIGCM_sys_mercurex9.ksh par exemple) :
- lecture dans le Job de soumission(au niveau du IGCM_config_Initialize) des informations contenues dans le config.card.
- le lancement du modèle lui-même : on remplace la ligne de commande actuelle ${MPIRUN_COMMAND} ${MPIRUN_OPTIONS} ./${config_Executable_Name} >> ${Exe_Output} 2>&1 par le lancement d'un script, dans lequel seront utilisées les infos recoltées dans le config.card
- sera lancé le modèle de la facon appropriée (./gcm.e, ./orchidee_ol, mpirun -f config_file, mpiexec...)
Le script sera construit dans la couche système de la machine et testera le type de configuration à lancer. En particulier, il détectera une configuration couplée à partir de l'existence de la composante CPL.
ins_job de modipsl sera modifié à terme pour supprimer l'utilisation de JobNumProcTot et utiliser à la place les paramètres MPI/OMP/NOD de lancement par éxécutable dans le config.card. Cela signifie que ins_job utilisera la procédure de lecture de ces paramètres dans libIGCM.
Cette première approche va etre développée/completée/affinée/testée sur un cas concret par Martial, Arnaud et Anne. Ce cas concret est le suivant :
- une machine : mercure SX9
- seulement MPI
- trois configurations tests : IPSLCM5A, LMDZINCA, ORCHIDEE_OL
Un nouveau point sera fait à la suite de cela.
intégration de OpenMP dans libIGCM
Pour l'instant (30/05/2011), l'intégration de MPI/OpenMP n'a été réalisé que sur titane, et est en attente d'un tag libIGCM pour être
placée sur une branche libIGCM_AllPara. Les tests sont fait à partir de la config LMDZ4OR_v3 et continuerons avec IPSLCM5A.
Cette première version est accessible sur le chemin :
titane.ccc.cea.fr: /work/cont003/p86manci/LMDZ4_OR/libIGCM/
12/8/2011
Martial a intégré dans libIGCM_sys/vargas ce qu'il faut pour lancer une execution.
- Test fait sur vargas avec IPSLCM5A, MPI seulement. NEMO sur 5 MPI, oasis sur 1 et LMDZ sur 26. Fonctionne. Impeccable.
- Modifications à intégrer dans :
- PARAM/run.def (fft=n)
- config.card (suppression de jobrunoptions, nb procs global et par executable)
- COMP/lmdz.driver (gestion Bands : XXXX_Bands_96x95x39_26MPI_1OMP.dat_3)
- COMP/oasis.driver (namcouple et plus de création de runfile là)
- COMP/lmdz.card
modification simple du config.card
[Executable] Name=run_file #D- For each component, Real name of executable, Name of executable for oasis ATM= (gcm.e, lmdz.x, 8MPI, 4OMP) SRF= ("", "") SBG= ("", "")
permet dans cet exemple d'utiliser 8 processus MPI, chacun divisés en 4 tâches OpenMP.
Comment binder (fixer) les processus ?
Sur titane, on utilise automatiquement les modules "openmp" :
module load openmp/${max_omp}thds
en fonction du nombre maximum de tâches OpenMP demandées.
Sur un PC linux, il est possible de "binder" un processus à un coeur physique avec :
- taskset -c 0 -p PID (voir ~/PROG/COURS/OpenMP/taskset)
- On peut aussi utiliser la bibliothèque numactl qui permet un déploiment très précis des tâches en fonction des architectures (pour les experts).
Intégration dans les modèles
LMDZOR
2010 / 2011
Développements et tests 2010 - 2011 sur cette page
2012
Développements et tests 2012 sur cette page
Attachments (5)
- OpenMP.pdf (26.6 KB) - added by aclsce 14 years ago.
-
LOOMP4_Bands_96x95x39_2MPI_4OMP.dat_3
(200 bytes) -
added by mmaipsl 13 years ago.
Bandes pour compile OpenMP 2MPI 4OMP
-
LOOMP32_Bands_96x95x39_8MPI_4OMP.dat_3
(800 bytes) -
added by mmaipsl 13 years ago.
Bandes pour compile OpenMP 8MPI 4OMP
-
LOOMP_1_Bands_96x95x39_8MPI_1OMP.dat_3
(800 bytes) -
added by mmaipsl 13 years ago.
Bandes pour compile OpenMP 8MPI 1OMP
-
LMPIOMP3_Bands_96x95x39_8MPI_1OMP.dat_3
(800 bytes) -
added by mmaipsl 13 years ago.
Bandes pour compile MPI seul 8MPI '0'OMP
Download all attachments as: .zip