Vous êtes sur la page 1sur 3

CSMA 2017

13me Colloque National en Calcul des Structures


15-19 Mai 2017, Presqule de Giens (Var)

Tester la qualit numrique des codes de calcul avec Verrou


F. Fvotte1 , B. Lathuilire1

1 EDF R&D, dpartement PERICLES, {francois.fevotte, bruno.lathuiliere}@edf.fr

Rsum Loutil V ERROU vise faciliter le diagnostic et la correction des erreurs de calcul dans
les outils de simulation industriels. Ces erreurs, dues aux proprits de larithmtique flottante, peuvent
tre dtectes et quantifies grce lArithmtique en Arrondi Alatoire (AAA). V ERROU utilise cette
arithmtique pour instrumenter les codes de calcul sans avoir besoin de les recompiler. Des fonctionna-
lits plus avances de V ERROU permettent aussi de localiser dans le code source lorigine des erreurs,
facilitant ainsi le dboguage numrique.
Mots cls qualit numrique, arithmtique flottante, arithmtique stochastique.

1 Introduction
Comme de nombreux autres industriels, EDF sappuie fortement sur la simulation numrique pour
conduire ses activits, quil sagisse par exemple dassurer la sret de son parc de centrales nuclaires ou
doptimiser lutilisation des moyens de production. Il est donc important que tous non seulement EDF,
mais aussi des tiers comme lAutorit de Sret Nuclaire puissent avoir confiance dans les rsultats
de simulation produits par les Outils de Calcul Scientifique (OCS). cette fin, les OCS sont soumis un
processus de Vrification et Validation (V&V), durant lequel plusieurs sources derreurs sont values :
les erreurs de modle, i.e. les diffrences entre le monde rel et les objets mathmatiques utili-
ss pour le reprsenter ;
les approximations mathmatiques utilises pour simplifier les modles, au premier rang des-
quelles on trouve par exemple les erreurs de discrtisation ou la rsolution approche des sys-
tmes linaires en rsultant ;
les erreurs de calcul, dues aux diffrences entre le comportement idal des nombres rels, et le
calcul ralis en pratique par le CPU, qui utilise typiquement des nombres en virgule flottante
selon la norme IEEE-754.
Les deux premires familles derreurs mentionnes ci-dessus ont pendant longtemps constitu les termes
dominants, et ont par consquent fait lobjet dtudes pousses. Cependant, les progrs continuels de la
puissance de calcul au cours des dernires dcennies, ainsi que les avances des mthodes numriques,
ont permis daccrotre considrablement la complexit des modles simuls (rduisant ainsi les carts de
modles) tout en amliorant leur rsolution (rduisant ainsi les approximations, par exemple de discrti-
sation via des maillages de plus en plus raffins). De plus le calcul parallle, dont lutilisation est de plus
en plus frquente, provoque une non-reproductibilit de lordre des calculs, qui entrane son tour la
non-reproductibilit des rsultats en arithmtique flottante. Limpact des erreurs de calcul sur la qualit
des rsultats devient donc non ngligeable, et lanalyse de larithmtique en virgule flottante constitue
maintenant un sujet dintrt pour lindustrie. Pourtant, lintroduction de mthodologies appropries dans
les processus de V&V industriels nest encore que marginale et reste assez largement faire.
Lune des causes permettant dexpliquer ce constat est la quasi-absence doutils permettant dvaluer
la qualit numrique de grands codes de calcul. Nous prsentons dans ce document loutil V ERROU, qui
vise faire bnficier le monde industriel des techniques danalyse des erreurs darrondis connues du
monde acadmique.

1
2 Vrification numrique avec V ERROU
Parmi les diffrentes techniques permettant dvaluer les instabilits numriques et les erreurs de
calcul, la famille des mthodes fondes sur larithmtique de Monte-Carlo (Monte-Carlo Arithmetic,
MCA) [1] semble tre la plus prometteuse pour les applications industrielles. Par exemple, lArithm-
tique Stochastique Discrte (ASD), implmente dans la bibliothque C ADNA [2, 3], a dj t utilise
avec succs sur des codes industriels [4]. Cependant, son utilisation ncessite linstrumentation complte
des sources du programme analyser, ce qui en fait une solution trop chre en pratique pour tre mise
en place largement dans lindustrie. Mme des outils moins contraignants, comme par exemple Veri-
ficarlo [5] qui demande simplement de recompiler le code de calcul (ainsi que de ses dpendances
analyser) avec un compilateur spcifique, restent souvent dune utilisation trop peu pratique pour tre
introduite de manire routinire dans un processus de V&V industriel.
Nous dcrivons ici V ERROU [6, 7], un outil de diagnostic des erreurs de calcul en arithmtique flot-
tante, open-source 1 et dvelopp par EDF R&D. V ERROU a t conu avec lobjectif den permettre
lapplication de grands codes industriels, en garantissant que lessentiel des fonctionnalits de diagnos-
tic soient disponibles sans ncessiter de recompiler le code de calcul ou davoir accs lintgralit de
ses sources (y compris les bibliothques sur lesquelles il sappuie). V ERROU sappuie pour cela sur la
plate-forme Valgrind [8], qui est dj largement utilis dans les communauts de developpeurs pour aider
au dboguage numrique. V ERROU est par consquent compatible avec la plupart des codes de calcul, et
bnficie de la mme souplesse dutilisation que Valgrind. Analyser un calcul ne demande quune lgre
modification de la ligne de commande :
valgrind --tool=verrou --rounding-mode=random PROGRAM [ARGS]
Lorsquil est appel de cette manire, V ERROU sappuie sur les fonctionnalits danalyse dynamique du
binaire fournies par Valgrind pour instrumenter le code de calcul. Chaque instruction flottante est mo-
difie de sorte renvoyer un rsultat arrondi alatoirement vers le haut ou le bas (au lieu dun arrondi
au plus prs, comme cela est normalement le cas). Les rsultats globaux du calcul sont affichs norma-
lement, si ce nest quils sont affects par laccumulation des arrondis alatoires dans tous les rsultats
intermdiaires. De ce fait, V ERROU implmente une Arithmtique en Arrondi Alatoire (AAA), qui peut
tre vue comme une forme spcifique de MCA, ou une mthode CESTAC asynchrone [9].
Limpact de V ERROU sur le temps dexcution du code slve en gnral un facteur compris
entre 9 et 15, mme si des ralentissements dun facteur suprieur 30 ont t observs dans de trs
rares cas. Mme sil sagit l de ralentissements importants, ceci reste comptitif par rapport aux outils
danalyse existants (Verificarlo : 100, C ADNA : 15 en Fortran et 5 en C++).
Cette simplicit dutilisation rend possible lutilisation de V ERROU dans un processus de V&V in-
dustriel. Les OCS disposent en effet gnralement une dune suite de cas-tests de non-rgression pour
laquelle les rsultats sont compars une rfrence afin de vrifier leur validit. Un ensemble doutils est
souvent disponible pour produire une synthse des rsultats afin que les dveloppeurs puissent dtermi-
ner dun coup doeil si un changement dans le code introduit un changement trop important des rsultats.
Lintroduction de V ERROU dans un tel processus permet den perturber les rsultats laide de lAAA.
Ces rsultats perturbs sont ensuite confronts aux rfrences selon le processus habituel afin dvaluer
la qualit numrique du code de calcul analys.
V ERROU propose aussi des fonctionnalits plus avances, comme la possibilit de restreindre lins-
trumentation une portion du code (un ensemble de fonctions ou mme un ensemble de lignes si le code
a t compil avec les bonnes options, comme gcc -g).

3 Localisation de lorigine des erreurs de calcul


V ERROU propose deux manires de localiser lorigine des erreurs de calcul dans le code source. La
premire repose sur le mcanisme, voqu ci-dessus, de restriction de la porte de linstrumentation :
en ne perturbant quune partie du programme, on identifie si cette partie produit des erreurs de calculs.
Ceci permet de raliser une recherche par bisection (utilisant lalgorithme de Delta-Debug [10]) afin de
1. http://github.com/edf-hpc/verrou

2
dterminer quelles fonctions (ou quelles lignes de code) sont lorigine des plus grandes instabilits
numriques. Un outil verrou_dd permet dautomatiser ce genre danalyse.
La deuxime mthode danalyse repose sur lutilisation combine de V ERROU et doutils danalyse
de couverture de code. Lorsquun programme est instrument pour raliser une analyse de couverture
(par exemple laide de gcc -fprofile-arcs -ftest-coverage), son excution produit un code
source annot permettant dindiquer le nombre de passages dans chaque ligne de code. La comparaison
de ces annotations pour deux excutions perturbes par lAAA permet de dterminer quels branchements
dans le code source sont instables (i.e. quels tests if conduisent prendre une branche diffrente sils
sont perturbs par lAAA).

4 Conclusion
Nous avons prsent dans ce document loutil V ERROU, qui vise faciliter lanalyse de la qualit
numrique des Outils de Calcul Scientifique industriels. Une telle analyse est rendue de plus en plus n-
cessaire par le fait que larithmtique flottante est responsable dune part croissante des erreurs affectant
les rsultats de calcul. Dans ce contexte, V ERROU vise permettre lintroduction de la vrification nu-
mrique dans les processus de V&V industriels, en fournissant les principales fonctionnalits suivantes :
compatibilit avec une large gamme doutils de calcul (mmes contraintes que Valgrind : pas
besoin de recompiler, pas besoin dun accs au code source. . . ), multi-langage (C/C++, Fortran,
Python, assembleur. . . ) ;
valuation des erreurs de calculs accumules, laide de lArithmtique en Arrondi Alatoire ;
localisation dans le code source des fonctions ou lignes dans lesquelles saccumulent les erreurs
darrondis affectant le plus les rsultats, ainsi que des tests instables.
V ERROU a dj t utilis avec succs sur un certain nombres doutils de calculs industriels, cou-
vrant une vaste gamme dapplications et de mthodes numriques : Athena 2D (contrle non-destructif
par ultra-sons), code_aster (mcanique des milieux continus), MFront (lois de comportement), Apo-
gene (optimisation de la production), Micado (neutronique), etc. Par ailleurs, loutil tant open source, il
peut constituer une base srieuse pour quiconque souhaite vrifier la qualit numrique de ses outils de
calcul.

Rfrences
[1] D. Stott Parker. Monte Carlo arithmetic: exploiting randomness in floating-point arithmetic. Technical Report
CSD-970002, University of California, Los Angeles, 1997.
[2] Fabienne Jzquel, Jean-Marie Chesneaux, and Jean-Luc Lamotte. A new version of the CADNA li-
brary for estimating round-off error propagation in Fortran programs. Computer Physics Communications,
181(11):19271928, 2010.
[3] Jean-Luc Lamotte, Jean-Marie Chesneaux, and Fabienne Jzquel. CADNA_C: A version of CADNA for
use with C or C++ programs. Computer Physics Communications, 181(11):19251926, 2010.
[4] Sethy Montan. Sur la validation numrique des codes de calcul industriels. PhD thesis, Universit Pierre et
Marie Curie (Paris 6), France, 2013. in French.
[5] Christophe Denis, Pablo de Oliveira Castro, and Eric Petit. Verificarlo: checking floating point accuracy
through Monte Carlo Arithmetic. In IEEE Internatinal Symposium on Computer Arithmetic (ARITH), 2016.
[6] Franois Fvotte and Bruno Lathuilire. VERROU: Assessing Floating-Point Accuracy Without Recompi-
ling. https://hal.archives-ouvertes.fr/hal-01383417, October 2016.
[7] Franois Fvotte and Bruno Lathuilire. VERROU: a CESTAC evaluation without recompilation. In Interna-
tional Symposium on Scientific Computing, Computer Arithmetics and Verified Numerics (SCAN), Uppsala,
Sweden, September 2016.
[8] Nicholas Nethercote and Julian Seward. Valgrind: A framework for heavyweight dynamic binary instrumen-
tation. In ACM SIGPLAN 2007 Conference on Programming Language Design and Implementation (PLDI),
2007.
[9] Jean Vignes. A stochastic arithmetic for reliable scientific computation. Mathematics and Computers in
Simulation, 35:233261, 1993.
[10] Andreas Zeller. Why Programs Fail. Morgan Kaufmann, Boston, second edition, 2009.