Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.
6650 Discussions

Partial Matrix-Vector Multiplication of a Sparse Matrix?


I use MKL functions "mkl_zcsrsymv" and "mkl_zcsrmv" in order to multiply a complex valued sparse matrix A with a vector b (MVP or y=A*b). Now I need to use a partial matrix-vector multiplication, in which only selected rows of the matrix A in a range specified by  rowStart to rowEnd needs to be multiplied by the vector b in its efficient way. How can I perform such a multiplication with these functions?   is there any other MVP routine in MKL library for such a need? As the matrix is in CSR format, this should be applied to the internal loop for doing the MVP for every row and the range of that loop should be from rowStart  to  rowEnd , but I was not successful in finding an approach to transfer such info? Thank you for your comments. 

0 Kudos
2 Replies

Hi Precioso,

If the   partial matrix-vector multiplication, in which only selected rows of the matrix A in a range ,  you may try the MKL new Sparse BLAS interface:



and sample code under MKL install folder.

and if this is still a question, please create a request to Online Service Center:

Best Regards,



Many thanks for your comment.

Yes indeed this way of inspector-executor BLAS operation would work to command MVP on selected rows of a general type sparse matrix (mkl_zcsrmv).  I am also wondering if same sort of partial operation can be applied to the multiplication of the inverse components computed by PARDISO routine in MKL. Here is exactly what is needed: 

Currently the  dss_create is being used to initialize the sparse solver and pre compute factorization components of the matrix A. The handle and its data stucture are being used repeatedly later to compute the operation y=inv (A)*b. The inv (A) however is block structured, having non-zeros only in some diagonal blocks and zero coupling everywhere between the blocks ( i.e. it could be represented by the sum of multiple inverse operations for each block and appropriate indexing). Is it possible to call the operation y=inv (A)*b partially by specifying a range  of desired rows of the matrix inv(A)? How is it possible to access to the internal data of the PARDISO handle created by dss_create, like factorization components (L, D, L transposed) or pivoting data, to be multiplied partially in a specified range of rows with the right hands side vector b? This, in combination with partial MVP, is really needed for the block Gauss Seidel inversion of block-structured sparse matrices and I hope there is a solution for it.  Thank you in advance.