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?
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.