wiki:IntegrationOpenMP/Dev2012_LMDZOR

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

Compilation -O1