PROMISE: floating-point precision tuning with stochastic arithmetic
Résumé
Nowadays, most floating-point computations in numerical simulations are performed in IEEE 754 binary64 precision (double precision). This means that a relative accuracy of about 10−16 is provided for every arithmetic operation. Indeed, in practice, programmers tend to use the highest precision available in hardware which is the double precision on current processors. This approach can be costly in terms
of computing time, memory transfer and energy consumption [1]. A better strategy would be to use no more precision than needed to get
the desired accuracy on the computed result. The challenge of using mixed precision is to find some parts of codes (and so variables) that
may be executed with lower precision. Unfortunately the amount of possible configurations is exponential in the number of variables.
To overcome this difficulty, we propose an algorithm and a tool called PROMISE (PRecision OptiMISEd) based on the delta debugging search algorithm [2] that provide a mixed precision configuration
with a worst-case complexity quadratic in the number of variables. From an initial C or C++ program and a required accuracy on the
computed result, PROMISE automatically modifies the precision of variables. To estimate the numerical quality of results, PROMISE
uses Discrete Stochastic Arithmetic (DSA) [3] which controls round-off errors in simulation programs. Unlike Precimonious [4], PROMISE
does not focus on performance constraints, it can rather be seen as a tool helping developers to reduce the cost of double precision variables
and improve the memory usage of their code. The PROMISE tool has been successfully tested on programs implementing several numerical
algorithms including linear system solving and also on an industrial code that solves the neutron transport equations [5].