phil-blain / CICE

Development repository for the CICE sea-ice model
Other
0 stars 0 forks source link

Do MPI tests #33

Closed phil-blain closed 4 years ago

phil-blain commented 4 years ago

I did a 5-day test on gx3 with max 50 nonlinear iterations, 1x1 vs 2x1 vs 4x1. There are small differences (~1E-04) at a few points...

phil-blain commented 4 years ago

also, on daley a 32x1 test segfaults on gx1, not sure why

phil-blain commented 4 years ago

gx1

gx3

phil-blain commented 4 years ago

Je pense avoir trouvé l'erreur: https://github.com/phil-blain/CICE/blob/60d356d9eac9001dda284ae49b7f6db3df5fe2a1/cicecore/cicedynB/dynamics/ice_dyn_vp.F90#L842

étant donné que L2norm est déclaré de taille max_blocks, et n'est pas initialisée à zéro, si nblocks < max_blocks on additionne du garbage à la fin du tableau, et comme on initialise les tableaux à NaN on prends la racine carrée de NaN ce qui donne le "floating invalid".

phil-blain commented 4 years ago

J'ai corrigé ça dans 8bf95d1

Ça passe avec (vérifié sur ppp3):

gx3

gx1

phil-blain commented 4 years ago

@JFLemieux73 si tu veux rester au courant pour les tests MPI.

Je vais relancer le test gx1 5 ans sur daley maintenant que le bogue est réglé.

JFLemieux73 commented 4 years ago

Ok je vais etre plus present sur github. Q pour toi. C'est mieux de rouler sur banting ou daley (pour ne pas piler sur les pieds des ops)?

phil-blain commented 4 years ago

@JFLemieux73 cette semaine jai fait des tests sur gx1 pour 5 jours (sur daley) avec plusieurs décompositions MPI, mais c'est très lent sur gx1, même avec un max de 20 itérations. Je pense qu'il faudrait profiler le code pour déterminer si la lenteur est dans la communication MPI ou bien dans la façon dont le code est écrit ou les deux.. pas simple.

J'ai comparé les sorties entre les différentes décompositions et il semble avoir des différences surtout au ice edge, donc je me demande si il n'y a pas une erreur quelque part dans l'implémentation ou bien la communication avec les conditions frontières... as tu une référence pour ça au niveau numérique?

J'ai aussi lancé d'autres tests avec différentes décomposition sur la grille gx3, au moins ça roule plus vite je vais pouvoir avoir des résultats plus rapidement.

phil-blain commented 4 years ago

Plan: comparer 2x1 et 1x1:

phil-blain commented 4 years ago

Comparaisons 1x1 vs 2x1 (gx3)

donc je vais investiguer le PGMRES...

JFLemieux73 commented 4 years ago

C'est gx3? En réglant la question de l'initialisation avec des 0 peut-être que tu as réglé la question des différentes décompositions?

phil-blain commented 4 years ago

Oui c'est gx3. je vais essayer les différents préconditioneurs, et augmenter le nombre de pas de temps. J'espère qu'en effet ça va régler les différences entre les décompositions

JFLemieux73 commented 4 years ago

As-tu le même nb d'itération de fgmres et pgmres pour les 2 décomp?

Ca peut être le moment de mettre P*=0...ca va te guider pour trouver le problème.

phil-blain commented 4 years ago

Oui c'est les mêmes nombres d'itérations.

Ok bonne idée, je vais mettre P*=0.

phil-blain commented 4 years ago

Je pense que c'est normal que ça ne donne pas la même réponse avec différentes décomposition avec PGMRES.

Si tu te souviens (on s'en était déjà parlé), le PGMRES fait pas mal la même chose que FGMRES mais évite certaines communications (pour l'efficacité, vu que c'est juste un préconditioneur).

Donc, à mon avis, si on met les mêmes tolérances (reltol_fgmres et reltol_nonlin) pour les différentes décompositions, ça devrait être au final très proche. Par contre ici on limite le nombre d'itérations plutôt que d'itérer jusqu'à une certaine tolérance, donc je pense que c'est normal qu'on arrive pas au même résultat...

On peut s'appeler lundi pour en discuter.

phil-blain commented 4 years ago

J'ai fait des tests 1x1 vs 2x1 avec reltol_nonlin = 1e-6, 1e-8, 1e-10 sur 1 pas de temps:

1e-6

Capture d’écran 2020-06-29 à 15 45 26

1e-8

1e-8

1e-10

bit for bit.

Je vais ensuite faire un test sur une journée avec 1E-10, voir comment l'advection/ridging influencent le résultat.

phil-blain commented 4 years ago

Après une journée il y a quand même beaucoup de différences: Capture d’écran 2020-06-29 à 17 19 42

JFLemieux73 commented 4 years ago

C'est la diff de h (épaisseur)? Oui c'est pas mal gros. Essaie de voir ce qui est fait à la fin du evp avant de faire advection-ridging. On a peut-être oublié un truc.

phil-blain commented 4 years ago

Non c'est uvel. OK. je check ça

phil-blain commented 4 years ago

Je me suis rappelé que le sorties sont en simple précision... en regardant le restart à la place, après 1 pas de temps même à 1E-10 il y a des différences (environ 1E-14, avec EVP c'est bit for bit 1x1 vs 2x1)... j'ai comparé le code mais je n'ai pas encore trouvé qqch qui ferait une différence... je continue de chercher.

JFLemieux73 commented 4 years ago

1e-14 comme différence c'est quand même vraiment petit. Je serais surpris que ça donne des diff de 1e-02 après une journée. Tu pourrais regarder l'impact avec 1e-12 comme tolérance.

Quand tu fais un seul pas de temps tu fais aussi l'advection-ridging?

phil-blain commented 4 years ago

OK je vais faire des tests supplémentaires.

Oui, l'advection et le ridging sont à "on".

JFLemieux73 commented 4 years ago

Je ferais aussi un test avec P*=0. Selon moi dans ce cas tu vas avoir exactement la meme reponse apres le solveur et ca va te permettre de tester le reste de la mecanique.

phil-blain commented 4 years ago

J'ai fait un pas de temps à 1E-12, avec P = 0 et P = la valeur par défaut.

Avec P* = 0 j'ai des différences des 1E-18. Avec la valeur par défaut j'ai des différences de 1E-15.

J'ai essayé de rouler une journée à 1E-12 (avec Pstar non modifié), mais ça prenait plus qu'une heure et le walltime sur ma station est 1 heure (en mode batch)... il s'est rendu à 10 heures. après 10 heures la différence était de 1E-9.

Je vais refaire le test 1 journée à 1E-10 pcq moi aussi je trouve ça suprenant que ça donne 1E-2 après 24 heures... peut-être que je m'étais trompé.

JFLemieux73 commented 4 years ago

Si tu roules une journée mais que tu utilises la matrice identité comme precond est-ce que c'est bfb? Ca te dirait au moins que le reste de la mécanique est ok et que c'est seulement pgmres qui donne des différences.

JFLemieux73 commented 4 years ago

En passant pour le 1e-12 ca se peut que tu ne puisses pas te rendre à ça car c'est trop près de la précision machine.

JFLemieux73 commented 4 years ago

Tu verrais le l2norm oscillé dans ce cas autour d'une valeur très basse.

phil-blain commented 4 years ago

Je vais refaire des tests avec les autres precond.

phil-blain commented 4 years ago

une journée, precond=diag, reltol=1E-8 => différences autour de 1E-6 à la fin de la journée (pour uvel, vvel)

phil-blain commented 4 years ago

Je viens de partir un journée, précond=ident, reltol=1E-8, mais ça a pris 40 minutes faire un pas de temps en 2x1... il s'est rendu au maximum d'itérations nonlinéaires (5000)...

phil-blain commented 4 years ago

Le solveur semble avoir le comportement attendu selon les résultats ci-dessus. Je vais fermer cette issue. Au besoin j'en ouvrirai une autre si/quand je ferai plus de tests.