wiki:IntegrationOpenMP/Dev2012_LMDZOR

Version 9 (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
    • retirer is_root_prc dans hydrol

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)

1.9.5

Même problème si l'on compile avec

 F_O = -DCPP_PARA -xHost -p -g -traceback -fp-stack-check -ftrapuv $(F_D) $(F_P) -I$(MODDIR) -module $(MODDIR)