C++ API for BLAS and LAPACK
Gates, Mark and Luszczek, Piotr and Kurzak, Jakub and Dongarra, Jack, and Arturov, Konstantin and Cecka, Cris and Freitag, Chip
The Basic Linear Algebra Subroutines (BLAS) and Linear Algebra PACKage (LAPACK) have been around for many decades and serve as de facto standards for performance-portable and numerically robust implementations of essential linear algebra functionality. Both are written in Fortran, with C interfaces provided by CBLAS and LAPACKE, respectively. BLAS and LAPACK will serve as building blocks for the SLATE project. However, their current Fortran and C interfaces are not suitable for SLATE's templated C++ implementation. The primary issue is that the data type - single, double, complex-single, and complex-double - is specified in the routine name: sgemm, dgemm, cgemm, and zgemm, respectively. A templated algorithm requires a consistent interface with the same function name to be called for all data types. Therefore, we are proposing a new C++ interface layer on top of the existing BLAS and LAPACK libraries. We start with a survey of traditional BLAS and LAPACK libraries, both the Fortran and C interfaces. Then we review various C++ linear algebra libraries to see the trends and features available. Finally, Chapter 3 covers our proposed C++ API for BLAS and LAPACK.
Published 2017-09-12 04:00:00 as ut-eecs-17-753 (ID:613)