• Aucun résultat trouvé

Validation de Telemac-2D avec l’outil CADNA .1Implémentation de CADNA dans les codes sources

Etude de la propagation des erreurs d’arrondi dans un code industriel parall`ele

6.3 Validation de Telemac-2D avec l’outil CADNA .1Implémentation de CADNA dans les codes sources

L’outil CADNA et son fonctionnement ont été présentés dans lechapitre 3. Rappelons juste que cet outil implémente la méthode CESTAC dont l’idée de base est de faire chaque opé-ration arithmétique 3 fois avec un mode d’arrondi choisi aléatoirement. Cette méthode per-met ainsi de propager aléatoirement les erreurs d’arrondi et d’en déduire leurs impacts sur le résultat final. Afin de faciliter l’utilisation de CADNA dans les codes industriels, une ex-tension CADNA_MPI pour le standard de communication MPI a été développée (chapitre 4). CADNA utilise des types spéciaux double_st pour la double précision. Comme expliqué dans les exemples de lasection 3.3, l’implémentation de CADNA dans un code s’effectue en incluant le module CADNA et en remplaçant les types double precision par double_st. Cette opération de remplacement de types de données peut normalement se faire assez facilement en utilisant le programme sed55disponible sur toutes les distributions linux. Cependant, nous avons ren-contré quelques difficultés dans notre cas. Ces difficultés sont essentiellement dues à quelques spécificités du Fortran. Ces difficultés sont décrites ci-dessous.

1. Le module de base du système Telemac est la bief. Toutes les structures de données uti-lisées dans tout le système Telemac sont définies dans le module bief_def qui est alors appelé dans la bief. Le module bief est ensuite appelé dans presque tous les autres fichiers sources du système. Normalement pour implémenter CADNA dans le code Telemac-2D, il aurait fallu remplacer uniquement les types standards double precision par les types stochastiques double_st dans le module bief_def, et y appeler le module CADNA (ou 55. sed (abréviation de Stream EDitor) est un programme informatique permettant d’appliquer différentes trans-formations prédéfinies à un flux séquentiel de données textuelles. voirhttp://en.wikipedia.org/wiki/Sed

Chapitre 6. Etude de la propagation des erreurs d’arrondi dans un code industriel parallèle

Figure 6.4 – Décomposition de domaine et assemblage aux interfaces [Denis et al., 2011] (a) Focus sur un domaine partagé sur 4 processus : la partie de chaque processus est

matérialisée par une couleur. Le point d’interface aux quatre sous-domaines est le point noir au milieu

(b) zoom sur les quatre mailles du centre : les valeurs du point d’interface dépendent des va-leurs des points locaux. Ces vava-leurs sont obte-nues par réduction (par exemple une somma-tion) des quatre valeurs locales

(c) Ordres possibles pour l’opération de ré-duction

6.3. Validation de Telemac-2D avec l’outil CADNA

CADNA_MPI) pour activer l’utilisation de CADNA. En fait, afin d’optimiser le temps de compilation, les modules bief_def et bief ne sont pas inclus dans tous les fichiers. Par conséquent, le module CADNA a été rajouté à la main dans tous les fichiers qui le néces-sitaient.

2. Le Fortran 77 autorise des affectations avec le mot clé DATA. Ce type d’affectation n’est pas autorisé pour les structures de données (comme les types stochastiques). Il a donc fallu modifier les assignements de ce type. Cette modification a été faite à la main fichier par fichier.

3. Des difficultés ont également été rencontrées dans l’utilisation des fonctions "intrin-sèques" du Fortran (min,max). Les versions d’origine de ces fonctions peuvent avoir plus de deux paramètres contrairement aux versions définies dans CADNA. Ces dernières ne peuvent calculer que le minimum (respectivement le maximum) de deux valeurs alors qu’on peut calculer le minimum de n valeurs avec la fonction min de fortran. Pour cela, nous avons réécrit certains morceaux de codes à la main.

En revanche, l’implémentation de CADNA_MPI a été moins compliquée. Dans le système Telemac-Mascaret, il existe un module parallel qui est une surcouche pour les routines de munication. Ce module permet ainsi au code d’être indépendant des bibliothèques de com-munication. Cette surcouche a par exemple facilité le passage de PVM à MPI. A l’aide du pro-gramme sed, les MPI_DOUBLE ont été remplacés par des MPI_DOUBLE_ST.

6.3.2 Surcoût dû à l’utilisation de CADNA

Letableau 6.2présente la durée pour une simulation réalisée sur 40 pas de temps sur la Z600 (annexe A.2). Une exécution de la version normale de Telemac-2D dure environ 1 seconde en exécution séquentielle (nettement moins pour l’exécution parallèle), ce qui permet de mettre en évidence le surcoût en termes de durée d’exécution des simulations utilisant CADNA. Ce même calcul nécessite 76 secondes pour 4000 pas de temps pour une exécution séquentielle. La version intégrant CADNA nécessite quand à elle en séquentielle 8961 secondes pour le mode avec auto-validation et 3360 secondes pour le mode de base de CADNA. On note un rapport d’environ 44 entre les deux temps de calcul des exécutions quand on utilise le mode sans auto-validation de CADNA et un rapport de 117 quand on utilise le mode avec l’auto-auto-validation (ces deux modes de fonctionnement de CADNA ont été définis ensection 3.3).

Tableau 6.2 – Surcoût dû à l’utilisation de CADNA pour une simulation sur 40 pas de temps. Les mesures ont été recueillies sur la Z600. Le mode "Avec A-V" indique le mode d’auto-validation est activé. Dans le mode "Sans A-V", l’auto-d’auto-validation est désactivé.

Telemac-2D Telemac-2D CADNA Sans A-V Avec A-V

N Proc 1 1 2 4 1 2 4

Temps (s) 1 30 20 10 76 44 28

L’inconvénient principal de l’utilisation de CADNA est donc le surcoût qu’il engendre. Nous avons expliqué les raisons de ce surcoût dans le chapitre 5. Toutefois, nous insistons ici sur l’objectif fondamental des versions de codes intégrant complètement CADNA : ces ver-sions sont dédiées à l’étude de la qualité numérique des résultats produits et dans un second temps au débogage numérique. De fait, ces versions n’étant pas destinées à la production, on peut alors relativiser les surcoûts engendrés.

Chapitre 6. Etude de la propagation des erreurs d’arrondi dans un code industriel parallèle

6.3.3 Le diagnostic de CADNA et son analyse

Le principal apport de l’outil de validation CADNA réside dans le diagnostic qu’il propose à la fin des exécutions. Ce diagnostic est obtenu par l’activation du mode d’auto-validation. Voici ci-dessous le diagnostic proposé pour une simulation de 4000 avec un pas de temps dt = 1 seconde:

LISTING DE CADNA --- ---CADNA software --- University P. et M. Curie --- LIP6

CRITICAL WARNING: the self-validation detects major problem(s). The results are NOT guaranteed

There are 366216713 numerical instabilities 0 UNSTABLE DIVISION(S)

13887117 UNSTABLE POWER FUNCTION(S) 19508999 UNSTABLE MULTIPLICATION(S) 44635599 UNSTABLE BRANCHING(S)

6704983 UNSTABLE MATHEMATICAL FUNCTION(S) 6770 UNSTABLE INTRINSIC FUNCTION(S) 281473245 UNSTABLE CANCELLATION(S)

---Cependant, il nous a été difficile d’obtenir ce diagnostic pour plusieurs raisons. En effet, nous avons remarqué que suivant les paramètres du cas de test (pas de temps et précision), certaines exécutions avec CADNA ne se terminaient pas suite à l’apparition de boucles infi-nies. En fait, ces boucles infinies sont dues à des zéros informatiques (@.0) qui se propagent pendant l’exécution. Rappelons qu’un zéro informatique est obtenu si le nombre de chiffres significatifs d’un résultat est inférieur à 0 ou si tous ses échantillons Ri sont nuls (voir sec-tion 3.2.5). Normalement, il aurait fallu procéder l’étude de façon incrémentale : pour chaque instabilité détectée, il faut la corriger avant de relancer l’exécution du code avec CADNA. Cette façon de faire est tout simplement irréalisable. En fait, il est difficile d’exploiter les instabilités détectées à la fin du programme. Par exemple, nous avons remarqué que des zéros informa-tiques apparaissent assez rapidement au cours des simulations. Les résultats après l’apparition de zéro informatique n’ont aucune crédibilité et les instabilités détectées ne sont pas significa-tives. C’est d’ailleurs la raison pour laquelle, il est marqué dans le listing CADNA :

The results are NOT guaranteed

Partant de cette observation, nous nous sommes concentré principalement sur les cinq pre-miers pas de temps. Les débogueurs Intel (idbc) et GNU (gdb) ont été utilisés pour tracer les instabilités et ainsi trouver les fonctions qui génèrent le plus de problèmes numériques. Le dé-bogage numérique est expliqué en détail dans le prochain chapitre. Les instabilités détectées après un pas de temps sont des cancellations (élimination catastrophique) et des instabilités de branchement. Et puis, progressivement des multiplications et des fonctions mathématiques in-stables ont été détectées. Rappelons qu’une cancellation est détectée quand la différence entre les chiffres significatifs du résultat et des opérandes est supérieur à 4 (par défaut). Un branche-ment instable est détecté lorsque la différence entre les deux opérandes est un zéro informa-tique [CADNA Team, 2010]. Les cancellations détectées proviennent de la fonction bief_valida. C’est presque normal puisque cette fonction effectue des comparaisons entre des valeurs très proches.

6.4. Les algorithmes compensés

Finalement, le débogage numérique à l’aide de CADNA a permis de faire l’observation suivante : plus de 30% des instabilités détectées apparaissent dans les produits scalaires. Les produits scalaires sont utilisés pour calculer le résidu dans les méthodes itératives et dans les résolutions de systèmes linéaires creux. Cette observation confirme les hypothèses de [Denis et al., 2011] sur l’explication des instabilités numériques.

Dans la prochaine section (section 6.4), les différentes solutions pour améliorer la précision des produits scalaires sont présentées. Nous nous intéressons particulièrement aux algorithmes compensés. Nous montrons que ces types d’algorithmes constituent un compromis intéressant pour améliorer la précision des résultats sans détériorer les performances du code.

6.4 Les algorithmes compensés