Page 1 of 1

### Efficient computation (solve) of Ax = b when A is symmetric

Posted: Thu Oct 05, 2017 4:28 pm
Hello,

I want to solve a SPARSE linear system Ax = b and I know, A is always a symmetric matrix (structure & values). The size of the matrix is n = 40800, it's a sparse matrix of size n x n. (containing real, double values).

As the matrix is symmetric with respect to structure and values, there might be quite some efficiency gain (up to 50%) if:

I would only copy and transfer the upper or lower triangle to Magma (Note: A single simulation I do, requires 8000-10000 matrix transfers!)
AND
Apply magmablas_dsymmetrize() ... if it's applicable to sparse matrices in CSR format and fast?
OR
Set a "symmetry" marker if it's available in Magma and if Magma would solve a linear system based on that? (another library offers such an option)

How to solve a linear system with sparse symmetric matrices efficiently?

Klaus

### Re: Efficient computation (solve) of Ax = b when A is symme

Posted: Thu Oct 05, 2017 4:37 pm
Dear Klaus,

MAGMA-sparse contains iterative Krylov solvers that exploit symmetry information, i.e. the CG method (potentially preconditioned with Jacobi or Incomplete Cholesky). This combination should be able to solve your problem with satisfying efficiency.

Most iterative solvers are based on sparse matrix vector products (SpMV), e.g. for generating the Krylov subspace. Your question hence boils down to whether there is an SpMV routine exploiting the symmetry information. The answer is no, and I am not aware of any GPU-implementation of the SpMV that does. (If there is, please point me to it).

My guess is that other libraries exploiting the symmetry information use direct solvers, and move to a Cholesky factorization if appropriate.

Please let me know whether this helps.

Thanks, Hartwig

### Re: Efficient computation (solve) of Ax = b when A is symme

Posted: Thu Oct 05, 2017 5:07 pm
Dear Hartwig,

based on your insights, I assume it's only a wrapper that hides an efficient copy process (lower<>upper) so I'll try the same - we'll whether there's a benefit.

Do you know how to apply (syntax) of magmablas_dsymmetrize()?

Code: Select all

``````void magmablas_dsymmetrize 	( magma_uplo_t  	uplo,
magma_int_t  	m,