Octobre 2022 ================================================================================ Options de compilation gfortran & ifort ================================================================================ gfortran: ### nemo0 : from NEMO Seb Oct 2022 # export FFLAGS1="-fdefault-real-8 -Og -g -fbacktrace -funroll-all-loops -fcray-pointer -ffree-line-length-none -fcheck=all -finit-real=nan -ffpe-trap=invalid,zero,overflow -ffpe-summary=invalid,zero,overflow" ### nemo1 : from NEMO Seb Oct 2022 + add -fdefault-real-8 for conflict REAL16 REAL8 with AGRIF export FFLAGS1="-fdefault-real-8 -fdefault-double-8 -Og -g -fbacktrace -funroll-all-loops -fcray-pointer -ffree-line-length-none -fcheck=all -finit-real=nan -ffpe-trap=invalid,zero,overflow -ffpe-summary=invalid,zero,overflow" ### nemo1_underflow : nemo1 + underflow (pour VISC2 = NaN avec PISCES & VISC2 = 1.126-310 sans PISCES) mais pas pour pisces (bloque sur exp ~= 0) # export FFLAGS1="-fdefault-real-8 -fdefault-double-8 -Og -g -fbacktrace -funroll-all-loops -fcray-pointer -ffree-line-length-none -fcheck=all -finit-real=nan -ffpe-trap=invalid,zero,overflow,underflow -ffpe-summary=invalid,zero,overflow,underflow" ifort: ### nemo0 : NEMO Seb Oct 2022 export FFLAGS1="-i4 -r8 -g -O0 -debug all -traceback -fp-model strict -ftrapuv -check all,noarg_temp_created -fpe-all0 -ftz -init=arrays,snan,huge" ================================================================================ proposer à croco une modification des scripts CVTK pour choisir des options de compilation propre à chaque test et emmener progressivement vers des options de plus en plus stricts pour tous les tests!!! Avec interdiction de rétrograder!!!!! POUR LA REPRODUCTIBILITE MPI AGRIF + PISCES: EVITER dans un premier temps BIO_HADV_WENO5 Tourner sans NOLAND au début car partie plus récente. ou ACTIVER pour gain de temps! homogénéiser CVTK ou RVTK dans croco!!! Feuille de route retour Toussaint: p4zche !!! commencer les tests ci dessous tout en échangeant avec Rachid au plus vite sur les spécificité AGRIF PISCES;.. sachant tout le travail de mise au propre récent. agrif OK. Pisces OK. avec toutes les options DEBUG fortes avec ifort et avec gfortran. (éventuellement avec git, refaire un test sur chaque machine maintenant que tout est oK pour si plantage sur une des machines qui donne encore une piste avant AGRIF+PISCES. Reprendre là! (Et en parallèle tracer et nettoyer selon planning ci dessous) Penser à sans BIO_HADV_WENO5... mais pour la reproductibilité. Pas pour des dépassements de tableaux! ... ou pourquoi pas??? Traquer le décalage d'indice avant p4zche... dès le début de la grille fille pour la bio!!! Regarder les autres procs. Pour voir si décalage de 2 et 2 et non 2 et 4... Plantage sur p4zche... en fait on voit sur output.run.txt que tout est OK pour la grille mère mais plante au début de la bio pour la grille fille... Avec ddt on voit bien que les valeurs sont bonnes pour p_alkcb sur le premier passage grille mère. Le NaN apparait au passage grille fille!! Valeurs OK pour le début de la boucle pour la grille fille. le NaN apparait sur la premiere valeur pour jk=31 (ji=jj=1) p_alkcb = NaN mais surtout ji = 1 : 87 => -2 : 90 !!!! jj = 1 : 120 => -2 : 124 !!!! jk = 1 : 32 OK Pour le proc 0. Voir sur les autres procs. Ca fait penser au décalage des halos!! en fait: d'après DDT... pour trb sur DATARMOR Grille mère : -2:88 -2:88 Grille fille : -2: 90. -2:124 CHRIS ji= 1 jj= 1 jk=31 K= 2 jptal=2 jpdic=1 trbtal= NaN trbdic= NaN rhop=0.102500E+04 borat=0.429428E-03 p_alkcb= NaN CHRIS ji= 1 jj= 1 jk=32 K= 1 jptal=2 jpdic=1 trbtal= NaN trbdic= NaN rhop=0.102500E+04 borat=0.429237E-03 p_alkcb= NaN en plus sur DATARMOR, Plein de messages sur agrif... Et si la chaine de caractère passait les noms des traceurs.. => 25 au lieu de 2 !!!! Si PISCES!!!! At line 520 of file AGRIF_FILES/modmpp.F90 Fortran runtime warning: An array temporary was created Mettre plein de print dans la boucle p_alkcb... dimensions, i j k Printer pour les 4 procs sur i=1 j =1 puisque le NaN apparait là sur la 31eme couche. S'assurer avant qu'il n'y a pas de probleme de jk-1 ou inversion K mais Tout se passe bien pour la grille mère. C'est ce qu'on peut vérifier en faisant tourner agrif pisces agrif + pisces et comparer si les comportement sont identiques dans les 3 pour la grille mère. Si oui, alors ça incrimine le passage par le conv AGRIF. Se demander si la grille avec ou sans halo de 1 ou de 2 peut avoir un effet différent dans le conv;, Ou plutot quelle spécificité agrif pisces entre grille mère et grille fille. puis traquer avec ddt l'appel dans p4zche_.f de la routine transformée par le conv AGRIF. Etrange que visc2 non lu dans croco.in crée un Nan ou un unnderflow (2.3 e -310). Les options devraient mettre à NaN!!! Traque du VISC2 underflow avec AGRIF sans pisces en remettant les options d'underflow. => DDT sur IRENE VERIFIER tous les PRIV_3D_BIOARRAY!!! Si N+1!! traquer les trb(ji,jj,jk.. au lieu de trb(ji,jj,K... Pour quels champs dans PISCES? à part temperature, salinité, densité. une fois les NaN éliminés... piste de la longueur des chaines de caractères à corriger d'après Rachid pour AGRIF qui pourraient avoir des effets de bord. Rachid -heap. Et ulimit ? Ajouter un ulimit dans chaque header??? mais Ulimit unlimited stack size si batch mais pas si interactif!!! -heap-arrays. [ size] Profiling de la mémoire Sur IRENE!!!! Des outils indiqués par la hotline dans des échanges précédent sur DDT je crois! Que dit le compile si mauvais flag??? -heap-array au lieu de -heap-arrays Sur IRENE-ADM Format ifort pour pisces output.run.txt Options ifort: assume noold_ldout_format CVTK pour NOLAND???? bugfix PISCES (Commit 12d31843) Grand maitre Olivier suggère même de virer les tests (apparemment redondant) comme il l’a fait dans NEMO…… cf mail Steph du 18 Octobre à 10h20 REGARDER les warnings de JEANZAY avec ifort!!!!! ocean2pisces_.f90(1118): warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [PVAR] SUBROUTINE iom_g3d( kiomid, kdom, cdvar, pvar, ktime ) --------------------------------------------^ ocean2pisces_.f90(1110): warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [PVAR] SUBROUTINE iom_g2d( kiomid, kdom, cdvar, pvar, ktime ) Inscription Mailing list Nemo (ou surveiller les bugfix PISCES) Seb : options de NEMO pour mode PROD aussi Options ifort attention ... > intel 2019 et NaN??? Seb : Toutes les docs sur compilateur et debugger + cours (IEEE simple, double...)!! Renaud : Récup doc pisces de la formation. dont présentation avec les routines... doc technique en cours... doc ddt - client ou non...mais lenteur d'affichage si pas client - sur datarmor OK en local ou client, mais probleme license pour client.... maid peut-être pas un problème parce que sur IRENE même message - ddt_COMPUTER.sh git pulsation Doc CVTK Datarmor -------------------------------------------------------------------------------- x_sponge undeflow avec options gfortran. -------------------------------------------------------------------------------- affectée dans set_nudgcof.F dans notre cas (message explicite dans output.run.txt) mais printée dans put_global_atts pour wrt_his.... => valeur à 2.3 e-310... -------------------------------------------------------------------------------- agrif & agrif + pisces : VISC2 = n'importe quoi pour la grille fille avec gfortran/ -------------------------------------------------------------------------------- NaN ou 1.126-310 avec gfortran 0 avec ifort test_SPIRIT_022F_agrif_pisces_gfort__2x2_proc_DEBUG_nemo1___PLANTE___p4zche_.f90_line_1253/output.run.txt: 0.000E+00 visc2 Horizontal Laplacian mixing coefficient [m2/s] test_SPIRIT_022F_agrif_pisces_gfort__2x2_proc_DEBUG_nemo1___PLANTE___p4zche_.f90_line_1253/output.run.txt: NaN visc2 Horizontal Laplacian mixing coefficient [m2/s] test_SPIRIT_022F_agrif_pisces_ifort__2x2_proc_DEBUG_nemo0___PLANTE___p4zche_.f90_line_1253/output.run.txt: 0.000E+00 visc2 Horizontal Laplacian mixing coefficient [m2/s] test_SPIRIT_022F_agrif_pisces_ifort__2x2_proc_DEBUG_nemo0___PLANTE___p4zche_.f90_line_1253/output.run.txt: 0.000E+00 visc2 Horizontal Laplacian mixing coefficient [m2/s] test_SPIRIT_031F_agrif_gfort__2x2_proc_DEBUG_nemo1___OK___mais_messages_mpi/output.run.txt: 0.000E+00 visc2 Horizontal Laplacian mixing coefficient [m2/s] test_SPIRIT_031F_agrif_gfort__2x2_proc_DEBUG_nemo1___OK___mais_messages_mpi/output.run.txt: 1.126-310 visc2 Horizontal Laplacian mixing coefficient [m2/s] test_SPIRIT_032F_agrif_ifort__2x2_proc_DEBUG_nemo0___OK/output.run.txt: 0.000E+00 visc2 Horizontal Laplacian mixing coefficient [m2/s] test_SPIRIT_032F_agrif_ifort__2x2_proc_DEBUG_nemo0___OK/output.run.txt: 0.000E+00 visc2 Horizontal Laplacian mixing coefficient [m2/s] AGRIF seul: visc2 = 1.126-310 => compris comme = 0 => OK AGRIF + PISCES : visc2 = NaN pourtant : pour croco.in & croco.in.1 : time_stepping_nbq: NDTNBQ CSOUND_NBQ VISC2_NBQ 1 1000 0.01 ... lateral_visc: VISC2, VISC4 [m^2/sec for all] 0. 0. Dans les 2 cas, la valeur devrait être initialisée à zéro!!!! => un NaN se ballade dans pisces pour la viscosité!! Ca plante sur p4zche, mais peut-etre que c'est la même chose que nos plantages sur p4zfechem ou autres... qui changeait tout le temps, mais toujours sur une routine PISCES. REGLER CE PROBLEME SANS PISCES! avec l'option underflow, on l'aurait trouvé dans croco sans pisces. => Faire en sorte de mettre l'underflow pour les tests CVTK, sauf pour les tests PISCES en attendant une transformation éventuelle des calculs EXP au fond. -------------------------------------------------------------------------------- AGRIF sans pisces : MESSAGES MPI avec gfortran -------------------------------------------------------------------------------- lié à VISC2 ? SPIRIT: vi /data/cholod/croco/BENGUELA_VHR/exp/from_LR/jobs/test_SPIRIT_031F_agrif_gfort__2x2_proc_DEBUG_nemo1___OK___mais_messages_mpi___KEEP_TO_REPORT/output.run.txt At line 411 of file AGRIF_FILES/modmpp.F90 Fortran runtime warning: An array temporary was created for argument '_formal_7' of procedure 'mpi_send' -------------------------------------------------------------------------------- agrif+pisces : p4zche.F90 : -------------------------------------------------------------------------------- Est ce lié au visc2=NaN ???? sinon, diff avec la version de NEMO sans doute intéressant: IRENE: vimdiff /ccc/work/cont005/gen1140/hourdinc/croco/sources/croco_CapeTown/PISCES/p4zche.F90 \ /ccc/work/cont005/gen1140/hourdinc/nemo/sources/nemo_trunck_2022_10_24/src/TOP/PISCES/P4Z SPIRIT: vimdiff /data/cholod/croco/sources/croco_CapeTown/PISCES/p4zche.F90 \ /data/cholod/nemo/sources/nemo_trunck_2022_10_24/src/TOP/PISCES/P4Z/ Mais Olivier dit que pas de différence à part la différence de densité (rhd) au lieu de la densité (rhop) pour limiter le nombre de variables dans NEMO => un rapport de 1000 test_SPIRIT_022F_agrif_pisces_gfort__2x2_proc_DEBUG_nemo1___PLANTE___p4zche_.f90_line_1253/ test_SPIRIT_022F_agrif_pisces_ifort__2x2_proc_DEBUG_nemo0___PLANTE___p4zche_.f90_line_1253/ sur IRENE: plus bavard: vi /ccc/work/cont005/gen1140/hourdinc/croco/BENGUELA_VHR/exp/bvhr_CapeTown_01/jobs/test_IRENE_022F_agrif_pisces_ifort__2x2_proc_DEBUG_nemo0___PLANTE___p4zche_.f90_line_1253___KEEP_TO_REPORT/output.run.txt ... 1250 p_dictot = t(ji,jj,N+1-jk,nnew,itemp+ntrc_salt+jpdic) * 1000. / ((rho0+rho1(ji,jj,N+1-jk)) + rtrn) 1251 p_bortot = borat(ji,jj,jk) 1252 IF (p_alkcb <= 0.) THEN ==> 1253 p_hini(ji,jj,jk) = 1.e-3 1254 ELSEIF (p_alkcb >= (2.*p_dictot + p_bortot)) THEN 1255 p_hini(ji,jj,jk) = 1.e-10 1256 ELSE ==== backtrace (tid: 82586) ==== 0 0x0000000000053755 ucs_debug_print_backtrace() /tmp/ucx/1.9.0/system-system/ucx-1.9.0/src/ucs/debug/debug.c:656 1 0x0000000000518394 p4zche_mp_sub_loop_ahini_for_at_() /ccc/scratch/cont005/gen1140/hourdinc/croco/croco_scratch_IRENE/p4zche_.f90:1253 2 0x0000000000514dbe p4zche_mp_ahini_for_at_() /ccc/scratch/cont005/gen1140/hourdinc/croco/croco_scratch_IRENE/p4zche_.f90:1163 -------------------------------------------------------------------------------- agrif+pisces : VSPONGE absent dans croco.in.1 -------------------------------------------------------------------------------- IRENE + gfortran + DEBUG nemo1 : plante à l'execution (pas sur SPIRIT) /ccc/work/cont005/gen1140/hourdinc/croco/BENGUELA_VHR/exp/bvhr_CapeTown_01/jobs/test_IRENE_031F_agrif_gfort__2x2_proc_DEBUG_nemo1___PLANTE___wrt_his-put_global_atts_.f_line_2586_xv_sponge_visc2_NaN dans output.run.txt : 5 0x000000000054f99d sub_loop_put_global_atts_() /ccc/scratch/cont005/gen1140/hourdinc/croco/croco_scratch_IRENE/put_global_atts_.f:2586 dans put_global_atts_.f:2586 : ierr=nf_put_att_double(ncid,nf_global,'x_sponge',nf_ftype, 1, & x_sponge) ierr=nf_put_att_double(ncid,nf_global,'v_sponge',nf_ftype, 1, & v_sponge) -------------------------------------------------------------------------------- pisces : underflow sur les exponentielles passé une certaine profondeur -------------------------------------------------------------------------------- Exemple de p4zopt calcul des exponentielles couteuses et intuiles en profondeur Exponentielle trop proche de zéro => underflow du coup empêche l'option underflow ... qui pourtant aurait pointé le bug d'initialisation de VISC2 avec AGRIF sans PISCES Trace de plantage dans p4zopt. Sur exp à k=25 -------------------------------------------------------------------------------- probleme des doubles .D0 imposés par AGRIF. -------------------------------------------------------------------------------- => forcer la compilation pour gfortran avec -fdefault-real-8 -fdefault-double-8 Mais le conv AGRIF passe les 1. en 1.D0. Volontaire pour double précision pour AGRIF? Mais passer à _wp pour éviter les problèmes? -------------------------------------------------------------------------------- p4zsbc.F90 : for a consistent syntax in pisces -------------------------------------------------------------------------------- commit prêt sur SPIRIT. 216,217c216,217 < DO jj = Jstrp, Jendp < DO ji = Istrp, Iendp --- > DO jj = JRANGE > DO ji = IRANGE