A long accumulator like a carry-save adder

Long accumulators for the exact summation of floating point numbers or products are well known tools in numerical analysis especially in algorithms verifying the result (C++ Toolbox for Verified Computing, Springer, New York, 1995). An exact dot product is one of the features of the upcoming interval standard (IEEE Interval Standard Working Group, P1788. http://grouper.ieee.org/groups/1788/). Usually an accumulator is realized as a memory block with operations to add floating point numbers and products. Several variants have been proposed to avoid carry rippling: use separate accumulators for positive and negative numbers, initialize the accu with a pattern not equal to zero, or perform a kind of carry look-ahead-technique. All these approaches are described in detail in Kulisch (Computer arithmetic and validity—theory, implementation, and applications. Series: de Gruyter Studies in Mathematics 33, 2008) and Bohlender (Computer arithmetic and self-validating numerical methods, Academic Press, San Diego, 1990). In this paper we propose a long accumulator similar to a carry-save adder. The main idea is to augment the long accumulator with cache information. The cache is used to store the carries or borrows, instead of propagating them through the whole accumulator every time. Due to the cache, operations are kept local in our approach. The full information of the exact result is represented by the accu and the cache. When we want to deliver the result we have to add the contents of the cache into the accumulator. In this paper we present an implementation in software and compare it with other approaches. Furthermore we discuss the advantages of this algorithm for a hardware implementation.

[1]  Ulrich W. Kulisch,et al.  Computer Arithmetic and Validity - Theory, Implementation, and Applications , 2008, de Gruyter studies in mathematics.

[2]  Gerd Bohlender,et al.  Gesichtspunkte zur Implementierung einer optimalen Arithmetik , 1982, Wissenschaftliches Rechnen und Programmiersprachen.

[3]  Ulrich W. Kulisch,et al.  Arithmetic for vector processors , 1987, 1987 IEEE 8th Symposium on Computer Arithmetic (ARITH).

[4]  Richard M. Stallman Free software foundation (FSF) , 2003 .

[5]  Ulrich W. Kulisch,et al.  C++ Toolbox for Verified Computing I , 1995 .

[6]  G. Bohlender What Do We Need Beyond IEEE Arithmetic? , 1990, Computer Arithmetic and Self-Validating Numerical Methods.

[7]  Ulrich W. Kulisch,et al.  Arithmetic for vector processors , 1988 .

[8]  Ulrich W. Kulisch,et al.  Accurate Arithmetic for Vector Processors , 1988, J. Parallel Distributed Comput..