Version 22 (modified by acosce, 12 years ago) (diff) |
---|
Intégration de Openmp dans LMDZOR - Dev 2012
Plan de travail succinct
- Vérifier que LMDZ5 présente toujours la reproductibilité des résultats entre MPI et MPI_OMP. (mode de compilation "debug")
- Extraire la branche OpenMP de Orchidee et la tester avec LMDZ5. (mode de compilation "debug")
- Modifier la trunk de Orchidee pour avoir la parallélisation OpenMP (mode de compilation "debug")
- Passer à une compilation en mode "prod"
LMDZ5
Les tests seront réalisés avec les conditions suivantes :
- Version LMDZ5/trunk rev 1652
- Compilation avec :
- -parallel mpi_omp
- -debug
- Execution avec :
- adjust=n
Tests des résultats en comparant les fichiers de restart : Après un mois de simulation on a bien reproductibilité des résultats entre
- le mpi pur (-paralle mpi) et le mpi_omp (-parallel mpi_omp)
- entre différents nombre de taches omp
A la fois sur Curie et sur titane
LMDZ5 ORCH_OMP
AVEC Check bounds
Les tests seront réalisés dans les conditions suivantes : configuration :
- LMDZ5 trunk 1652
- Orchidee branches/OpenMP rev 990
Compilation :
- Dans AA_make.gdef :
- -DCPP_OMP
- -check bounds -p -g -traceback -fp-stack-check -ftrapuv
- mpif90 -c -cpp -openmp
- Dans config/LMDZOR/Makefile :
- suppression de la clef -cpp ORCHIDEE_NOOPENMP
- -parallel mpi_omp
- -debug
Exécution :
- adjust=n
Tests sur Curie :
- Après un mois de simulation nous avons (comparaison des fichiers restart et Output)
32MPI * 4 OMP = 32 MPI * 2 OMP (simulations LOMixte01M et LOMixte03M)
- Après 1 an de simulation nous avons (comparaison des fichiers histoires et restart)
32MPI * 4 OMP = 32 MPI * 2 OMP (simulations LOMixte01M et LOMixte03M)
Tests à faire :
- Même comparaison sur 1 an
- Comparaison MPI pur vs MPI_OMP
- Comparaison en modifiant le nombre de process MPI
SANS check bounds
Plante
- Les tests avec totalview et ddt ne donnent rien
- plante dans qsat_moisture avec une division par ztemperature "floating invalid"
- si on met un print plante plus loin dans stomate (calcul de gdd dans where), si on met un print plante encore plus loin
Test avec la branche OpenMP SANS check bounds
Plante dans constante_veg : même division par ztemperature !!!
CONCLUSIONS + IDEES
- Revenir à la trunk de orchidee
- tester sur une autre machine
- A faire :
- sauvegarde svn - OK branches/OpenMP2
LMDZOR_v5 Sans OMP
TRUNK
- Lmdz/trunk 1628
- Ioipsl/trunk 1660
- Orchidee/trunk head (quel n° ?)
- libIGCM/trunk
- Routage = n
- adjust = 0
en O3
OK tourne
en debug
F_O = -DCPP_PARA -xHost -p -g -traceback -fp-stack-check -ftrapuv $(F_D) $(F_P) -I$(MODDIR) -module $(MODDIR)
- plante dans stomate (calcul de gpp_d dans stomate.f90 ligne 1159)
- Si on enlève stomate : plante dans hydrodc
Message de warning :
slowproc_update : No land point in the map for point 5 ,( 84.3157894736842 , -26.2500000000000 ) WARNING FROM ROUTINE slowproc_update --> Problem with vegetation file for Land Use. --> No land point in the map for point --> Keep old values. (verify your land use file.) slowproc_update : No land point in the map for point 24 ,( 82.4210526315789 , -26.2500000000000 ) (...) ATTENTION on prend de l eau au sol nu sur au moins un point car evapsno est tr op fort!
- Nicolas explique que cela vient d'un décalage entre la grille météo (LMDZ) et la grille de pftmap. Il propose de tester avec impose_veg=y dans orchidee.def --> plante toujours mais sans les messages
- ces messages n'apparaissent pas du tout en mode -O3
- ces messages n'apparaissent pas sur titane avec les mêmes options de compilation
Nouvel essai : on retire Xhost
F_O = -DCPP_PARA -p -g -traceback -fp-stack-check -ftrapuv $(F_D) $(F_P) -I$(MODDIR) -module $(MODDIR)
--> OK tourne sans planter + 24P mpi = 32P mpi après une journée de simulation
-xHost generate instructions for the highest instruction set and processor available on the compilation host machine
branches/OpenMP2/ORCHIDEE + LMDZ 1628
- 1 mois 32x2 = 1 mois 24x4 expérience clim - adjust=n - routing=n
- 5 jours 24x4 = 32x1 expérience clim - adjust=n - routing=n
- 5 jours 24x4 = 32 MPI pur expérience clim - adjust - routing=n
Vérification en MPI pur
Comparaison Branche/OpenMP2 avec Trunk/ORCHIDEE + LMDZ 1628
Compilation debug
Simulation de 1 an / clim / adjust = n / routing = n
- branches : LOMpiOMP04/ en mpi pur
- trunk : LOMpi03/ en mpi pur
- ATM/Output/MO/histmth identique
- SRF/Output/MO/history identique sauf q2m et t2m mais ces variables ont été réécrite pour enlever les valeurs à 10e19 sur les océans et se retrouvent inversées q2m=t2m ...
- SBG/Output/MO/history non comparable à cause de la sortie mensuelle dans une simulation et journalière dans l'autre
Comparaison Branche/OpenMP2 avec Trunk/ORCHIDEE + LMDZ4 AR5
Compilation debug
Simulation de 1 an / clim / adjust = n / routing = n
- branches : LOMpi05/ en mpi pur
- trunk : LOMpi04/ en mpi pur
- ATM/Output/MO/histmth identique
- SRF/Output/MO/history identique sauf q2m et t2m qui se retrouvent inversées q2m=t2m ...
- SBG/Output/MO/history identique
- Restart : identiques
Compilation prod
Simulation 1 mois / clim / adjust = n / routing = n
- branches : LOMpi05/ en mpi pur
- trunk : LOMpi04/ en mpi pur
--> OK
Routage
Deux simulations de 1 an
- Routage.T.01 --> version Trunk
- Routage.B.02 --> version branche comp en mpi
--> comparaison OK
Prochain test :
- avec correction routage Josefine
- orchidee offline
OMP trunk Orchidee rev 1078 + lmdz 1628
- correction : initialisation des variables lors de l'allocation dans sechiba.f90
Ex : ALLOCATE (vbeta4(kjpindex),stat=ier) IF (ier.NE.0) THEN WRITE (numout,*) ' error in vbeta4 allocation. We stop. We need kjpindex words = ',kjpindex STOP 'sechiba_init' END IF + vbeta4(:) = undef_sechiba
Compilation Debug
F_O = -DCPP_PARA -DCPP_OMP -p -g -traceback -fp-stack-check -ftrapuv -check bounds $(F_D) $(F_P) -I$(MODDIR) -module $(MODDIR)
1 an 32 MPI x 4OMP = 32 MPI x 1 OMP = 24 MPI x 2 OMP
Compilation -O0
F_O = -DCPP_PARA -DCPP_OMP -O0 $(F_D) $(F_P) -I$(MODDIR) -module $(MODDIR) -fp-model precise
1 an 32 MPI x 2 OMP = 32 MPI x 1 OMP