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

Permutation of a large sparse matrix

Robert_E_
Beginner
846 Views

Hi,

What is the fastest way of permuting a large sparse_matrix_t in csr or csc format?

I could either do manual permutations on the csr arrays or I could create a sparse permutation matrix and use the mkl_sparse_spmm method.

Either method seems to be not optimal since I don't benefit from parallelism on the former method and I have to create additional arrays for the Permutation matrix and create a new copy of the matrix on the latter method.

Also, I notice that there might be performance differences between column and row permutations depending on whether the matrix is in csr or csc.

Is there a better way to do it?

0 Kudos
2 Replies
Kirill_V_Intel
Employee
846 Views

Hi Robert,

I don't see any faster way in MKL than using something like spmm (or sp2m) right now. 

Do you want to permute the rows, columns or rows and columns?

What do you mean by performance difference, could you please elaborate?

The more substantial question is: what do you want this matrix for? Often, when people think of permuting matrices (say P*A) they only need this product to use in a computation like (P*A)*v. My point is that for, say, (P*A)*v you actually don't need to form the matrix explicitly, you can do it as P*(A*v) and thus simply permute the intermediate vector (A*v).

Another thing is that if you want to compute PAP^T with symmetric A, you can use mkl_sparse_?_sypr to avoid forming the intermediate product.

Best,
Kirill

0 Kudos
Gennady_F_Intel
Moderator
846 Views

Robert, could you try to submit the official Feature Request to the Intel Online Service Center

0 Kudos
Reply