I am trying to solve for x in Ax=B, where A is a symmetric positive definite square sparse matrix, B is a matrix with the same numbers of rows as A and multiple columns, and x has the same dimensions as B.
I have successfully used Pardiso and the MKL DSS (direct sparse solver) routines for this, but I am looking for a third alternative, and from the documentation it looks like the mkl_dcsrsm routine should be able to do it, however it just returns garbage.
I suspect that either mkl_dcsrsm isn't meant for what I'm doing or I am setting the matdescra array incorrectly (I have tried 'SUNF ' and 'TUNF ' with 1-based indexing). The documentation on mkl_dcsrsm says that "A is a sparse upper or lower triangular matrix...". In my case A is a sparse symmetric matrix and hence I am just passing it the upper triangle (like I do with Pardiso and MKL DSS).
Can anyone shed some light on it?
The MKL_?csrsm routines are intended to be used when the linear equations to be solved are triangular. Perhaps, you confused a triangular matrix with the lower (or upper) triangular part of a symmetric matrix?
The difference is that, in a lower triangular matrix, the upper triangle contains nothing but zeroes above the main diagonal, whereas in a symmetric matrix the upper triangle holds a mirror image of the lower triangle.
It is up to the software designer to decide whether the conceptually present zeroes (or the mirror image values) are actually needed to be stored or used in the argument arrays passed to the solver.
Thanks for clarifying that.
Do you know if the MKL DSS routines call the Pardiso routines under the covers or are they internally different solvers? There are quite a few references to Pardiso in the DSS documentation.
MKL doc just mentioned, DSS is an alternative to Intel MKL PARDISO interface. But right, you can take it as MKL DSS routines call Pardiso routines under the covers. The core implementation of DSS is based on pardiso functionality.
It makes perfect sense that MKL provides a DSS interface to Pardiso. DSS is an older direct sparse solver -- indeed, there is a chapter on DSS in the DEC/Compaq manual for the CXML library (2001). Providing access to a new solver using an older interface makes it easier to use the new solver with older code without requiring changes to the code. Pardiso was released in 2007, if I am not mistaken.