verificarlo: checking floating-point accuracy through … · verificarlo: checking floating-point...

16
Verificarlo: Checking Floating-Point Accuracy Through Monte Carlo Arithmetic Study on Europlexus Pablo de Oliveira Castro 1 , Olivier Jamond 2 , E. Petit 3 , C. Denis 4 , Y. Chatelain 1 1 UVSQ - 2 CEA - 3 Intel - 4 ENS Paris-Saclay 2017-06-28 – Forum Teratec 1 / 16

Upload: ngotram

Post on 29-May-2018

232 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Verificarlo: Checking Floating-Point Accuracy Through … · Verificarlo: Checking Floating-Point Accuracy ... PhD student in ... Checking Floating-Point Accuracy Through Monte

Verificarlo: Checking Floating-Point AccuracyThrough Monte Carlo Arithmetic

Study on Europlexus

Pablo de Oliveira Castro1, Olivier Jamond2, E. Petit3, C. Denis4,Y. Chatelain1

1UVSQ - 2 CEA - 3Intel - 4ENS Paris-Saclay

2017-06-28 – Forum Teratec

1 / 16

Page 2: Verificarlo: Checking Floating-Point Accuracy Through … · Verificarlo: Checking Floating-Point Accuracy ... PhD student in ... Checking Floating-Point Accuracy Through Monte

Motivation

Changing architecture, parallelisation, heterogeneity, compiler,optimizations level and language can result in different numerical results.

I Verificarlo is a numerical debugger for the IEEE-754 floating pointmodel

I Estimate significant digits of a computationI Compromise between performance, precision and reproducibilityI Open Source GPLv3 at github.com/verificarlo/verificarlo

2 / 16

Page 3: Verificarlo: Checking Floating-Point Accuracy Through … · Verificarlo: Checking Floating-Point Accuracy ... PhD student in ... Checking Floating-Point Accuracy Through Monte

Floating point computation: some adverse effects

I A floating point computation approximates the exact computationI Loss of arithmetical properties (for example the floating point

summation is not associative)I Absorption, a part of the significant digits cannot be represented in

the result formatI Cancellation, relative error when subtracting variables with very close

values

223

+

1.625 ×

23 1.3×

absorbed digits

3 / 16

Page 4: Verificarlo: Checking Floating-Point Accuracy Through … · Verificarlo: Checking Floating-Point Accuracy ... PhD student in ... Checking Floating-Point Accuracy Through Monte

Example by W. Kahan, condition number 2.497e8

(0.2161 0.14411.2969 0.8648

)x =

(0.14400.8642

), xexact =

(2

−2

)I Results obtained using the LAPACK routines

xsingle =(

1.33317912−1.00000000

)xdouble =

(2.00000000240030218

−2.00000000359962060

)I How to automatically estimate s, the number of significant digits ?

I Without computing the exact theoretical answerI On a whole full scale scientific codeI Without modifying the application codeI And taking into account compiler optimization and special

instructions

4 / 16

Page 5: Verificarlo: Checking Floating-Point Accuracy Through … · Verificarlo: Checking Floating-Point Accuracy ... PhD student in ... Checking Floating-Point Accuracy Through Monte

Monte Carlo Arithmetic, [S. Parker, 1999]

absorption cancellation

5 / 16

Page 6: Verificarlo: Checking Floating-Point Accuracy Through … · Verificarlo: Checking Floating-Point Accuracy ... PhD student in ... Checking Floating-Point Accuracy Through Monte

Monte Carlo Arithmetic: models FP Error Propagation

-

Across multiple MCA executions: error digits will change significant digits will stay stable

cancellationmca noise

6 / 16

Page 7: Verificarlo: Checking Floating-Point Accuracy Through … · Verificarlo: Checking Floating-Point Accuracy ... PhD student in ... Checking Floating-Point Accuracy Through Monte

Monte Carlo Arithmetic: Estimating output error

−2.5

0.0

2.5

5.0

0.00 0.25 0.50 0.75 1.00

x

T(x

)

Figure: Tchebychev Polynomial, catastrophic cancellation near 1 [Wilkinson,1994]

I Estimate the number of significant digits by using N Monte Carlosamples s = − log10 ( σ

µ )I µ: empirical mean and σ: empirical standard deviation

7 / 16

Page 8: Verificarlo: Checking Floating-Point Accuracy Through … · Verificarlo: Checking Floating-Point Accuracy ... PhD student in ... Checking Floating-Point Accuracy Through Monte

Verificarlo

LLVM

C/C++/FortranApplication

Replace FPoperation by MCA equivalents

MCA backends: • mpfr (libmca) • quad

Executable

Sampling(embarassingly parallel)

• mask

I Transparently transforms code to Monte Carlo ArithmeticI Operates on optimized code: evaluates floating point errors

introduced by compiler optimizations

- %37 = fadd fast <4 x float> %wide.load.2, %31+ %37 = call <4 x float> @_4x_mca_floatadd(<4 x float> %wide.load.2,

<4 x float> %31)

8 / 16

Page 9: Verificarlo: Checking Floating-Point Accuracy Through … · Verificarlo: Checking Floating-Point Accuracy ... PhD student in ... Checking Floating-Point Accuracy Through Monte

Verificarlo Overhead

version samples total time (s) timesample (s)

original program 1 .056 .056Verificarlo MASK 128 12.42 .097Verificarlo MPFR 128 834.57 6.52Verificarlo QUAD 128 198.58 1.55Verificarlo MPFR 16 thds. 128 54.39 .42Verificarlo QUAD 16 thds. 128 12.54 .098

Table: Verificarlo overhead on a compensated sum algorithm (double) on a16-core 2-socket Xeon [email protected].

I Monte Carlo Arithmetic requires additional precision which is costlyI No size fits all

I MASK backend is cheap (x2 per iteration) but impreciseI QUAD backend implements exact MCA model but costly (x27 per

iteration)I MPFR used only for validation

I Embarrassingly parallel across executions9 / 16

Page 10: Verificarlo: Checking Floating-Point Accuracy Through … · Verificarlo: Checking Floating-Point Accuracy ... PhD student in ... Checking Floating-Point Accuracy Through Monte

Example by W. Kahan, condition number 2.497e8

I Recall: computations using IEEE-754 FP numbersPrecision Result s

SP x(1) = 1.33317912 0x(2) = −1.00000000 0

DP x(1) = 2.00000000240030218 9x(2) = 2.00000000359962060 9

I Computation performed with Verificarlo(N = 1000 samples)

Precision µ σ sVerificarlo SP µ(x(1)) = 1.02463705 σ(x(1)) = 6.4... 0.0

µ(x(2)) = 6.46717332 σ(x(2)) = 9.6... 0.0Verificarlo DP µ(x(1)) = 1.9999999992 σ(x(1)) = 8.4...× 10−9 8.3

µ(x(2)) = −1.9999999988 σ(x(2)) = 1.2...× 10−8 8.2

I For this example, verificarlo automatically instrumented LAPACKand BLAS libraries without any modification of their source code

10 / 16

Page 11: Verificarlo: Checking Floating-Point Accuracy Through … · Verificarlo: Checking Floating-Point Accuracy ... PhD student in ... Checking Floating-Point Accuracy Through Monte

Study on Europlexus (EPX)

www-epx.cea.fr

I Fast transient dynamic simulationI soundness of mechanical confinement barriers in nuclear reactorsI soundness of public structures in case of explosions

I 1 million lines of Fortran 77 and Fortran 90I Instrumented out of the box with Verificarlo without any change to

the source code

11 / 16

Page 12: Verificarlo: Checking Floating-Point Accuracy Through … · Verificarlo: Checking Floating-Point Accuracy ... PhD student in ... Checking Floating-Point Accuracy Through Monte

Europlexus: Checking FP reproducibility

I Port to new architectures with more vectorization or parallelismI Select reproducible regression checks for code modernization

Fragilized

Fragilized

a. Normal (IEEE) b. Fragilized (IEEE)

c. Normal (100 MCA samples) d. Fragilized (100 MCA samples)

0.0

0.2

0.4

0.6

0.0

0.2

0.4

0.6

−0.2 −0.1 0.0 0.1 0.2 −0.2 −0.1 0.0 0.1 0.2x

z

Figure: Buckling simulation of a 1D beam

12 / 16

Page 13: Verificarlo: Checking Floating-Point Accuracy Through … · Verificarlo: Checking Floating-Point Accuracy ... PhD student in ... Checking Floating-Point Accuracy Through Monte

VTK plugin for EuroplexusI Europlexus dynamic buckling of a rectangular section beamI Generic and automatic Verificarlo VTK post-process plugin

0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.0160

5

10

15

time

average number ofsignificant digits overthe mesh points

bifurcation

13 / 16

Page 14: Verificarlo: Checking Floating-Point Accuracy Through … · Verificarlo: Checking Floating-Point Accuracy ... PhD student in ... Checking Floating-Point Accuracy Through Monte

VTK plugin for Europlexus

I VTK plugin includes multiple views allowing a refinement of the analysisI Using stdev and mean allows to better localize the loss of precision on the beam

14 / 16

Page 15: Verificarlo: Checking Floating-Point Accuracy Through … · Verificarlo: Checking Floating-Point Accuracy ... PhD student in ... Checking Floating-Point Accuracy Through Monte

Verificarlo for Mixed Precision optimization

I Study on ABINIT: DFTabinitio simulation

I Perovskite simulation withnon-local effects

I Find the minimal virtualprecision for each functionthat guarantees accurateresults (here machineprecision)

I pinpoint fragile routinesI detect routines that can

be converted to singleprecision

I results from Y.Chatelain, PhDstudent in collaboration with M.Torrent and J. Bieder

0 5 10 15 20 23 25 30 35 40 45 50 53

invcb_bound_getng_prcref_

__m_lobpcgwf_MOD_lobpcgwf2__m_pawfgr_MOD_pawfgr_init

xcmult_initro_

moddiel___m_fftcore_MOD_kpgsph

__m_xg_MOD_xgblock_colwisecaxmygetcut_

prep_fourwf_pawmkrho_

__m_pawrhoij_MOD_symrhoijdotprodm_v_pawmknhat_

xcpot___m_pawxc_MOD_pawxcsum

symrhg_newrho_

pawaccrhoij___m_paw_sphharm_MOD_initylmr__m_lobpcgwf_MOD_getghc_gsc

__m_paw_numeric_MOD_paw_splinescfopt_

invars2_getghc_

__m_xg_MOD_xgblock_addmkffnl_

__m_special_funcs_MOD_abi_derfc__m_splines_MOD_splfit

__m_paw_atom_MOD_atompaw_shpfun__m_sgfft_MOD_sg_fftz

metric_atm2fft_

__m_pawrad_MOD_nderiv_lin__m_paw_atom_MOD_atompaw_dij0

hartre___m_paw_numeric_MOD_paw_jbessel

__m_paw_atom_MOD_atompaw_shapebes__m_pawpsp_MOD_pawpsp_lo

xcpbe_etotfor_

__m_pawpsp_MOD_pawpsp_17invtorho_

__m_pawxc_MOD_pawxcmpawdenpot_

__m_pawdij_MOD_pawdijhat__m_pawrad_MOD_poisson

dotprod_vn___m_pawrad_MOD_simp_gen

rhohxc___m_ewald_MOD_ewald

min virtual precision

15 / 16

Page 16: Verificarlo: Checking Floating-Point Accuracy Through … · Verificarlo: Checking Floating-Point Accuracy ... PhD student in ... Checking Floating-Point Accuracy Through Monte

Concluding remarks and future work

I The assessment of the numerical accuracy of scientific codesbecomes crucial

I When porting a scientific code on another programming language oron different computing resources

I To find the best compromise between performance and precisionI Transparent instrumentation eases large code bases analysis.I Verificarlo is a young project but tested on

I Code ASTER and Telemac (EDF)I Europlexus, Abinit (CEA)I Yales2 (CORIA)

I Future work: Interflop (github.com/interflop/interflop)I Open framework for numerical analysis toolsI Collaboration between EDF, Intel, and UVSQI Enables sharing Verrou and Verificarlo back-ends (MCA / Random

Rounding) and front-ends (Valgrind / LLVM instrumentation)I Unite efforts on post-processing and analysis toolsI If interested, join us!

16 / 16