FLiT: Cross-platform floating-point result-consistency tester and workload

Understanding the extent to which computational results can change across platforms, compilers, and compiler flags can go a long way toward supporting reproducible experiments. In this work, we offer the first automated testing aid called FLiT (Floating-point Litmus Tester) that can show how much these results can vary for any user-given collection of computational kernels. Our approach is to take a collection of these kernels, disperse them across a collection of compute nodes (each with a different architecture), have them compiled and run, and bring the results to a central SQL database for deeper analysis. Properly conducting these activities requires a careful selection (or design) of these kernels, input generation methods for them, and the ability to interpret the results in meaningful ways. The results in this paper are meant to inform two different communities: (a) those interested in seeking higher performance by considering “IEEE unsafe” optimizations, but then want to understand how much result variability to expect, and (b) those interested in standardizing compiler flags and their meanings, so that one may safely port code across generations of compilers and architectures. By releasing FLiT, we have also opened up the possibility of all HPC developers using it as a common resource as well as contributing back interesting test kernels as well as best practices, thus extending the floating-point result-consistency workload we contribute. This is the first such workload and result-consistency tester underlying floating-point reproducibility of which we are aware.

[1]  Philip Saponaro,et al.  Improving numerical reproducibility and stability in large-scale numerical simulations on GPUs , 2010, 2010 IEEE International Symposium on Parallel & Distributed Processing (IPDPS).

[2]  Qingyu Meng,et al.  Preliminary experiences with the uintah framework on Intel Xeon Phi and stampede , 2013, XSEDE.

[3]  John M. Dennis,et al.  KGEN: A Python Tool for Automated Fortran Kernel Generation and Verification , 2016, ICCS.

[4]  Devon Yablonski Numerical accuracy differences in CPU and GPGPU codes , 2011 .

[5]  Miriam Leeser,et al.  Make it real: Effective floating-point reasoning via exact arithmetic , 2014, 2014 Design, Automation & Test in Europe Conference & Exhibition (DATE).

[6]  Dorit Hammerling,et al.  Towards Characterizing the Variability of Statistically Consistent Community Earth System Model Simulations , 2016, ICCS.

[7]  Sheri Mickelson,et al.  A new ensemble-based consistency test for the Community Earth System Model (pyCECT v1.0) , 2015 .

[8]  Joseph D. Darcy,et al.  How Java’s Floating-Point Hurts Everyone Everywhere , 2004 .

[9]  J. Borwein,et al.  High-Precision Arithmetic : Progress and Challenges , 2013 .

[10]  Jonathan Richard Shewchuk,et al.  Adaptive Precision Floating-Point Arithmetic and Fast Robust Geometric Predicates , 1997, Discret. Comput. Geom..

[11]  Donald E. Knuth,et al.  The art of computer programming. Vol.2: Seminumerical algorithms , 1981 .

[12]  Dr. Martyn J. Corden,et al.  Consistency of Floating-Point Results using the Intel ® Compiler or Why doesn ’ t my application always give the same answer ? , 2010 .

[13]  T. J. Dekker,et al.  A floating-point technique for extending the available precision , 1971 .

[14]  Sylvie Boldo Deductive Formal Verification: How To Make Your Floating-Point Programs Behave , 2014 .

[15]  A Thesis Presented,et al.  Numerical Accuracy Differences , 2011 .

[16]  Alex Fit-Florea,et al.  Precision and Performance: Floating Point and IEEE 754 Compliance for NVIDIA GPUs , 2011 .

[17]  Douglas W. Nychka,et al.  A new ensemble-based consistency test for the Community Earth System Model , 2015 .