21 research outputs found
Salsa: An Automatic Tool to Improve the Numerical Accuracy of Programs
This article describes Salsa, an automatic tool to improve
the accuracy of the foating-point computations done in numerical codes. Based on static analysis methods by abstract interpretation, our tool takes as input an original program, applies to it a set of transformation rules and then generates a transformed program which is more accurate than the initial one. The original and the transformed programs are written in the same imperative language. This article is a concise description of former work on the techniques implemented in Salsa, extended with a presentation of the main software architecture, the inputs and outputs of the tool as well as experimental results obtained by applying our tool on a set of sample programs coming from embedded systems and numerical analysis
On the Impact of Numerical Accuracy Optimization on General Performances of Programs
The floating-point numbers used in computer programs are a finite approximation of real numbers. In practice, this approximation may introduce round-off errors and this can lead to catastrophic results. In previous work, we have proposed intraprocedural and interprocedural program
transformations for numerical accuracy optimization. All these transformations have been implemented in our tool, Salsa. The experimental results applied on various programs either coming from embedded systems or numerical methods, show the efficiency of the transformation in terms of numerical accuracy improvement but also in terms of other criteria such as execution time and code size. This article studies the impact of program transformations for numerical accuracy specially in embedded systems on other efficiency parameters such as execution time, code size and accuracy of the other variables (these which are not chosen for optimization)
Intra-procedural Optimization of the Numerical Accuracy of Programs
Numerical programs performing
oating-point computations
are very sensitive to the way formulas are written. These last years, several
techniques have been proposed concerning the transformation of
arithmetic expressions in order to improve their accuracy and, in this article,
we go one step further by automatically transforming larger pieces
of code containing assignments and control structures. We define a set
of transformation rules allowing the generation, under certain conditions
and in polynomial time, of larger expressions by performing limited formal
computations, possibly among several iterations of a loop. These
larger expressions are better suited to improve the numerical accuracy
of the target variable. We use abstract interpretation-based static analysis
techniques to over-approximate the roundoff errors in programs and
during the transformation of expressions. A prototype has been implemented
and experimental results are presented concerning classical numerical
algorithm analysis and algorithm for embedded systems
Numerical Accuracy Improvement of Programs: Principles and Experiments
In general, the correctness of numerical computations of programs based on floating-point arithmetic
is not intuitive and developers hope to compute an accurate result without guaranty. To solve this problem, we procceed by automatic source to source transformation of programs to improve their numerical accuracy
Numerical program optimisation by automatic improvement of the accuracy of computations
Over the last decade, guaranteeing the accuracy of computations relying on the IEEE754 floating-point arithmetic has become increasingly complex. Failures, caused by small or large perturbations due to round-off errors, have been registered. To cope with this issue, we have developed a tool which corrects these errors by automatically transforming programs in a source to source manner. Our transformation, relying on static analysis by abstract abstraction, operates on pieces of code with assignments, conditionals and loops. By transforming programs, we can significantly optimize the numerical
accuracy of computations by minimizing the error relatively to the exact result. In this article, we present two important desirable side-effects of our transformation. Firstly, we show that our transformed programs, executed
in single precision, may compete with not transformed codes executed in double precision. Secondly, we show that optimizing the numerical accuracy of programs accelerates the convergence of numerical iterative methods. Both
of these properties of our transformation are of great interest for numerical software
Improving the numerical accuracy of programs by automatic transformation
The dangers of programs performing floatingpoint
computations are well known. This is due to the
sensitivity of the results to the way formulæ are written.
These last years, several techniques have been proposed
concerning the transformation of arithmetic expressions in
order to improve their numerical accuracy and, in this article,
we go one step further by automatically transforming
larger pieces of code containing assignments and control
structures. We define a set of transformation rules allowing
the generation, under certain conditions and in polynomial
time, of larger expressions by performing limited formal
computations, possibly among several iterations of a loop.
These larger expressions are better suited to improve, by reparsing,
the numerical accuracy of the program results. We
use abstract interpretation-based static analysis techniques
to over-approximate the round-off errors in programs and
during the transformation of expressions. A tool has been
implemented and experimental results are presented concerning
classical numerical algorithms and algorithms for
embedded systems
Amélioration à la Compilation de la Précision de Programmes Numériques
Les calculs en nombres flottants sont intensivement
utilisés dans divers domaines, notamment les systèmes embarqués
critiques. En général, les résultats de ces calculs sont
perturbés par les erreurs d’arrondi. Dans un scenario critique,
ces erreurs peuvent être accumulées et propagées, générant
ainsi des dommages plus ou moins graves sur le plan humain,
matériel, financier, etc. Il est donc souhaitable d’obtenir
les résultats les plus précis possible lorsque nous utilisons
l’arithmétique flottante. Pour ce faire, nous avons développé
un outil qui corrige partiellement ces erreurs d’arrondi, par
une transformation automatique et source Ă source des programmes.
Notre transformation repose sur une analyse statique
par interprétation abstraite qui fournit des intervalles
pour les variables présentées dans les codes sources. Nous
transformons non seulement des expressions arithmétiques
mais aussi des morceaux de code avec des affectations, des
boucles, des conditionnelles, des fonctions, etc. Les résultats
obtenus par notre outils sont très prometteurs. Nous avons
montré que nous améliorions de manière significative la précision
numérique des calculs en minimisant l’erreur par rapport
à l’arithmétique exacte des réels. Un autre critère très
intéressant est que notre technique permet d’accélérer la vitesse
de convergence de méthodes numériques itératives par
amélioration de leur précision comme les méthodes de Newton,
Jacobi, Gram-Schmidt, etc. Nous avons réussi à réduire
le nombre d’itérations nécessaire pour converger de plusieurs
dizaines de pourcents. Nous avons aussi étudié l’impact de
l’optimisation de la précision sur le format des variables (en
simple ou double précision). Pour ce faire, nous avons comparé
deux programmes sources Ă©crits en simple et en double
précision avec celui transformé en simple précision. Les résultats
obtenus montrent que le programme transformé (32
Bits) est très proche du résultat exact de celui de départ (64 Bits).
Cela permet à l’utilisateur de dégrader la précision sans
perdre beaucoup d’informations. D’un point de vue théorique,
nous avons prouvé que les programmes générés n’ont pas forcément
la même sémantique que les programmes d’origine,
mais que mathématiquement, ils sont équivalents
Optimizing the accuracy of a rocket trajectory simulation by program transformation
Static analysis by abstract interpretation is one of the most
successful techniques used to over-approximate the roundoff
errors in numerical programs. In our case, we are inter-
ested in using this method to improve the accuracy of pro-
grams which perform
oating-point computations, known
for their sensitivity to the way formulas are written. We
are interested in transforming automatically pieces of code
by applying to them several rewriting rules. In this arti-
cle, we demonstrate the effectiveness of our approach on a
non-trivial numerical simulation code