= Intégration de Openmp dans LMDZOR - Dev 2012 = [[PageOutline]] == 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 [[BR]] * 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 [[BR]]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''' [[BR]] Simulation de 1 an / clim / adjust = n / routing = n [[BR]] * 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''' [[BR]] Simulation de 1 an / clim / adjust = n / routing = n [[BR]] * 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''' [[BR]] Simulation 1 mois / clim / adjust = n / routing = n [[BR]] * 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 = 24 MPI x 4OMP === Compilation -O1 === {{{ F_O = -DCPP_PARA -DCPP_OMP -O1 $(F_D) $(F_P) -I$(MODDIR) -module $(MODDIR) -fp-model precise }}} 1 an 32 MPI x 1 OMP = 24 MPI x 2 OMP