Nikolay Mateev, Vladimir Kotlyar, Keshav PingaliStodghill, Paul2007-04-232007-04-231999-08http://techreports.library.cornell.edu:8081/Dienst/UI/1.0/Display/cul.cs/TR99-1761https://hdl.handle.net/1813/7415Sparse matrices are stored in compressed formats in which zeros are not stored explicitly. Writing high-performance sparse matrix libraries is a difficult and tedious job because there are many compressed formats in use and each of them requires specialized code. In this paper, we argue that (i) compressed formats should be viewed as {\em indexed-sequential access structures} (in the database sense), and (ii) efficient sparse codes exploit such indexing structures wherever possible. This point of view leads naturally to restructuring compiler technology that can be used to synthesize many sparse codes from high-level algorithms and specifications of sparse formats, exploiting indexing structures for efficiency. We show that appropriate abstractions of the indexing structures of commonly used formats can be provided to such a compiler through the type structure of a language like C++. Finally, we describe experimental results obtained from the {\em Bernoulli Sparse Compiler} which demonstrate that the performance of code generated by this compiler is comparable to the performance of programs in the NIST Sparse BLAS library. One view of this system is that it exploits restructuring compiler technology to perform a novel kind of template instantiation.388197 bytes1001212 bytesapplication/pdfapplication/postscripten-UScomputer sciencetechnical reportA Generic Programming System for Sparse Matrix Computations (REVISED)technical report