= 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 * retirer is_root_prc dans hydrol === LMDZOR_v5 Sans OMP === * Lmdz/trunk 1628 * Ioipsl/trunk 1660 * Orchidee/trunk head (quel n° ?) * libIGCM/trunk * Routage = n * adjust = 0 ==== en O3 ==== OK tourne ==== en debug ==== * plante dans stomate (calcul de gdd) * 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 --> cela ne plante plus * ces messages n'apparaissent pas du tout en mode ''-O3'' * ces messages n'apparaissent pas sur titane avec les mêmes options de compilation