Algorithms in the field of linear algebra are strictly separated into a dense and a sparse world. BlasBooster provides an opportunity to combine these two worlds in a dynamic way by dividing matrices and vectors with respect to their type, occupation and accuracy, so that in each case the most appropriate algorithm can by applied.
Let’s consider, for instance, a matrix-matrix multiplication. First, the matrices A and B will be divided into sub-matrices. Then, each sub-matrix will be converted into their ideal representation with respect to their occupation and significance. Typical matrix types are:
MultipleMatrix<Matrix<Sparse, double>, Matrix<Dense, float>>
MultipleMatrix<Matrix<Sparse, double>, Matrix<Sparse, float>>
MultipleMatrix is a special, composed matrix type which is
comparable to an expression template of a matrix sum. The type
MultipleMatrix<Sparse, double>, Matrix<Dense, float>>, for instance,
is useful if a matrix have many small entries which can be stored in single
precision and only some entries which must be stored in double precision.
For the actual multiplication
A x B, several multiplications of sub-matrices
of different types will be performed and summed up to the the resulting matrix
In addition to the direct usage of the BlasBooster interface, the conventional BLAS standard is also supported. Therefore, it is possible to use BlasBooster without any changes within your application by only linking the BlasBooster library instead of the conventional BLAS library like OpenBLAS, IntelMKL, or NVIDIA cuBLAS. Moreover, the special module BlasAnalyzer assess your application with respect to the BLAS usage and reports a summary of all relevant values and timings.