The development and use of standard interfaces in software engineering plays a crucial role in the interoperability and reuse of software components. Standard interfaces for numerical linear algebra software have been shown to be very useful if the interface is simple yet flexible enough for a wide variety of users. However, widely adopted software standards for numerical linear algebra have been almost exclusively for dense linear systems. This project addresses the need for interface standards for sparse matrix software to promote wide availability of efficient core routines across a variety of computing platforms.
The investigators have proposed a ``toolkit'' of kernel routines for some of the basic operations in sparse numerical methods. In particular, they describe interfaces for routines which perform (i) sparse matrix times dense matrix product, (ii) the solution of a sparse triangular system with multiple right-hand-sides, (iii) the right permutation of a sparse matrix, and (iv) a check for the integrity of a sparse matrix representation. The Toolkit has been presented at numerous conferences and workshops in order to receive as much feedback as possible on its content from the expert practitioners in the field. In so doing, the interface has been able to adjust to an community agreed upon level of functionality before expending effort on implementing the required software.
With a relatively stable proposed standard interface in hand, the NIST members of the project are currently implementing the software for a subset of the Toolkit (called the ``Basic Subset''), including points (i) and (ii) for seven of the most commonly used sparse storage formats. All of the routines in the Toolkit Basic Subset are callable from both C/C++ and Fortran. In addition to the standard interface, the Basic Subset also provides a lower-level ``lightweight'' interface which can be used for added efficiency when the generality of the full Toolkit interface is not required.
The Toolkit implementation has been carefully designed so that basic core ``generating'' routines can be easily optimized for particular machine architectures, and the resulting optimized source code can be used to automatically create optimized source for a range of special case routines. In this way, a relatively small number of lines of code ( less than 5000) are leveraged to create the more than 100,000 lines of code required for the complete library. This not only speeds time-to-delivery, but greatly reduces programming errors.
After release of the Toolkit Basic library, the investigators will begin to collect feedback from users on the provided interface, facilitate vendor optimization of the core routines, and implement the remaining functionality of the Toolkit for release later in 1996.